2011年2月3日木曜日

僕がBootLoaderをいじれる理由

毎度あちこちに有りますが、私BASICのアマチア・プログラマでC++なんて知らないしアセンブラなんか良くわからんと言う人なので、あんまり突っ込まれると困るんですが・・
PICの時代からもそうなんですが、Bootloaderは、結構いじれるんです。
理由は、はっきり言って短いからですね。
OptiBoot 512Byte
FastBoot 384Byte
Picで作って他のはたしか、256Byteだったかな、384Byteだったかな・・

日本語にしたら、たったの、255文字を生成するプログラムは、コンパイルオプションを除外するのになれれば、実効コードは凄く短いんですね。

各ブートローダーの中には、世代単位での差をカバーするためのMCUごとのコンパイル時のコードが入ってますから、自分が作ろうとしてる、MCUはどっちか?・・・考えもせずに、切り替えてみて、MCUにISPして、結果見れば、どっちがいいか解るから、・・って言うやり方です。
二択か三択くらいだから、総当たりしたって、たいした事無い、それが全部で5−6カ所有るだけで、間違いなくこれはこっち・・ってとこも有るので、割と簡単なんですよ。

つまるところ、一世代前のMCUって言うとこには、ATmega8 って書いて有り、いわゆる現行のとこには、ATmega168とかが有る方、それが二択になってる。
後は、MCU単位の設定が書いて有る、ヘッダファイルだけど、長いのはMCUが一杯有るからで、必要なとこは、せいぜい8行です・多くてその倍・・64KB以下のMCUなら、その辺に足したり、選択し直せば動きます。(全然駄目は有るよ・・そうゆう時は素直に諦めましょう)

bootloaderの場合、一番長いのは、makefileだと思う位だから、Arduino IDEの文法と、BASICの文法に照らしてみれば、なんとなく何言ってるのか解ります。
そうだなーーイタリア語多少理解出来る私が、スペイン語聞いてる位は、解ります、フランス語ほど難解じゃないが、(ありゃ発音で・文字にしてくれると解るんですよ)・・英語出来ると、ドイツ語が何言ってるか微妙に解るみたいなね・・

たぶん、ここだべ・・・

で直すと動くんですね。

これ長くて、分岐が、100も有ったら、総当たりも出来ないし、お手上げなんですが、ブートローダー位なら・・なんたって、日本語255文字・・自動生成するための、プログラムですから・・・


実は前に書いてた、ISPのGUIアプリは、その後の、「なんだ読めるじゃん、GCC」で・・ちょっと変更してるんですね。
つまり、FastBootの方が、Optibootより、64KB以下に関しては全然いいので、FastBootのプロトコルを、STK500v1にしちゃえば、代替え、BootLoaderに出来て、Arduinoの改編も要らないよねって言う考え方ですね。

実際STK500互換、ブートローダーっていくつか有るんですが、Arduinoで動いたり動かなかったりなので、うまく最適化すればいいんだろうと。

FastBootの方が、いいって言うのは、FastBootは、Tiny13から、mega644pまで、どれでも動き、通信線1本でも、RS485でも大丈夫で、更に、通信速度を、自動判別するんです。1200BPSから、115200BPSまでの範囲(8MHzのソフトURTだと、38400BPS位が安全ですが)で自動認識します。OptibootもATmega_Bootも通信速度ごとに、ブートローダーをコンパイルしなきゃいけないんですね。(単にMakeに周波数いれるだけだけど)
これは、boards.txt書き換えてね・・って書かないで済むので便利なんですね。(早くしたければ書き換えてね・・で済む)・・optibootから交換した場合ですよ。

Fastbootは、独自プロトコルなんだけど、原型はSTK500って書いて有るんです、じゃあ原型に戻せばいいじゃんと言う事なんですね。(弊害が出てひょっとすると大きくなるかも知れないけど、元が、256Byte-384Byteですから・・)
たぶん独自になってる理由は、tiny13とか、2KBクラス用に、つめたから、STK500を簡略化したんだと思ってます。
プロトコルリスト見てると、たしかにスタートとか一緒だし・・

