解决 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,如下图:
解决 system_stm32f0xx.o(.data) type RW incompatible with main.o type ZI in er RW_IRAM1._第1张图片

再重新编译就可以了。

参考文章:

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

 

你可能感兴趣的:(STM32)