シリアル通信からプログラムをロードしたい

デバッグ用にシリアル通信でプログラムをロードして実行できるようにしたいという話があった。

以前のシステムではそのための特別なプログラムをマイコンに書き込んで、

そういうことをできるようにしていたのだが、今回はそれを通常のプログラムに入れた方がいいねと。


話によればU-Bootのようなブートローダーの機能を参考に作ったのだという。

今回のシステムでも当初はU-Bootが必要なのでは?

という話があったのだが、結局は不要となった経緯がある。

U-Bootにはシリアル通信でプログラムをロードするコマンドがあって、

当初の実験時に loadyコマンドでYMODEMで転送した覚えがあるような。

確かそのときはメモリ上に転送した後、mmc writeコマンドでSDカード(MMC)に書き込んだっただったか。

プログラムを保存する機能は持っていないけど、転送機能はほぼそれで、

あとはU-Bootで言うところの bootmコマンド、単純に指定アドレスにジャンプするだけだけど、

それを実装しておけばテスト用のプログラムをシリアル通信で転送して実行できるわけ。


元々マイコンに焼いていたコードを流用して作り始めたのだが、

かなり改変が大きく、跡形もないぐらいに変わってしまったかも。

アルゴリズム的にはあまり変わってないんですけどね。

内部的にはprintfもどきの関数を自作して持っていたりする。

他のデバッグでも表示にはこれを使うかと付替をしたりなんとか。


あとはそこにロードするプログラムのひな形も作ってみて、

実運用上、こういう使い方ができるといいなというのを多少加えた。

できたものを動かしてみると、確かにけっこう便利かもしれない。

最初はデバッグ用のプログラムをROMに書いて動かせばよいと思ってたが、

いろいろ特殊な事情もあるので、単純にROMに書いても動かない問題があった。

なのでデバッグ機能を作り込んだ方がよいねとなったのだけど、

それ以外のメリットとしてはROM書換用にICEなど用意する必要が無いこと。

ロードするプログラムを変えればいろいろな評価に活用できること。

(現在もそういう使い方をしているらしい)


従来よりこの機能の使い道も増えたので、新しい使い方もあるかもねとは言っているが果たしてどうか。

そこはわからんけど当初の機能の代替としては十分でしょう。