しばらく前に、mbed OS 5がリリースされた。
今はもう5.1だが、メジャーバージョンアップだ。。。というか、OSの2と3を足して5らしい。
FreeRTOSを調べていたので、そういえばmbed OSはRTOSなのだっけ?と気になった。
まあ、組み込みのOSでRTOSじゃなかったら、使うことは無さそうな気がするので、たぶんそうだろう。
リアルタイムオペレーティングシステム - Wikipedia
ここに列挙されているだけでもたくさんあるな。
私が使ったことがあるのは、わずかだ。
mbed OSはどうなのか調べようと思ったが、mbed blogの一番最初に「RTOS」と書いてある。
だから、RTOSなのだろう。
こちらを見ると、CMSIS-RTOS RTXをベースにしている、と書かれている。
元はCで書かれているので、C++でラッパされているのだろうか?
そうらしい。
試しに、LED点滅サンプルをインポートした。
「mbed-os」のようだ。
URLはgithubだったけど、移動したのかしら?
githubのReleasesは、こう。
コンパイラのリビジョンは、こう。
なので、今の私はmbed OS 5.1.2を使っているのだろう。
書いてあるソースは、こんだけ。
ビルドすると、こんなもの。
KeilとSTM32CubeF4を使って、RTXを使ったLED点滅サンプルを作ってみた。
Program Size: Code=7624 RO-data=552 RW-data=80 ZI-data=3344
うーん、mbed OSは周辺機器制御の部分がリンク時でもそぎ落とせないのかな?
Keilで試したいところだが、このサイズだと無料版ではリンクできないのだ。
ARM-GCC版をexportさせようとしたけど、どうにもうまくいかない。
Code Sourcery版もダメだ。LPCXpressoはグレーアウトされてるし。
あー、今はmbed CLIというのがオフラインコンパイル手段としてあるのか。
でもなんか、説明が長いぞ。。。
また今度だな。
mbed OS 5.1風のThreadにすると、こういう書き方になりそうだ。
void task_led()
{
while (true) {
led1 = !led1;
Thread::wait(500);
}
}int main() {
Thread th;
th.start(task_led);
while (true) {}
}
Threadでwarningが出ていたから、気になったのだよ。
Thread.hはこうで「MBED_DEPRECATED_SINCE()」の定義を使うとwarningが出ていたようだ。
マクロでこういうことできるんだ。。。
コンストラクタで指定するのではなく、start()で指定してほしいらしい。
型のmbed::Callback<void()>がよくわからんのだが、引数無し、戻り値voidというシグネイチャという意味なのだろうか。
値を渡したい場合は、これでよいのかな。
void task_led(int *wt)
{
int waittime = *wt;
while (true) {
led1 = !led1;
Thread::wait(waittime);
}
}int main() {
Thread th;int wt = 1000;
th.start(&wt, task_led);
while (true) {}
}
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。