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