之前在别的帖子上看到,stm32指定变量在SRAM的地址方法是:u8 sram[200] __attribute__((at(0x20002000))); 我是这样子定义的 uint16_t flg_bit_all __attribute__((at(0x20000000))); 编译出错, Error: L6971E: system_stm32f10x.o(.data) type RW incompatible with main.o(.ARM.__AT_0x20000004) type ZI in er RW_IRAM1.
但如果我这样子定义 uint16_t flg_bit_all __attribute__((at(0x20000040))); 就能编译通过。
又试着将地址改成较小值(比如:0x20000004,0x20000012,0x20000020,0x20000030,0x20000036)都不行,而将地址改成较大值(大于0x20000040)则能通过。
再看看我程序占用内存大小(60byte),发现跟这个“临界地址”(0x20000040)有关。
从这个现象来看,MDK编译时并不会优先给__attribute__((at(addr))) 分配地址,而是分配好了其他变量后再对__attribute__((at(addr)))进行检查。
不知道是不是这样子,望大神赐教,谢谢!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>