Lチカできるようになったので、色気を出してOSのメッセージキューに手を出して見た。受信データの有無を知るために、グローバル変数のバッファデータ長をポーリングするのをやめて、USBの受信ハンドラの中でバッファ構造体をメッセージキュー経由で渡すことにした。んでもって、100%フリーズするバグの出来上がり。
デバッガで追って見ると、優先度をチェックするconfigASSERT()でFAILして、無限ループの刑を受けているらしいことがわかった。ぐぐってみたら、ハンドラの中でFreeRTOSのシステムコールを呼ぶには、USBハンドラの優先度を下げないといけないらしい。
ソースはココ→ マイコン徹底入門 割込み優先度の設定
STM32CubeMXのNVIC設定でUSBの優先度を下げて(priorityの数字を増やして)、一件落着。
0 件のコメント:
コメントを投稿