WR-X CPU module用のリセット信号生成用のPICのプログラムをするのに、CCS CというCコンパイラを使用しているのだが、昨日やってどうにもうまく動かなかった。
30分くらいでできる簡単なプログラムなのに、何としても動かない。
最初はプログラムの動作がおかしいのかと思っていたが、どうやら最初から全くプログラムが動いていないようだった。
昨日丸一日かけて、どうにもダメだったので、何かでPICが壊れたか?と思い、今日は同じPICとブレッドボード等を持って研究室に行った。
PICを変えてみたがダメだった。
これは多分アレだ。理由はおそらくCCS Cのバグだ。
このCCS Cというコンパイラだが、とにかく信じられないようなバグがあるコンパイラとして有名なものだ。
PCMというもので、もう3年くらい前に買ったものだが、その当時もPIC16F877か何かをプログラムしていて、どうにも割り込みが動かなかった。
それがバージョンアップしたらあっさり動いて、コンパイラのバグと分かったのだが、ネットでの噂でも、とにかくこのCCS Cはバグがひどすぎるということで有名なのだ。
一応コンパイラが吐いたアセンブラのリストファイルも見てみたが、それ自体は間違えていないようだったので、そうなるとアセンブラから機械語にするところのバグなのか。
そこまでチェックする気にはなれなかったので、確かめてはいないが。
CCS Cは購入後1ヶ月しかバージョンアップできないので、新しいバージョンが欲しいときは新品を買いなおしになる。またアメリカまで海外通販しようかと思ったりしたが、とりあえず必要なのはリセット信号生成だけなので、久しぶりにアセンブラでプログラムを組むことにした。
C言語なら30分でできるようなものに3時間くらいかかったw
しかし、何事も無いようにあっさり動いたので、まぁよしとするか。
こんな簡単なプログラムをするのに、CCS Cのバグのせいで丸2日もかかってしまった。
それにしてもCCS Cはダメだな。
Microchipの純正C言語ならこんなことはないんだろうが、高いんだよね。
ちなみに、使っているPICはPIC12F683という新しいものである。
購入日時はありますが、バージョンがわからないので断言できませんが、3.1x前後だとすれば暗黒時代のコンパイラーですね。
CCSCはちゃんと登録していれば新規購入と同等の金額で、年間保守契約が可能です。
(Webでの登録が必要)
マイクロチップの純正はお試し版を使えば期間限定ですが、フル機能で使えます。
良ければバージョン番号とどんな機能を使おうとしたのかお教えいただければありがたいです。
バージョンは3.204ですね。
ただGPIOへ1/0を出力するようなプログラムでも動かないんで、なんにしてもおかしいですね。
16F877とかなら同じコードでもちゃんと動きます。
#fusesなんかはちゃんと認識しているんですが、1行目からしてすでに動いていない感じ。
バージョンは問題なさそうですね。
ソースを見ないと判らないですが、ADCのポートをOFFにしていますか?
最近のPICはデフォルトでアナログが選択されています。
それを知らないで昔のプログラムをコピペするとデジタル出力が出ない・・・・というトラブルとご対面です。
アナログ入力を使わないならば以下の2行をおまじないとして唱えてみるのが吉です。
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
それは僕もアセンブラでやったときに気づいたのですが、CCS Cでは試していません。
もしかしたらそれでOKなのかもしれませんが、ネットに載ってる同じPIC12F683用のCCS C用プログラムを見ると、それをしなくても動いてるみたいなので、その辺はCCS Cが勝手にやってくれるのか、と思ったりしたんですが。
そのうち暇があったら試してみます。