はじめに
組み込みソフトで、一番気にするところはメモリの容量が限られると考えています。組み込みが難しいと感じるものでないかと思っています。
結論
.text,.bss,.data,.rodataのセクションごとの制限はできない。ROM、RAMの容量をリンカスクリプトで制限することで、間接的に容量を制限することはできる。直接的にできるのは、リンカオプションの使用: して、スタックやヒープのサイズを制御することはできる。
RTOSでどれくらいメモリ必要(ITRONの場合)
ITRONは、極めて小さなハードウェア構成でも実装できるように設計されたリアルタイムOSです。ITRONの必要スペックは以下の通りです:
CPU: 8ビットから32ビットまでの幅広いCPUに対応12
メモリ:
ROM: 1~2KバイトのROMでも実装可能
RAM: 128バイトのRAMでも動作可能
H8/3069Fネット対応マイコンLANボード(完成品)
以前使ったことがあり、LANも使えるH8/3069Fネット対応マイコンLANボード(完成品)を自分はお勧めしている。ROM512K,RAM16Kとある。余裕でITRONは乗せられるよ。

セクションについて
メモリっていうとセクションっていうのが出てくる。何か問題が起きて解決できないことというと、メモリの問題では?と思っていて、その時に、メモリの設定が変えて動くようになればと、知識を蓄えようかとここに示します。
結論
冒頭でも説明したが、.text,.bss,.data,.rodataのセクションごとの制限はできない。ROM、RAMの容量をリンカスクリプトで制限することで、間接的に容量を制限することはできる。直接的にできるのは、リンカオプションの使用: して、スタックやヒープのサイズを制御することはできる。
プログラムとは、
リンカがプログラムにする。

プログラムの前は、オブジェクト
Cコンパイラは、コードやデータなどのプログラムのパートを、セクション単位で出力します。オブジェクトを出力する。


リンカがセクションをまとめる。
リンカがメモリ(ROM、RAM)に配置する。
リンカスクリプトの設定: リンカスクリプトで.dataセクションをROMに配置し、実行時にRAMにコピーするように指定します。
リンカスクリプトで.dataセクションをROMに配置する例
.data : AT(ADDR(.text) + SIZEOF(.text)) { … } > RAM AT > ROMのように設定します
実行時にRAMにコピーするは、スタートアップルーチンで行います。
スタートアップルーチンで、 .dataセクションの初期値をROMからRAMにコピーする処理は、通常、プログラムのmain()関数を実行する前に行われます。
リンカ実行例,リンカスクリプト例

スタートアップルーチン例

まとめ
実は、H8/3069Fネット対応マイコンLANボード(完成品)を使って、製品を何か作って、メモリを学ぼうと始めたこのメモリ編でしたが、ものを用意する必要があり時間がかかりそうで、知識として前もってまとめようとまとめました。かなり読み応えのある内容となっています。現在H8/3069Fネット対応マイコンLANボード(完成品)はあるのですが、USBとRS232変換ケーブルが手元になく、開発自体は止まっています。すこしずつ進めたいと思っています。
|
コメント