Размещение переменных в абсолютной ячейке памяти ( IAR C/C++)

Я работаю на микроконтроллере STM8S с компилятором IAR.

Как я могу исправить начальное местоположение более чем одной переменной, используя прагму или другой метод.

Когда я пробую этот код, компилятор выдает следующее сообщение об ошибке:

Ошибка [Lp025]: абсолютный раздел.near.bss (main.o #12) ([0x000100-0x000100]) перекрывается с абсолютным разделом.near.bss (main.o #8) ([0x000100-0x000100])

Я ищу в технических заметках IAR "Абсолютно расположенная переменная", но не смог.

#pragma location = 0x100   /* Start address of absolute location */

extern uint8_t        R0,
                      R1,
                      R2,
                      R3,
extern uint16_t       M1;           
extern uint8_t        M2,    
                      M3;    

1 ответ

Решение

Использование #pragma location = "my_abs" или же _Pragma("location=\"my_abs\"") разместить переменные, которые вы хотите в абсолютной области в том же разделе эльфа. поскольку #pragma location Относится только к следующему объявлению, вы можете создать определение, которое вы можете использовать в качестве префикса при объявлении переменной в абсолютном блоке. Обратите внимание, что только _Pragma("location=\"my_abs\"") синтаксис разрешен в макросах препроцессора.

#pragma section="my_abs"
#define IN_ABS _Pragma("location=\"my_abs\"")

IN_ABS char  R0, R1, R2, R3;
IN_ABS short M1;           
IN_ABS char  M2, M3;

int no_abs;

Затем добавьте строку в конфигурацию компоновщика, чтобы поместить этот раздел по указанному адресу.

place at address mem:0x100 { rw section my_abs };

Обратите внимание, что вы не можете смешивать инициализированные и неинициализированные переменные в одном разделе.

Другие вопросы по тегам