かみやんの技術者ブログ

主にプログラムの話です

マイコン側進展なし

毎週、ロボットの進展を書いていたわけだが、今週進展なし。
ファームウェア側のコードを全面書き換えで、汎用化していたのだが、はまった。小学校のころからプログラムを書いていて、はまることは、めっきりないのだが、久しぶりにはまった。4時間格闘しても解決しなかった。ぐた。

sprintf()ライクな書式付シリアル通信とタイマー機能を同時に使うとフリーズ。それぞれの単体試験はOK。高いデバッグ用のハードウェアは持っていないので、普段は、シリアル通信でトレースログを出して、TeraTermで確認するのだが、シリアル通信をするとフリーズなので、ぜんぜんデバッグがはかどらない。一応、LEDを点滅させたりで手がかりをさぐるがぜんぜん不明。
普段、PCで開発するときも私は、トレースログよりもデバッガのステップ実行が割りと多い派(その方がカバレッジテストとかしやすいので、関係ないバグとかも発見しやすいので)。

シリアルもタイマーも割り込みを使っているので、そのあたりか、それともメモリ不足か(メモリ不足といっても、malloc() free()のないシステムとして作っているのでビルド時にメモリ使用量が決まる。C言語グローバル変数として配列でメモリを確保)。スタックオーバーフローとか。
いずれも思い当たる節がない。
ビルドしてFlashROMに書き込んで、起動して0.1秒でフリーズ。そんな感じ。ま、インターフェースをちょっと変えて解決とするかな。

というわけで予定していた、電源電圧監視と、12V系のDC/DCコンバータのリモートコントロール(ON/OFFをマイコンで制御)は、次回に持ち越し。ぐた。

あと、気づいたのだが、HEWは、デフォルトでコンパイルのワーニングがOFFなのね。returnの戻り値がないとか、宣言されていない関数の呼び出しとか全然警告がでない(Javaなら警告どころかエラーだが)。20年ぐらい前の古めかしいコンパイラっぽいエラーメッセージ。
そんな感じ。HEWでプロジェクトを作成したらすぐにワーニング設定を変えたほうがよいね。