Когда я использую xdata?

Я являюсь новым при программировании встроенной системы. Я работаю над устройством, которое использует 8 051 чипсет. Я заметил в примерах программ, что при определении переменных, иногда они используют ключевое слово xdata. как это...

статический неподписанный символьный xdata PatternSize;

в то время как другие времена xdata ключевое слово опущены.

Мое понимание - то, что xdata ключевое слово сообщает компилятору это, что переменная должна быть сохранена во внешнем, флэш-памяти, памяти.

В каких случаях я должен снабдить переменные внешне xdata? Доступ к тем переменным занимает больше времени, правильно? Значения сохранили использование xdata, не остаются после жесткой перезагрузки устройства делают их?

Кроме того, я понимаю, что статическое ключевое слово означает, что переменная сохранится через каждый вызов к функции, в которой это определяется. Статичный и xdata должны использоваться вместе?

8
задан starblue 11 January 2010 в 20:25
поделиться

4 ответа

Архитектура 8051 Три отдельные адресные пространства, Core Ram использует 8-битный адрес, поэтому может быть до 256 байт, XDATA - это 16-битное адресное пространство (64KBYTES) с возможностью чтения / записи, а пространство программы является 16-битным адресным пространством с выполнением и прочитано -Не возможности данных. Из-за его небольшого диапазона адресов и непосредственной связи к ядру обрабатывающую основной оперативную память более эффективно с точки зрения кодовых пространств и циклов доступа

Оригинальная ядра 8051 имела крошечную оперативную память (адресное пространство 256 байтов, но Некоторые варианты имели половину, что в реальной памяти), и XDATA сослан на память данных OFF-CHAP (в отличие от памяти программы). Однако самые современные 8051 архитектурные устройства имеют на чипсе xdata и память программы.

Итак, вы можете использовать основную память, когда производительность имеет решающее значение и xData для более крупных объектов памяти. Однако компилятор должен в большинстве случаев принять это решение для вас (проверьте руководство вашего Compilr, он подробно опишут, как выделено память). Набор инструкций делает его эффективным для реализации стека в основной памяти, тогда как статические и динамически выделенные данные обычно будут более разумно выделены в XDATA. Если компилятор имеет ключевое слово XData, то он переопределят стратегию компилятора и должен использоваться только тогда, когда стратегия компилятора как-то не удается, поскольку она уменьшит переносимость кода.

[edit] Примечание. Кроме того, в том, что основная память включает в себя обрабатываемую битовую область в 32байте, инструкции по битовым адресам используют 8-битный адрес в этом регионе для непосредственного доступа к индивидуальным битам. Регион существует в течение 256bybyte Byte Byte Addressable Core Memory, так что и бит, так и байт адресуемой [/ edit]

7
ответ дан 5 December 2019 в 10:03
поделиться

XDATA позволяет компилятору о том, что данные хранятся во внешней оперативной памяти, поэтому он должен использовать другую инструкцию для чтения и записи этой памяти вместо внутренней оперативной памяти.

Доступ к внешним данным занимает больше времени. Я обычно вкладываю переменные прерывания во внутренней оперативной памяти и большинстве больших массивов во внешней оперативной памяти.

Как к состоянию внешней оперативной памяти после жесткого сброса (не цикл питания): это будет зависеть от настройки аппаратного обеспечения. Линия сброса переходит на внешний обломок? Также некоторые чипы поставляются с xdata в чипе ЦП. Прочитайте это снова. Некоторые чипы имеют процессор 8051, а также некоторое количество xdata внутри IC.

Статические и xdata не перекрываются. Статик говорит компилятору, как выделить переменную (на стеке или в месте памяти). XDATA говорит компилятору, как добраться до этой переменной. Статический может также ограничить пространство имени этой переменной только к тому файлу. Вы можете иметь статическую переменную XData, которая является локальной для просто функции, и имеет статическую переменную, которая является локальной для функции, но использует внутреннюю оперативную память.

5
ответ дан 5 December 2019 в 10:03
поделиться

Как и когда использовать область памяти XData зависит от архитектуры системы. Некоторые системы могут иметь RAM по этому адресу, в то время как другие могут иметь ром или вспышку. В любом случае доступ будет медленнее, чем доступ к внутренней оперативной памяти, ПЗУ или вспышке.

Вообще говоря, большие предметы, постоянные предметы и меньшие использованные предметы должны переходить в xdata. Там нет стандартных правил относительно того, что идет в xdata, так как это зависит от архитектуры.

-121--3595072-

У 8051 есть диапазон 128 байтового диапазона царапин «псевдорегистраторы», которые (большинство) компиляторов используют в качестве значения по умолчанию для объявленных переменных. Но, очевидно, эта область очень маленькая, и вы хотите иметь возможность размещать переменные в 16-битной памяти. Это то, для чего является спецификатор XData (I.E. «Внешние данные»). Что поставить где зависит, очевидно, на что такое данные и как вы планируете использовать его.

В основном я думаю, что это не тот вопрос. Вам необходимо сначала понимать вашу архитектуру CPU, прежде чем изучать, как использовать функции Commital Compiler.

1
ответ дан 5 December 2019 в 10:03
поделиться

Как и когда использовать область памяти XData зависит от архитектуры системы. Некоторые системы могут иметь RAM по этому адресу, в то время как другие могут иметь ром или вспышку. В любом случае доступ будет медленнее, чем доступ к внутренней оперативной памяти, ПЗУ или вспышке.

Вообще говоря, большие предметы, постоянные предметы и меньшие использованные предметы должны переходить в xdata. Там нет стандартных правил относительно того, что идет в xdata, так как это зависит от архитектуры.

1
ответ дан 5 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: