私はSTM32 MCU用のARMコンパイラ+リンカを使用しています。ARMスキャッタファイル - 実行領域内にフラッシュデータを保存する方法
HEXが生成されると、私はツールsrec_catを使ってCRCを計算し、HEX内の特定のアドレスにCRCを書き込みます。これが起こると、私はこのCRCを正しくHEXで見ることができます。
問題は、実行時間である、この値が消えて、ここでの値で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ツールにより、後工程で行うことはIということですアドレス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 属性(0x0800FE00(で()))= 1;
と私は、アドレス0x0800FE08の後処理操作によって追加されたHEXファイルにすでに保存されているものを保持したいと思います。そして、私はアセンブリファイルとAREAディレクティブでこのトリックを使用したくありません。
実行時にsrec_catツールによって生成されたCRC値を保存するために、実行時間を知っていますか?