小マイコンでsmalight(マルチタスクOS)を使うときの注意。
smalightで開発始めて一週間。
マニュアルはあっさりしています。もうちょっと親切でもよいのにと思いますが・・
しかし、意外とあっさり動きました。
開発する上での注意点を少々。
◆タスクの増えすぎに注意。
マルチタスクの便利さに気付き、使い慣れてくるとたくさんのシンプルなタスクを作りたくなります。
各タスクには必ずスタックが必要なので、RAMが数百〜数Kbyteの小マイコンの場合、あっという間にRAMがなくなります。
ちょっと前までNORTiで40個ぐらいタスクが走るシステムの開発をしていたので、その感覚で小さなタスクを量産していたら、RAMが足りなくなってしまった。
◆タスク、割り込みのスタック量に注意。
タスクの定義は smalight configuratorというユーティリティソフトウェアを使います。
ユーティリティで設定するタスクのスタックはデフォルトのが 128バイト。
128バイト程度だと、浮動小数点演算をするとオーバーすることがあります。
自分がローカル変数をたくさん取っている場合には気付きやすいのですが、
例えば・・
float f,v;
v = f*3.1415 -15.0;
のような単純な計算だったとしても、コンパイラがひそかに浮動小数点計算のライブラリ関数をコールしてスタックを消費していることがあります。
printf系もスタックをたくさん消費します。このような関数も注意が必要です。
再帰関数も最大何回再帰するか確認します。
RAMに余裕があるシステムでは余裕を持って、スタックに何Kbyteもとっておくことができますが、小マイコンでは不可能。
こういったスタック関係のトラブルはいきなり暴走してしまうので、デバッグに骨が折れます。
HEWだと call walker(スタック計量ソフト)が付属しているのでこれで各タスク、割り込み処理が何バイトスタックを消費しているか確認します。
それでもマルチタスクだと、複数の同時進行の処理をしなければならないときにも開発効率がよいし、すっきりとしたコードになります。
一度マルチタスクの快適さに慣れてしまうと、マルチタスク無のシステムがつらく感じます。
◆割り込みレベルについて
今のところR8Cのsmalightしか使っていないので、このマイコンに限っての話ですが、割り込みの応答時間でシビアな要求がなければディスパッチ有、無にかかわらず割り込み優先レベル選択は全部「レベル6」、多重割り込み無にしておくのが無難。
コンパイラ
M16C/60,30,20,10,Tiny,R8C/Tinyシリーズ用
Cコンパイラパッケージ V.5.43
HEW4
Version 4.03.00.001
Smalight OS V3.00
for R8C/Tiny
smalight configurator v1.00.07
PC
Windows 2000
Service Pack 4
-----------------------
マイコンシステムの開発は
----------------
ビーコン
-----------------------