512Byteになってもいいや、Arduino用だし、4KB位から使えればいいんだし・・どう考えたって、TIny13を、Arduino IDEでプログラミング出来ないですから。


私は割と、Arduino側を改造して使えるようにしようって言うのは、性に合わないんですね。だって、バージョン上がるごとに、利用者全員がパッチあてなきゃいけないのは不便です。30分で終わるにしろ、利用者が1000人居たら、トータルで3万分ほど、時間を無駄にしますからね。(20日分くらい)
だたったらこっち側直すって言う、そうゆうタイプなんですね。(自分が、20日かかって直せば、以降時間は失われないって言う意味で)

ちょっとこれはやってみようと思ってます。

最近MCU買い出して思ったけど、Tiny13と、Tiny85の価格差とか考えると、8KBだけでいいやって言う気になってますし・・大きさの問題で、Tiny25は気になってますが、たぶんArduino IDEだと有効に使えないだろうとも見てます、それもたぶん、15-20円位の差しか無いはずなんですね。Tiny45と、Tiny85の差額が、5円だったんですね・・85選びますよね。


なんて言うか、私は、その昔の、MacOS 6-9までの内で7辺り位までの、Toolboxの、開発ガイドラインが、まるで聖書のように立派だと思ってるんですね。
アプリケーションは、OSの標準サービスだけを使い、独自サービスは、アプリ内に内包する、基本的に、Toolboxを使うって言う奴・・勝手にOSにDLLなんかぶち込まない・・好き勝手にあっちこっちにINIとか書き込まない・・昔のマックの、ドラッグドロップでインストール出来るアプリですね。
OSをいじらないで、どう乗り切るかのパズルゲームなんですね。
何でもかんでもいじっちゃっていいなら、簡単なんですよ。ただ、その結果誰でも使えなくなるし、延々とアップデートやメンテナンスしなきゃいけなくなる。

何処かで互換性とっておけば、開発者が死んじゃっても、アプリは生き残るんですね。


なんて言うか、Avrdudeとかがサポートしてる、ISP互換に作っておけば、私が飽きちゃっても、それまでの成果が無駄にならないんですね。
これ日本の成果物で凄く多くて、折角開発したのに、全然使って無い物とか・・例えば、テレテキストとか、ラジオの文字通信とか・・・例えば、イタリアだと、この日本が開発しといて使えて無いテレテキストで、空港のあのモニター表示が、家でみれますし、列車の遅延も、高速道路の渋滞の文字で読めます。車に積んでおけば、IPなんか無くっても情報は得られるんですね。
たぶん地デジも同じような機構で、番組表を送ってるけど、番組表しか送ってない。
道路渋滞情報とか送っててくれたら、車の中で表示できるが、それはNAVIに頼ってる。(NAVI売りたいから、わざとやらないのか?)

いわゆる、「仏作って魂入れず」みたいなの駄目なんですね、私自身がコンテンツ作る商売で、コンテンツ嘗めてるメディアって嫌いなのも含みます。・・どうもハード優先しすぎるんですよ、日本人も、日本政府も・・ゲームもそうだけど、洒落たコンテンツで内容が良ければ、「エロゲー風の紙芝居」だっていい物はいいんですもの。3Dでグリグリすりゃいいってもんんじゃない。
そして、ハードと一緒に、ソフトがゴミになるように考えられてる・・ソフトの継承性が無視されてるんですね。すっごい量の、頭脳時間を注ぎ込んだ物を、惜しげもなく捨てちゃう。
他の国ってそんなに無駄しないんですね。
国民の英知の結晶を、ハードと一緒に、4-5年で、無かった事にするってもったいないですよーー

MSXの根強い引っ張り方にも感動しますが、PC9801とか、TOWNSとかどーなったんでしょう、やっぱ結晶は捨てられたんでしょうね。

日本人の好きな、独自路線の方向を行くと、そうやって、いずれ捨てられちゃうので、私はそれ出来ないんですね。

とりあえず、互換路線で行こうかと・・

0 件のコメント:

コメントを投稿