[英]ARM scatter file - How to preserve Flash Data inside Execution Region
我正在為STM32 MCU使用ARM Compiler + Linker。
生成HEX時,我使用工具srec_cat來計算CRC並將其寫入HEX內的特定地址。 發生這種情況時,我可以在十六進制中正確看到此CRC。
問題出在執行時間上,該值消失並被值0重寫。
這是我的分散文件:
LR_IROM1 0x08000000 0x000FE00 { ; load region size_region
ER_IROM1 0x08000000 0x00FE00 { ; load address = execution address ; 64kB - 12kB = 53248 B (ILR Output -O0 = 52496 B) ; For PTB MUST use optimization -O1 or stronger!
startup_stm32l100xba.o (RESET, +First)
vectortable.o (VECTORS)
* (+RO)
}
RW_IRAM1 0x20000000 0x00002000 { ; RW data
.ANY (+RW +ZI)
}
}
LR_IROM3 0x0800FE00 0x0000200 { ; // 512B for Production Constants
ER_CONST_ROM3 0x0800FE00 FIXED 0x0000200 { ; // 512B for Production Constants
;params.o (PARAM, +First)
}
}
我在srec_cat工具的后期處理中所做的是我在地址0x0800FE08處寫入了CRC。 當我通過STM32 Link實用程序讀取HEX文件時,可以正確看到此值。 但是,當我調試地址0x0800FE08處的代碼的值為0時,我嘗試了UNINIT參數,但它不起作用。
對我有用的是,我在匯編文件特殊區域中指定了我放置一些由srec_cat工具重寫的虛擬DWORD的位置,然后可以在執行時正確讀取CRC值。 這是代碼:
AREA PARAM, DATA, READWRITE
EXPORT APP_CRC
EXPORT WEL_CRC
__PARAM
APP_CRC DCD 0xAAAABBBB
WEL_CRC DCD 0xCCCCDDDD
ALIGN
AREA |.text|, CODE, READONLY
END
但是必須有另一種方法來保存來自HEX文件的數據並在同一執行區中同時使用at_address指令。 我想通過以下方式將固定值放入地址0x0800FE00:
const u32 U32_Product_SN 屬性 ((at(0x0800FE00)))= 1;
並且我想保留通過地址0x0800FE08的后期處理操作添加的十六進制文件中已經存在的內容。 而且我不想將其與匯編文件和AREA指令一起使用。
您是否知道在運行時,執行時如何保存srec_cat工具生成的CRC值?
好的,我發現了問題。
很簡單,當我瀏覽HEX文件時,所有帶有CRC的文件都可以,但是在調試模式下,它使用AXF(ELF文件)代替了僅屬於我的后期處理修改的HEX。
因此,要在調試模式下正確查看CRC,還必須修改AXF。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.