はじめに
mbed LPC1768は、フルセットの32bit gccが、使用できる組み込み用のワンチップマイコンのプリアッセンブルされた開発モジュールで、組み込みアプリケーションがかつてないほどストレスなく構築できます。mbedは、一般のシステムとは違って、いわゆるオペレーティングシステムを持たず、殆ど構築したCプログラムそのものが素で、動作するところが特徴となっております。チップ自体は、よく枯れたARMプロセッサーで、処理系はよく枯れたGCCで、プログラムに不具合があっても、大抵はメモリー不足による、スタックとヒープの衝突によるスタックオーバーランか、流用しているライブラリーのバグなどで、不具合の同定もブラックボックスなく容易に同定できる事が特徴です。また、メモリーが少ない目なのが玉にきずです。PC9801程度は積んでくれると嬉しいのですが…
また、開発環境が、Webで提供されており、ストレスなく何処でもデバッグできます。
何かなかなか治らない不具合が見つかった場合は大抵はスタックオーバーランによるヒープメモリの破壊です。メモリーの使用量に注意して、なるべくローカル変数を使用して、サブルーチンのネスティングによるスタックの成長にも注意してください。
mbed LPC1768は、フルセットの32bit gccが、使用できる組み込み用のワンチップマイコンのプリアッセンブルされた開発モジュールで、組み込みアプリケーションがかつてないほどストレスなく構築できます。mbedは、一般のシステムとは違って、いわゆるオペレーティングシステムを持たず、殆ど構築したCプログラムそのものが素で、動作するところが特徴となっております。チップ自体は、よく枯れたARMプロセッサーで、処理系はよく枯れたGCCで、プログラムに不具合があっても、大抵はメモリー不足による、スタックとヒープの衝突によるスタックオーバーランか、流用しているライブラリーのバグなどで、不具合の同定もブラックボックスなく容易に同定できる事が特徴です。また、メモリーが少ない目なのが玉にきずです。PC9801程度は積んでくれると嬉しいのですが…
また、開発環境が、Webで提供されており、ストレスなく何処でもデバッグできます。
何かなかなか治らない不具合が見つかった場合は大抵はスタックオーバーランによるヒープメモリの破壊です。メモリーの使用量に注意して、なるべくローカル変数を使用して、サブルーチンのネスティングによるスタックの成長にも注意してください。
- mbedはフラッシュが512kあるので長いプログラムを作成してもそれほど問題にはなりません。
- 長いとは言っても関数の中で長いコードを書いてローカル変数をたくさん宣言したり、入れ子でサブルーチンを呼びまくったりすると、スタックが凹むのでダメです。
- mainから入れ子にならないようにサブルーチンを呼びまくるのはOKだと思われます。
- 参考) http://mbed.org/users/okini3939/notebook/MemoryMod...
- LPCXpressoは安くて良いけど、長いし、何もしないでもUSBメモリになる仕様がないのでiniファイルでごまかすことができないので、少しきついかも。まあメモリのフリをするプログラムを書けば良いのでしょうけど。メモリというか、フラッシュメモリをUSBメモリのふりをするプログラム。もちろんメモリは食いますね。
- 暴走していても外付けUSBメモリになる機能とmbedそのものとは別々に動いているようで、そこがまたLPC1768のメリットです。
- RAM容量は32KBしかありません。非常に狭い領域なのでメモリをたくさん使うようなプログラムを作成するとハングアップすることになります。
- ヒープ領域とスタック領域が両側から伸びてきてぶつかります。スレッドスタックは幸いなことにありません。
- 参考) http://mbed.org/users/okini3939/notebook/MemoryMod...
- mbedはsetSystemFrequency()とSystemCoreClockUpdate()関数でCPUの速度を変更することができます(デフォルトは96MHz)。
- CPU速度を遅くすると消費電力を抑えることが出来るようですが、クロックを落とせば、その分タイマ割り込みタイミングも遅くなってしまうようです。たとえばソースコードで1秒間隔で割り込みを設定していた場合、クロックを半分にすると、実際には2秒間隔で割り込みが発生するなどです。
- タイマ割り込みだけでなく、wait()関数にも影響があるようです。
- http://mbed.org/users/no2chem/notebook/mbed-clock-...
最新コメント