メモリについて

セクション 組込みエンジニアとしての活動

はじめに

 組み込みソフトで、一番気にするところはメモリの容量が限られると考えています。組み込みが難しいと感じるものでないかと思っています。

結論 

 .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は乗せられるよ。

H8-3069

セクションについて

 メモリっていうとセクションっていうのが出てくる。何か問題が起きて解決できないことというと、メモリの問題では?と思っていて、その時に、メモリの設定が変えて動くようになればと、知識を蓄えようかとここに示します。

結論

 冒頭でも説明したが、.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変換ケーブルが手元になく、開発自体は止まっています。すこしずつ進めたいと思っています。

コメント

タイトルとURLをコピーしました