お問い合わせ 資料請求

COLUMN

COLUMN

ギアの紹介とトラブルシューティング事例(その5)

こんにちは。開発部のTです。
前回の投稿では桜が咲き始めていたのに、もうすっかり夏になってしまいました(-_-;
みなさま、夏風邪などひいていませんでしょうか。私はひいてしまいました(o_ _)o

それはさておき

実は今回もマイコンのネタです

今回は開発環境まで公開してしまいます。
IDE : CS+ for CC
コンパイラ:CC-RL

ほぼ毎日Windows Updateを確認するような私です。
開発環境もコンパイラもたまーに気が付いたら更新して、最新にしています。(そっちはたまーになんかいっ)

ということで数カ月前の話になりますが

CC-RLが1.15.01 → 1.16.00に更新されましたね。
前述の通り律儀な私はちゃんとアップデートマネージャで更新しましたよ。

CS+のCC-RLバージョン確認

で、これまで動いていたプログラムを立ち上げ、動かしてみたところ

 

ウォッチドッグタイマが働く → 無限ループができてる?!

 

どこで止まるのか確認すると、数値指定でms単位でディレイをかける関数でした。
そのコードはこんな感じ。
————————
while(msdelay);
————————

関数を呼び出すと1msのタイマ割り込みを開始し、割り込みのたびにmsdelayを減らします。
で、0になったらwhileが終わるので、そこでタイマ割り込みを停止する、って感じです。

これが今回のCC-RLのバージョンアップによるコンパイラ時のコード最適化で変な風に省略されてしまったぽいのです。

 

ホントはこう書くべきなんでしょうね。
————————
while(msdelay)
{

NOP();

}
————————

 

でも他にもあるかもだからコードは直さないことに。オプション変更で何とかなるのでは?
ということで以下が効果的であることがわかりました。(いずれかでOK)

  • コンパイル・オプションの「最適化レベル」を「デバッグ優先」にする
  • 同、「出力コード」の「外部変数をvolatile化する」を「はい」にする

いずれもプログラムサイズは少しだけ大きくなりますが、最適化で省略されることは無くなりました\(^o^)/

 

・・・リリースノートに最適化について書いてあったっけ?(ボソッ)

 

今回もあります ランニングギア紹介

今回はGPSウォッチの紹介です。

APEX 2 Pro(COROS)

とけい

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