AVR (2)
AVR-GCC
AVR 用の GCC, Binutils, Libc がある。 Libc があるので C ライブラリ newlib をビルドしたりリンカスクリプトを書いたりする必要がない。
AVR Libc
マニュアルが2箇所にある。同じもののようだ。
- http://www.nongnu.org/avr-libc/user-manual/pages.html
- https://www.microchip.com/webdoc/AVRLibcReferenceManual/index.html
開始時の処理
リセット後 .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 まで処理する。