適用先: ULINK USB-JTAG Debugger
この記事に含まれている情報の適用先:
- ULINK USB-JTAG Adapter
- ULINK2 USB-JTAG Adapter
質問
NXP LPC2000 デバイスを使用していますが、NXP User's Manual で次の説明を目にしました。
The reserved ARM interrupt vector location (0x0000 0014) should contain the 2's complement of the check-sum of the remaining interrupt vectors. This causes the checksum of all of the vectors together to be 0.
起動コードを確認したところ、0x14 の領域には NOP 命令だけが存在しているようです。
Vectors LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP ; Space for Checksum
LDR PC, [PC, #-0x0FF0] ; Vector from VicVectAddr
LDR PC, FIQ_Addr
Keil ツールでは、このチェックサムはどの領域に生成されるのでしょうか? 適切なチェックサム値が自動的に追加されるのでしょうか?
回答
はい。Flash チェックサムは、ユーザがメモリ イメージをダウンロードしたときに、ULINK Flash プログラマによって生成されます。
フラッシュ アルゴリズム コードには、このチェックサムを計算する次のセクションが含まれています。アルゴリズムは、..ARMFlash フォルダにソース コードの形で用意されています。
if (adr == 0) { // Check for Interrupt Vectors
n = *((unsigned long *)(buf + 0x00)) + // Reset Vector
*((unsigned long *)(buf + 0x04)) + // Undefined Instruction Vector
*((unsigned long *)(buf + 0x08)) + // Software Interrupt Vector
*((unsigned long *)(buf + 0x0C)) + // Prefetch Abort Vector
*((unsigned long *)(buf + 0x10)) + // Data Abort Vector
*((unsigned long *)(buf + 0x18)) + // IRQ Vector
*((unsigned long *)(buf + 0x1C)); // FIQ Vector
*((unsigned long *)(buf + 0x14)) = 0 - n; // Signature at Reserved Vector
}
詳細
- NXP LPC2000 Microcontroller User's Manuals - Flash Memory System and Programming - Criterion for valid user code
関連項目
- 固定メモリ位置に定数を配置する方法を教えてください