打印
[STM32F0]

解决 system_stm32f0xx.o(.data) type RW incompatible with main.o type ZI in ...

[复制链接]
1598|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51xlf|  楼主 | 2021-6-1 17:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
解决 system_stm32f0xx.o(.data) type RW incompatible with main.o type ZI in er RW_IRAM1.
在调试stm32f0xx时,碰到了一个这样的错误:

Error: L6971E: system_stm32f0xx.o(.data) type RW incompatible with main.o(.ARM.__AT_0x20000000) type ZI in er RW_IRAM1.

从字面上判断为编译system_stm32f0xx.c文件生成的目标文件system_stm32f0xx.o中的数据段(.data)内的RW数据与main.o中的数据在地址0x20000000产生冲突。

考虑到有以下代码

#if   (defined ( __CC_ARM ))
  __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));
#elif (defined (__ICCARM__))
#pragma location = 0x20000000
  __no_init __IO uint32_t VectorTable[48];
#elif defined   (  __GNUC__  )
  __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));
#elif defined ( __TASKING__ )
  __IO uint32_t VectorTable[48] __at(0x20000000);
#endif
也就是要将中断向量表VectorTable强制定义在内存0x20000000上,但是此地址与system_stm32f0xx.c定义的全局变量位置有冲突。于是,需要修改避免冲突。中断向量的地址是固定的,但其他全局变量的地址可以相应地移动下,并且APP的烧录位置为0x8003000,如下图:


再重新编译就可以了。



使用特权

评论回复
沙发
51xlf|  楼主 | 2021-6-1 17:33 | 只看该作者
参考**:

http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=615966&highlight=an4065

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

535

主题

9633

帖子

23

粉丝