- ベストアンサー
PICマイコンでGIEビットが1に出来ません。(コンパイラのバグ?)
- 質問は初めてです。GIEビットが1にセット出来ません。
- デバッグのwatchで監視してもセットされないのが確認出来ます。
- マイコンに書き込んで実行させても割り込みが発生してないのが分かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>はHI-TECH PICCの#include <pic.h>の中でしょうか? たぶんそれにあたると思います。 >ダミー関数を挟む方法はまだ試していませんが、 >回答を見る前に、改行して空白を開けるだけで回避出来てしまいました。 >後、CM2CON0 = 0x00;の文も飛ばされ無視されてました。ここも空白で >回避しました。 >そして、その無視された行に「SDFKJSDSPDFKLPOK」見たいなでたらめな >文字を書いてもコンパイル成功してしまいます。。 相当問題があるみたいですね。そんなだからサポートをやめたんだと 思います。 >もし、コンパイラを変えるとしたら >サポートのあるC言語コンパイラは何がありますでしょうか? >CCSは無料版が出て良いと聞きました。 >コンパイラを変えると定義方法は変わってしまいますか? CCSは、使ったことがあります。マニュアルもしっかりしているし、 CCS-Cでの解説本もあったと思います。 定義方法というか、ライブラリとか大きく違うように思います。 IO関係もライブラリになっていたように思います。
その他の回答 (1)
- R32C
- ベストアンサー率39% (115/290)
私の調べ方が足らないのかもしれませんが、HI-TECH PICCが入手できないので よくわかりませんが、 T0IF GIE T0IE は同じバイトのビット位置違いで、ご指摘のようにコンパイラの (最適化の)バグ臭いとは思います。 T0IF GIE T0IEの定義を見てみたいのですが、 見られないのでなんとも言えないです。 確認方法としては、間に別ファイルのダミー関数を挟んでみたら回避はできると 思いますが、根本的には、サポートのあるコンパイラを使う必要があるように思います。 extern void dammy(void); dammy(); T0IF = 0; dammy(); GIE = 1; dammy(); T0IE = 1; 別ファイル void dammy() {}
お礼
ありがとうございます。 >>T0IF GIE T0IE は同じバイトのビット位置違い と言うのは、 INTCONレジスタがバイト(8Bit)でその中のT0IF GIE T0IEはビット0~7Bitのビット違いって事ですよね? >>T0IF GIE T0IEの定義 はHI-TECH PICCの#include <pic.h>の中でしょうか? ダミー関数を挟む方法はまだ試していませんが、 回答を見る前に、改行して空白を開けるだけで回避出来てしまいました。 後、CM2CON0 = 0x00;の文も飛ばされ無視されてました。ここも空白で回避しました。 そして、その無視された行に「SDFKJSDSPDFKLPOK」見たいなでたらめな文字を書いてもコンパイル成功してしまいます。。 どうやら、コンパイラからその文は見えていない様でした。。 もし、コンパイラを変えるとしたら サポートのあるC言語コンパイラは何がありますでしょうか? CCSは無料版が出て良いと聞きました。 コンパイラを変えると定義方法は変わってしまいますか? ↑別の質問にしたほうがいいかな?
お礼
なるほど、CCSのサイトを見てきました日本語での説明がしっかりしていて 色々機能が豊富な感じがしました。 今、作っているプログラムが完成したら検討したいと思います。 これで、質問締め切りますね。ありがとうございましたー