COLUMN
COLUMN
ギアの紹介とトラブルシューティング事例(その5)
こんにちは。開発部のTです。
前回の投稿では桜が咲き始めていたのに、もうすっかり夏になってしまいました(-_-;
みなさま、夏風邪などひいていませんでしょうか。私はひいてしまいました(o_ _)o
それはさておき
実は今回もマイコンのネタです
今回は開発環境まで公開してしまいます。
IDE : CS+ for CC
コンパイラ:CC-RL
ほぼ毎日Windows Updateを確認するような私です。
開発環境もコンパイラもたまーに気が付いたら更新して、最新にしています。(そっちはたまーになんかいっ)
ということで数カ月前の話になりますが
CC-RLが1.15.01 → 1.16.00に更新されましたね。
前述の通り律儀な私はちゃんとアップデートマネージャで更新しましたよ。
![]()
で、これまで動いていたプログラムを立ち上げ、動かしてみたところ
ウォッチドッグタイマが働く → 無限ループができてる?!
どこで止まるのか確認すると、数値指定でms単位でディレイをかける関数でした。
そのコードはこんな感じ。
————————
while(msdelay);
————————
関数を呼び出すと1msのタイマ割り込みを開始し、割り込みのたびにmsdelayを減らします。
で、0になったらwhileが終わるので、そこでタイマ割り込みを停止する、って感じです。
これが今回のCC-RLのバージョンアップによるコンパイラ時のコード最適化で変な風に省略されてしまったぽいのです。
ホントはこう書くべきなんでしょうね。
————————
while(msdelay)
{
NOP();
}
————————
でも他にもあるかもだからコードは直さないことに。オプション変更で何とかなるのでは?
ということで以下が効果的であることがわかりました。(いずれかでOK)
- コンパイル・オプションの「最適化レベル」を「デバッグ優先」にする
- 同、「出力コード」の「外部変数をvolatile化する」を「はい」にする
いずれもプログラムサイズは少しだけ大きくなりますが、最適化で省略されることは無くなりました\(^o^)/
・・・リリースノートに最適化について書いてあったっけ?(ボソッ)
今回もあります ランニングギア紹介
今回はGPSウォッチの紹介です。
APEX 2 Pro(COROS)

買ったのは2022年の秋だったような。。ベルトがだいぶ色あせてしまいましたが、まだまだ現役です。
電池の持ちがいい割に他社(某G社や某S社)の製品より安いのが気に入っています。