Я работаю на микроконтроллере 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;
использование #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 };
Обратите внимание, что вы не можете смешивать инициализированные и неинициализированные переменные в одном разделе.
Других решений пока нет …