2017-10-23 115 views
0

私は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値を保存するために、実行時間を知っていますか?

答えて

0

OK問題が見つかりました。

CRCのあるものはすべてOKでしたが、デバッグモードでは、ポストプロセスの変更のみに属するHEXではなくAXF(ELFファイル)が使用されています。

したがって、CRCを正しくデバッグモードで表示するには、AXFも変更する必要があります。

関連する問題