Raspberry Pi PicoでFreeRTOS+CLI
FreeRTOS-SMP-Demos/FreeRTOS/Demo/CORTEX_M0+_RP2040 at main · FreeRTOS/FreeRTOS-SMP-DemosRaspberry Pi...
ここからの続きです。
調査
とりあえずFreeRTOS+CLIのExampleをざっと眺めてみましょう。
'Classic' FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel. - FreeRTOS/UARTCommandConsole.c at main · FreeRTOS/FreeRTOS
vSerialPutString
とかxSerialGetChar
というのが見えますね。どうやらUARTのAPIを直接叩いて入出力を行なっているようです。
ところで、Raspberry Pi Picoの場合はPico SDKがシリアルコンソールをstdioで扱えるようにしてくれる機能があります。pico_enable_stdio_usbってやつですね。なので、UARTを叩いてる関数あたりはそのままprintf
とかgetchar
で置き換えれば大丈夫そうです
(UnixのTTYではないので、scanfみたいな便利な関数は使えない。そのため、stdioを使う場合でも入力はgetchar
で1バイトずつ取ってきて、CRLFとかエスケープシーケンスをある程度考えて制御してやる必要はある)
Example
Use FreeRTOS on Raspberry Pi Pico. Contribute to Hiroki-Kawakami/pico-freertos-example development by creating an account on GitHub.
とりあえずこっちもGitHubにポイ。
FWをビルドして焼いて起動したらシリアルポートが見えるようになるので、それをpicocomとかで開けばCLIにアクセスできます
概略
前回からの差分だけざっくりと説明
freertos
ディレクトリ
FreeRTOS-Plus-CLI
- 以下のFreeRTOS repoからまるっとコピー。submoduleだと不要なファイルがたくさんついてきてしまうので、必要なものだけコピーしてきました。
- FreeRTOS/FreeRTOS-Plus/Source/FreeRTOS-Plus-CLI at main · FreeRTOS/FreeRTOS
CMakeLists.txt
FreeRTOS-Plus-CLI
をビルド・インクルード対象に追加していますFreeRTOSConfig.h
- FreeRTOS+CLIを動かすにあたってちょっと設定を変えてます
example
ディレクトリ
console.c
- FreeRTOS_Plus_CLI_Demosでいう
UARTCommandConsole.c
の代わりです - stdioの関数で書き換えた〜あたりはこのファイルの話です
Sample-CLI-commands.c
- コマンドのサンプル実装です
- 以下FreeRTOS_Plus_CLI_Demosからそのまま持ってきました
- FreeRTOS/Sample-CLI-commands.c at main · FreeRTOS/FreeRTOS
後書き
ここまで来れば準備はOKですね。あとは以下の公式ドキュメントの通りに独自のコマンドを自由に追加すればよかろうなのです。
Implementing a user defined command to use with the FreeRTOS+CLI command line interpreter
M5Stackだと画面とボタンがあるので、それらを使って実行中に操作して動きを見たりなんかは十分だったのですが、Picoは画面とかボタンは標準装備じゃないので、こうやってPCから色々いじれるようにしておけば便利かもですね。
コメント