私はGCC/binutilsツールチェーンを使ってマイクロコントローラ(MSP430シリーズ)のベアメタルコードを書いています。私のリンカースクリプトを使って未使用の割り込みベクタを "forever loop "opcode(開発中、運用中は" SW reset "オペコード)。私はこれが起こるように見えることはできません。GNU LD空のリンカーセクションを埋めよう
は、ここに私のリンカスクリプト(または関連するセクション)です:
MEMORY {
SFR : ORIGIN = 0x0000, LENGTH = 0x0010 /* END=0x0010, size 16 */
PERIPHERAL_8BIT : ORIGIN = 0x0010, LENGTH = 0x00F0 /* END=0x0100, size 240 */
PERIPHERAL_16BIT : ORIGIN = 0x0100, LENGTH = 0x0100 /* END=0x0200, size 256 */
RAM : ORIGIN = 0x1C00, LENGTH = 0x0800 /* END=0x23FF, size 2048 */
INFOMEM : ORIGIN = 0x1800, LENGTH = 0x0200 /* END=0x19FF, size 512 as 4 128-byte segments */
INFOA : ORIGIN = 0x1980, LENGTH = 0x0080 /* END=0x19FF, size 128 */
INFOB : ORIGIN = 0x1900, LENGTH = 0x0080 /* END=0x197F, size 128 */
INFOC : ORIGIN = 0x1880, LENGTH = 0x0080 /* END=0x18FF, size 128 */
INFOD : ORIGIN = 0x1800, LENGTH = 0x0080 /* END=0x187F, size 128 */
FRAM (rxw) : ORIGIN = 0x4400, LENGTH = 0xBB80 /* END=0xFF7F, size 48000 */
VECT1 : ORIGIN = 0xFF90, LENGTH = 0x0002
VECT2 : ORIGIN = 0xFF92, LENGTH = 0x0002
VECT3 : ORIGIN = 0xFF94, LENGTH = 0x0002
... snip ...
VECT54 : ORIGIN = 0xFFFA, LENGTH = 0x0002
VECT55 : ORIGIN = 0xFFFC, LENGTH = 0x0002
RESETVEC : ORIGIN = 0xFFFE, LENGTH = 0x0002
BSL : ORIGIN = 0x1000, LENGTH = 0x0800
HIFRAM (rxw) : ORIGIN = 0x00010000, LENGTH = 0x00003FFF
}
SECTIONS
{
__interrupt_vector_1 : { KEEP (*(__interrupt_vector_1)) } > VECT1 =0x3C00
__interrupt_vector_2 : { KEEP (*(__interrupt_vector_2)) } > VECT2 =0x3C00
__interrupt_vector_3 : { KEEP (*(__interrupt_vector_3)) } > VECT3 =0x3C00
__interrupt_vector_4 : { KEEP (*(__interrupt_vector_4)) } > VECT4 =0x3C00
__interrupt_vector_5 : { KEEP (*(__interrupt_vector_5)) } > VECT5 =0x3C00
__interrupt_vector_6 : { KEEP (*(__interrupt_vector_6)) } > VECT6 =0x3C00
... snip ...
__interrupt_vector_52 : { KEEP (*(__interrupt_vector_52)) KEEP (*(__interrupt_vector_timer0_b0)) } > VECT52 =0x3C00
__interrupt_vector_53 : { KEEP (*(__interrupt_vector_53)) KEEP (*(__interrupt_vector_comp_e)) } > VECT53 =0x3C00
__interrupt_vector_54 : { KEEP (*(__interrupt_vector_54)) KEEP (*(__interrupt_vector_unmi)) } > VECT54 =0x3C00
__interrupt_vector_55 : { KEEP (*(__interrupt_vector_55)) KEEP (*(__interrupt_vector_sysnmi)) } > VECT55 =0x3C00
__reset_vector :
{
KEEP (*(__interrupt_vector_56))
KEEP (*(__interrupt_vector_reset))
KEEP (*(.resetvec))
} > RESETVEC
... and all the usual stuff, .data, .bss, etc ...
これがない場合に、すべての切片を作製していないようです(0x3C00は「永遠にジャンプ」オペコードです)入力上の少なくとも1つのシンボル
私は周りを混乱させようとしました。 =。同様のコマンドを使用して入力セクションに何もない場合でもセクションを作成することができますが、これは時には機能しますが、生成されるセクションはPROGBITSタイプでAフラグが設定されていなければなりません。 。私の試みでは、この設定を作成することはできませんでした。
入力セクションに何もないときに、タイプPROGBITSでAフラグが設定された0x3C00でセクションを生成するにはどうすればよいですか?
ご協力いただきありがとうございます。