マイコン工作実験日記

Microcontroller を用いての工作、実験記録

CMSIS-RTOS/FreeRTOS

2014-06-25 21:06:48 | Weblog
最近仕事がらみでSTM32F2上でFreeRTOSを使い始めたのですが、それでハマったのでメモしておくことにします。

自分が使うものであればターゲットが何であれCortex-MであればCrossWorksとCTLで用が足りるのですが、仕事となるとそういうわけにもいかず、今回はSTMicroが提供しているSTMCubeF2を使うことになったのですが。。

STMCubeF2には、STMicroが提供するデバイスライブラリや、HAL, USBスタック等とともに、FreeRTOS, LwIP, FatFsも含まれています。自分でRTOS移植する必要もなく、できあいのサンプルをビルドすればTCP/IPまで動かせるようです。ソース一式をダウンロードして中身を見てみると FreeRTOSのパッケージにはCMSIS_RTOSのAPIが含まれています。Applicationとして提供されているFreeRTOSのサンプルプロジェクトもこのCMSIS_RTOSのAPIを使って書かれています。

FreeRTOSのAPIに慣れずともCMSIS_RTOSのAPIで書けばいいというのは便利だと思って、実際に使ってアプリを書き始めたのですが、これがちゃんと動いてくれません。osSemaphoreWaitでタイムアウトした場合の処理がおかしいので、ソースを確認してみてビックリ。APIで定義している関数の戻り値と実装とがぜんぜん違います。APIではタイムアウト発生時には0を返すことになっていますが、実際のコードではosErrorOS(0xff)を返し、トークンが取得できた時にosOK(0x00)を返すではありませんか。。

どうやら、「なんちゃってCMSIS-RTOS」だったみたいです。もっとも「CMSIS-RTOSで共通化できるかも」と期待するのが、幻想なのかもしれません。


Pre-Production

2014-06-09 09:03:33 | Weblog
Maker Fair会場で収録された動画で、Arduino Zeroが紹介されていたので貼っておきます。



2つあるUSBポートの片方は、デバックポートとして利用できCMSIS-DAP対応とのことで、ATMEL Studioを使ってビルド&デバックできるとのこと。これは、ちょっと面白いですね。SWDコネクタは未実装ですが、これも利用することができます。JTAGと書かれたコネクタが実装されていますが、こちらはデバックMCU用ですからマスプロでは未実装になるんではないでしょうか。



SPIと書かれた拡張コネクタも追加されていますが、これで全ピン出ているかなぁ?出ていないピンがありそうな気もします。

つながる2列

2014-06-04 12:28:32 | Weblog
多くの過ちは思い込みから生じるということは経験的にわかってはいても、やはり思い込みによる過ちを繰り返してしまいます。そして、自分に都合が良いように物事を捉えてしまうと、そんな罠にハマってしまうのです。

と、いうわけで先週おかした過ち。

Arduinoのおかげて、ARMマイコンの評価ボードもすっかりArduino互換サイズのものが増えました。そんななかでも、最近はFreescaleのFRDMをちょっとした実験や動作確認の目的で使用しています。先週も、あるデバイスの動作確認をとりたかったので、FRDM-K20D50用に試験用拡張ボードを用意することにしました。秋月でArduino用ユニバーサル基板が売られているので、こいつを使ったのですが。。。



目視では配線に問題は無さそうだけど、一応テスターであたってみたらビックリ。拡張コネクタの2列の左右のピンがショートしているではありませんか。それも、全てのコネクタで。確認してみると、Arduino用の基板はもともとそういうパターンなのですね。

Arduinoは一度も使ったことが無い上に、Arduino互換ピン配置と称するARM基板がどれも2列のコネクタを持っていることから、当然Arduino用のユニバーサル基板をARM基板に流用できるものだと思い込んでいました。秋月の基板の場合、裏側のパターンで左右をつないでいるので、このパターンをカットすればARM基板で利用することが可能です。しかし、半田付けしてたヘッダーピンの下にパターンが隠れてしまったのでカットできません。やり直しです。ガックリ。