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
まで処理する。