簡體   English   中英

ARM分散文件-如何在執行區域內保留Flash數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM