在使用keil编译stm32时,需要用到绝地地址定位函数和变量,我知道在keil中可以使用__attribute__进行
绝对地址定位:
1,将函数加载到指定位置
void delay(void) attribute ((section(".ARM.__at_0x08020000")));
2,将数组加载到指定位置
int Temp[] attribute ((section(".ARM.__at_0x08020000"))) = {0x1, 0x2};
3,将变量加载到指定位置
const int Temp attribute ((section(".ARM.__at_0x08020000"))) = 10; // RO
int Temp attribute ((section(".ARM.__at_0x20000000"))) = 10; // RW
那么能不能用宏定义来实现呢?因为可能会换IAR,而IAR中是使用 @0x08020000 来实现绝对地址定位的,所以想通过一组宏定义来实现绝对地址定位功能,0x08020000、0x20000000这样的地址作为参数。
我做了如下定义:
#if defined ( __CC_ARM ) /------------------RealView Compiler -----------------/
#define LOC(addr) attribute((section(".ARM.__at_0x0500")))
#elif (defined (ICCARM)) /------------------ ICC Compiler -------------------/
#define LOC(addr) @addr
#endif
结果IAR可以编译通过,但是Keil不行,提示错误:
Error: L6974E: AT section .ARM._at##addr does not have a base address.
请问有没有一种方式可以做到我所需要的功能?
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。