はじめに
前回の環境準備からマイコンが届き、ビルドしたプログラムを書き込む準備ができました。
その際にあったものもろもろメモ書きで残そうと思います。
Flshing
早速、公式ドキュメントから用意されているコマンドを実行し書き込みます。
openocd -f interface/stlink.cfg -f target/stm32bluepill.cfg -c init -c "reset halt" -c 'flash write_image erase nuttx.bin 0x08000000' -c 'shutdown'
ここで使うstm32bluepill.cfgについて下で説明します。
このあと想定通りのアドレスに書き込まれているかを確認します。
下記のコマンドからデバックツールのgdbを実行します
arm-none-eabi-gdb
target remote :3333
where #->現在プログラムがどこまで来ているかを確認します。
結果として0x80000000以降のアドレスだったので書き込まれたプログラムは問題なく動いているようです。
次は書き込んだアプリの動作確認を行いたいと思います。
マイコンのUART(A9, A10)シリアルからアクセス可能です。ツールは以前インストるしたminicom
を使います。
minicom -s
ダーゲットを指定しポートを開くと、普通のCMDが出てきます。
この画面が見えたら動作確認終了です。
issue
-
動作確認の際にあったこと
プログラムを書き込みを完了しマイコンにアクセスしたところフリーズしてました。
GDBから見てもPC(プログラムカウンター)が進められてない状態です。 -
書き込み際にあったこと
対象のマイコンID識別ができずopenocdの設定ファイルを修正する必要がありそうです。
ご参考に https://community.platformio.org/t/debugging-of-stm32f103-clone-bluepill-board-wrong-idcode/14635
solve
-
1日程度、問題がわからずコンパイルバイナリファイル確認、リンカーローダーの確認などもろもろ実施しても解決できず。
翌日になって解決でき、意外と簡単でGDBからPCを進めるコマンドで解決できました。c
マイコン内部のClockがあるので勝手に動くとイメージしてましたが、動かすプログラムがないと止まるみたいです。
-
openocd問題について
設定ファイルを新規で作成し、CPUTAPIDの値を0x2ba01477
に変更します。
終わりに
試しプログラムを動かせることができました。ついでにGDBの使い方も少し慣れてきてます。
WEB開発のようにCICD構築まではいきませんが、開発環境の構築なども終えてます。
開発環境などもろもろについても別途残しておきたいと思います。追加でタスクスイッチングを可視化できるツールがあるので導入予定です。
開発言語は制約があり、C言語、RUSTができそうです。(CPPもありますが、BluePillだとできない。。)
Nuttxライブラリ言語とオーバヘッドを避けたいので一旦ここはC言語で実装することにしました。
使ってるマイコンにGPIO、I2Cなどもろもろ使ってセンサー付けなどしたいと考えてます。
あとはインシデント想定のタスクスケジューリングなども実装できればと思います。