AVR (2)

AVR-GCC

AVR 用の GCC, Binutils, Libc がある。 Libc があるので C ライブラリ newlib をビルドしたりリンカスクリプトを書いたりする必要がない。

AVR Libc

マニュアルが2箇所にある。同じもののようだ。

開始時の処理

リセット後 .init0 から .init9 までのセクションに配置された関数を処理して main() を実行する。

https://www.microchip.com/webdoc/AVRLibcReferenceManual/mem_sections_1sec_dot_init.html

.initN 内容
0 __init() を呼ぶ
1 ユーザー定義
2 スタック, r1 初期化
3 ユーザー定義
4 > 64KB ROM: .data セクションのデータを flash -> SRAM, 他: .data のコピーと .bss セクションの 0 クリア
5 ユーザー定義
6 C++の場合: コンストラク
7 ユーザー定義
8 ユーザー定義
9 main() を呼ぶ

64KBより大きいROMのマイコンの場合、 .bss セクションが 0 クリアされない?

終了時の処理

https://www.microchip.com/webdoc/AVRLibcReferenceManual/mem_sections_1sec_dot_fini.html

組み込みの場合、使うことはまず無いが、main() を抜ける際には .fini9 から .fini0 まで処理する。