Размещение переменных в абсолютной ячейке памяти (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 };

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]