Skip to content

FreeRTOSについて

naoki-akimoto edited this page Jul 1, 2016 · 30 revisions

FreeRTOSについての調査まとめ

FreeRTOSの入手

freertos.orgDownload Sourceでダウンロードページに飛び、Download Source Code and Projects をクリックするとダウンロードが始まる。 ただし、こちらでは直接自己解凍形式のExeファイルにリンクされるようなのでZipでほしい場合は ここ からダウンロード。

FreeRTOSシミュレータ

ここ によるとVisual Studio Community 2015なら特に何もせずにシミュレータが動く模様。実際にFreeRTOS/Demo/WIN32-MSVCをビルドしてコマンドプロンプトにて動作しているのを確認した。

Linux向けシミュレータについては ここ を参照。 ただし、現状Macだとmqueueを自前で用意する必要があり、Ubuntu(14.04 TLS)ではmqueue系の関数のリンクに失敗している。

FreeRTOS+TCP

FreeRTOS+TCP にて入手できる。基本的にFreeRTOSのソースコードに追加する形で利用するようだ。Embedded_Ethernet_PortingによればxNetworkInterfaceInitialise()xNetworkInterfaceOutput()をポーティングすればソケットなどが利用できる模様。

CC3200 SimpleLinkのサンプル実行

特につまるところもなく、SimpleLink上で実行できた。

通信先APの設定がアプリ内でもできるはずだが、そもそもデフォルト(コード埋め込みのcc3200demo)につなぎにいくと一切進まない(タイムアウトしない)のでコードを書き換える必要があり、common.hのSSID_NAMEなどを変更した。 通信相手として自分のPCを指定する際にiperfが必要となるので別途ダウンロード。iperf起動(-tオプションは使えなかった。起動コマンド:iperf3.exe -s -i 1)後、そのポート番号とPCのIPアドレスをアプリ内で設定しSend TCP packets.を行うとiperf側に反応があり(ただしWarningが出ている)、SimpleLink側で送信成功のメッセージが出た。

ビルド時のエラー対応

no definition for "__write" [referenced from putchar.o(dl7M_tln.a)]

GCC環境ならここ、IARIDEならここを参考に解消。

Code Composer Studio(CCS)

TIのEclipseベースのIDE。ホームページ。 16KBまでのバイナリサイズ制限のある無償ライセンスと90日分の評価用フル機能ライセンスがある模様。

アプリ実行時の注意

TeraTermを使用している場合、COMポートをTeraTermで使用しているとCCSからCC3200へのバイナリ転送が失敗する。バイナリ転送が終わるまで(mainの始めでブレイクするまで)はTeraTermのCOMポートを別のものにして、ブレイク再開する前にCC3200のCOMポートに戻すひと手間が実行のたびに必要だった。

...

参考リンク

  • GT202
    Alljoynのドキュメント によるとGT2020へFreeRTOS上のArduino環境で走るAlljoynアプリをインストールし実行するための環境構築の話があった。 ここのQCA4002 Based ModulesによるとGT202にSTMicroelectronics Nucleo F411REボードをつけるとFreeRTOS用の構成にできるようだ。

  • Raspberry-Pi
    RaspberryPi-FreeRTOSにてFreeRTOSのラズベリーパイ向けのPortが存在する。ただし、最終更新日やコード内容からWifiモジュールのあるPi3には対応していない可能性があり、Pi、Pi2にUSB-Wifiモジュールを指し、自前でドライブさせないと(自前でドライバコードを用意する)いけないかもしれない。

  • CC3200
    [CC3200のサイト](http://www.tij.co.jp/tool/jp/cc3200sdk#Technical Documents)の技術資料のプログラミングガイドによるとexampleフォルダ内にFreeRTOSのデモアプリが存在し、FreeRTOS v8.0.1をサポートしている。CC3200SDKのダウンロードには登録が必要。また登録後のダウンロード時にある種の誓約(犯罪などに使わないなどの宣言)があるので注意。FreeRTOSでタスク周りの管理は行えるようだが、通信周り(ソケット)はsl_socket(CC3200SDK内に定義済み)を使用している。FreeRTOS_socketにするには一段ラッパーをかませる必要がありそうだ。 FreeRTOS+TCPの通信周りのポートはソケットより低レベルでのポートを行う必要があるので、FreeRTOS_socketでsl_socketをラップするのは無理な模様。FreeRTOS+TCPを使う場合CC3200用ポートをゼロから作る必要がある。(CC3200用のソケットライブラリがあるため、そもそもポートされていないみたい。) またはThingSDKのソケットCB部分で使い分けるような方法を取るべきか。

  • FRDM K22F
    FRDM-K22Fにドキュメントなどが一式ある。 IDEはKinetis Design Studio(EclipseベースのIDE)を使用する。ダウンロードの際に登録が必要。

メモ(ファイル削除に伴う退避)

今はまだメモ書き

cc3200-sdk/example下にfreertos_thingsdk_demoを配置 freertos_thingsdk_demo下でthing-if-ThingSDKを同名フォルダでclone thing-if-ThingSDK/kii/TI/CC3200/wlan_station/kii下のREADME.mdの注意書きの通りに編集、あとkii_json.cでEINVAL関連のエラーが出るのでsocket.hをインクルードした。 これでIARではビルド自体は出来た。

no definition for "__write" [referenced from putchar.o(dl7M_tln.a)] 実際にThingSDKのAPIを利用したら上記エラーが出た。 これはIARの環境だとwrite.c(IAR Workbenchをインストールした所にある)を直接ワークスペースに含めて対処するとIARの公式見解があった。(詳しくはWikiに記述)

KII_JSON_FIXED_TOKEN_NUMについては前述のREADME.mdの値(20)では足らなくなっていた。今のRestAPIの応答では最低27いる模様。安全マージンで30に変更した。 MQTT越しにコマンドを扱う際は30では足らなかったので40へ増量。

KIIPUSH_TASK_STK_SIZEが2048だとaction_handler内で足らなくなるので4096まで増やすっ必要があった。 また、kii_thing_if.c内のprv_update_statusタスクを作成する際のスタックサイズが8バイトと圧倒的に少ないのでこれを1024バイトへ変更した。(3ヶ所あるのですべて変更) IAR環境なら1024で十分だったがCCS環境だとそれでは足りないので2048まで変更した。