RPU-10講座/コラム2 ターゲットファイルの不思議
すいません m(_ _)m、本記事はブログ引越時に書式が崩れました。順次修正中です。
「atmega128.x」というファイルが、GDLのRPU-10 TARGETに用意されていますが、これはリンカスクリプトと呼ばれる(らしい)ファイルで、ビルド時、これにしたがってプログラムなどのデータ配置をするための定義ファイルです。この中に、MEMORYというセクションありますが、「text」の「LENGTH」が「128k – 2k」となっています。この「2k」というのがブートローダのサイズになります。
MEMORY
{
text (rx) : ORIGIN = 0, LENGTH = 128k – 2k
data (rw!x) : ORIGIN = 0x800100, LENGTH = 4k
eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 4k
}
で、不思議だなって思ったのが、RAM上にconstデータをとった場合、フラッシュROMに同じデータを用意しておき、それを起動時にコピーするような形で動くらしいのですが、ということは、RAMは4kByteありますので、最大4kByteのデータが余分にフラッシュROMに入る可能性があります。で、プログラムや明示的にフラッシュROM上に定義したデータが126kバイトに到達すると、その分を書き込む領域がなくなってしまうのではないかと思います。
よって、安全をみると「128k – 6k」と書く方がいいような気がするのですが、実際のところ、どうなんでしょう?あとは推測ですが、実際にサイズオーバーしたデータを書いても、このブートローダ領域、たぶん保護された特別な領域になっていると思うので、実際にはプログラムの方が中途半端に切られるだけで、書き込めないんじゃないかな?って思います(データシートを読んだ限りでは、そう読めました)。
お恥ずかしながら、マイコンプログラミング始めて早5年ぐらい?なんですが、未だにこのリンカスクリプトとかってよくわかりません。また、makefileとかも苦手です。今回のSIPHA SYSTEMでは、SIPHA TERMからコンパイラを呼び出すという機能を実装したんですが、呼び出すのはともかく、呼び出される側のmakefileを書くのにとても苦労しました。
※注意:本BLOGにてRPU-10での再プログラミングについての情報を公開していますが、これらはSISOが個人的に再プログラミングを行った時の技術情報を整理して紹介しています。GDLへのRPU-10ライブラリ同梱については、 Best Technologyさんのご好意で、趣味人への1つのチャンスとして同梱してくださっていると理解しています。そのため、RPU-10の再プログラミングについては、くれぐれもご自身の責任で、また、Best TechnologyさんやFUTABAさんに問い合わせたりすることの無いようにお願いいたします。
Your Message