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文件都是正常的

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM