Я хочу понять синтаксис, используемый 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,
Другие вопросы по тегам