stm32变量指定存储区生成hex和bin错误:Error: Q0147E ER_IROM1: File exists

stm32使用keil5编写程序时,显式指定一个变量的内存地址,可以使用__attribute__((section(".ARM.__at_0x68000000")));这样的定义方式。此方式在使用jlink调试下载时完全正常,但无法生成bin文件:

1 s16 wave_store_buf[WAVE_STORE_N][16][MCU_PRO_N] __attribute__((section(".ARM.__at_0x68000000"))); //这样定义导致bin生成有问题

使用fromelf.exe生成bin文件时,报错:

Error: Q0147E: Failed to create Directory ..\..\out\firmware.bin\ER_IROM1: File exists
命令行为:fromelf.exe --bin -o ..\..\out\firmware.bin ..\obj\test.axf
检查生成的hex文件,发现hex文件尾部0x68000000处多了一段代码:

 

导致无法生成bin文件,使用hex下载也出问题,必须删除这一段代码才能下载。因为程序中这一段变量定义并不需要实际数据,所以删除他是没有问题的。

具体这段代码的生成原因还没弄明白,在程序中对数组进行修改,可以避免麻烦:

1 s16 (*wave_store_buf)[16][MCU_PRO_N]=(s16 (*)[16][MCU_PRO_N])0x68000000;

通过定义数组的指针,避免产生实体代码,且用法一致。

此时生成的hex和bin文件都是正常的

 

 
posted on 2020-06-15 10:12  yangzifb  阅读(4843)  评论(1)    收藏  举报