Я хочу понять синтаксис, используемый Pic24 EDS
__eds__ WORD __ramspace[0x100] __attribute__((eds,address(0x8000ul),noload));
Я хочу понять синтаксис выше (программа для pic24 и в C) особенно __ramspace[0x100]
, Кто-нибудь может мне помочь?
3 ответа
Это немного поздно, но, возможно, это может помочь кому-то еще:
__eds__ означает, что вы хотите поместить все, что следует, в расширенное пространство данных. Вы делаете это, когда хотите использовать пространство данных за определенным адресом. Вы можете найти, с какого адреса начинается расширенное пространство для вашего MCU в таблице.
WORD означает, что вы зарезервируете целые слова (а не, например, байты). Для pic24 это означает 16-битные порции.
__ramspace [0x100] - это одномерный массив размером 256. Когда вы посмотрите на то, что написано перед этим, вы увидите, что вы объявляете массив с именем __ramspace размером 256 слов (то есть 256x 16-битных значений) в расширенном пространстве данных (eds).
Теперь вы должны объявить смещение, например, начальный адрес массива (физический адрес, где будет __ramspace[0] - первый элемент массива). Это то, что делает 0x8000.
Наконец, вы указываете компилятору, должен ли массив инициализироваться при загрузке (например, заполняться нулями). В вашем случае есть noload, то есть случайные данные будут находиться внутри массива при загрузке, пока вы не запишите в него свои собственные значения.
Надеюсь это поможет.
__eds__
Спецификатор описан в " Компиляторе MPLAB® C для микроконтроллеров PIC24 и Руководстве пользователя dsPIC® DSC " как:
В контексте атрибута eds, для расширенного пространства данных, атрибут указывает компилятору, что переменная может быть размещена в любом месте в памяти данных. Переменным с этим атрибутом, вероятно, также потребуется спецификатор типа eds (см. Главу 6. "Дополнительные типы указателей C"), чтобы компилятор правильно генерировал правильную последовательность доступа. Обратите внимание, что квалификатор eds и атрибут eds тесно связаны, но не идентичны. На некоторых устройствах eds может потребоваться указывать при размещении переменных в определенных пространствах памяти, таких как пробел (ymemory) или пробел (dma), поскольку эта память может существовать только в расширенном пространстве данных.
__ramspace
это не специальный указатель, это просто идентификатор, который был выбран.
__ramspace[0x100]
это единственная часть этой строки, которая просто чистый C.:) Он объявляет массив 0x100
(256, в десятичном виде) элементы типа WORD
, Имя массива __ramspace
,
- Смотрите Brian Cain для получения подробной информации о
eds
, -
address(0x8000ul)
аргумент__attribute__()
по-видимому, заставляет компоновщик помещать рассматриваемую переменную в местоположение0x8000
,