③bootローダー関連
このコード部分の話
#[link_section = ".boot2"]
#[used]
pub static BOOT2: [u8; 256] = rp2040_boot2::BOOT_LOADER_GENERIC_03H
bootローダーとは
このLチカのプログラムは、bootローダーというものを動作させる必要があります。
bootローダーとは、電源投入直後に動作するプログラムでのことで、組み込みシステムではよく出てきます。
初めはrp2040のチップの中にある書き換え不可能なブートローダーが実行されます。
その後2段階目のブートローダーとしてrp2040_boot2::BOOT_LOADER_GENERIC_03H
が呼ばれることになります。
このrp2040_boot2
は、RP2040のRust専用のブートローダーでUartなどの周辺回路(ペリフェラル)の初期化処理を行っています。
#[link_section = ".boot2"]
対象のシンボルを.boot2
というセクションに配置します。
.boot2
は、memory.x
というファイルに記載されています。
// memory.x
MEMORY {
BOOT2 : ORIGIN = 0x10000000, LENGTH = 0x100
FLASH : ORIGIN = 0x10000100, LENGTH = 2048K - 0x100
RAM : ORIGIN = 0x20000000, LENGTH = 256K
}
EXTERN(BOOT2_FIRMWARE)
SECTIONS {
/* ### Boot loader */
.boot2 ORIGIN(BOOT2) :
{
KEEP(*(.boot2));
} > BOOT2
} INSERT BEFORE .text;
これは、どのメモリーの何番地に何を入れるかの設定になります。
これを見てみると.boot2
は、0x10000000から0x10000099まで入ることが分かります。
#[used]
ファイルに静的に保持するための宣言です。
次のpub static BOOT2:[u8;256] = rp2040_boot2::BOOT_LOADER_GENRIC_03H
をBOOT2
をプログラムに静的に保持してくれます。