質問は初めてです。
GIEビットが1にセット出来ません。
デバッグでは、
GIE = 1;
の文が無視され飛び越えます。
デバッグのwatchで監視してもセットされないのが確認出来ます。
マイコンに書き込んで実行させても割り込みが発生してないのが分かります。
環境はMAPLAB IED v8.46 と HI-TECH PICC の無料版?です。
↓プログラム全てを書くとやたら長いのでIOなどの設定している関数だけ表示します↓
void Ioport(){
PORTA = 0x00;//ポートA初期化
PORTB = 0x00;//ポートB初期化
PORTC = 0x00; //ポートC初期化
TMR0 = 0x00;//タイマ0初期化
OSCCON = 0x60;//外部クロック20MHz使用
OSCTUNE = 0x00;//動作クロックのチューン無し
CM1CON0 = 0x00;//コンパレータ無効でデジタルIOモード可能
CM2CON0 = 0x00;
ANSEL= 0x00;//デジタルIOモード
ANSELH = 0x00;
OPTION = 0x08;//RBプルアップ有効、TMR0を命令クロック、
//プリスケーラをTMR0に使わない
T0IF = 0;//フラグ タイマ0初期化
T0IE = 1;//割り込みタイマ0可能
GIE = 1;//割り込み全体可能(ココが飛ばされます)
TRISA = 0b11000000;//出力:0~4LED7セグメントのブロック用5つ
WPUB = 0b11100111;//0~2プルアップ設定 3赤外線受信4赤外線送信
TRISB = 0b11101111;//0~2ボタン3つ 出力:4赤外線送信
TRISC = 0b00000000; //0~7LED7セグメントのパーツ用8つ
//GIE = 1;ココに書くとコンパイラがエラーを起こします。
}
void main(void){
Ioport();
//GIE = 1; ココに書くとセットしてくれて正常に動作します。
}
他に
GIE = 1;
を書く場所によっては、
Ioport()関数の最後に書くと、
67.23 ";" expected
71.1 undefined identifier "portBRead"
77.9 void function can't return a value
81.9 void function can't return a value
85.9 void function can't return a value
88.9 void function can't return a value
91.9 void function can't return a value
と、的外れ的なコンパイルエラーが出ます。
そして、
main()関数のIoport()関数の後に書くと、
何故か正常動作し実際に書き込んでも正常に動作します。
後
書く順番によっては
T0IF = 0;
GIE = 1;
T0IE = 1;
と書くとGIEビットは1にセットされるが、T0IEビットは無視され飛び越えます。
新規projectで再度試しましたが同じでした。
これは、コンパイラのバグなのでしょうか?
解決策の回答をお願いします。
No.2ベストアンサー
- 回答日時:
>はHI-TECH PICCの#include <pic.h>の中でしょうか?
たぶんそれにあたると思います。
>ダミー関数を挟む方法はまだ試していませんが、
>回答を見る前に、改行して空白を開けるだけで回避出来てしまいました。
>後、CM2CON0 = 0x00;の文も飛ばされ無視されてました。ここも空白で
>回避しました。
>そして、その無視された行に「SDFKJSDSPDFKLPOK」見たいなでたらめな
>文字を書いてもコンパイル成功してしまいます。。
相当問題があるみたいですね。そんなだからサポートをやめたんだと
思います。
>もし、コンパイラを変えるとしたら
>サポートのあるC言語コンパイラは何がありますでしょうか?
>CCSは無料版が出て良いと聞きました。
>コンパイラを変えると定義方法は変わってしまいますか?
CCSは、使ったことがあります。マニュアルもしっかりしているし、
CCS-Cでの解説本もあったと思います。
定義方法というか、ライブラリとか大きく違うように思います。
IO関係もライブラリになっていたように思います。
なるほど、CCSのサイトを見てきました日本語での説明がしっかりしていて
色々機能が豊富な感じがしました。
今、作っているプログラムが完成したら検討したいと思います。
これで、質問締め切りますね。ありがとうございましたー
No.1
- 回答日時:
私の調べ方が足らないのかもしれませんが、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は無料版が出て良いと聞きました。
コンパイラを変えると定義方法は変わってしまいますか?
↑別の質問にしたほうがいいかな?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPUが16bitでも32bitOSでコンパ...
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
fortranでのNaNについて
-
io.hをincludeするとそのような...
-
変数(関数)名の頭に_
-
コンパイラの制限 : ヒープの領...
-
fortranのコンパイラでInvalid ...
-
C++でアボート(Abort)で処理が...
-
ビープ音でXmas
-
Delphiの逆コンパイル
-
関数の戻り値による変数の初期化
-
何も書いて無いのに警告が出る...
-
C言語のコンパイラ
-
GNUコンパイラとIntelコンパイ...
-
C言語での変数宣言の場所
-
Fortranの割り算について
-
どのプログラミング言語ででき...
-
Visual C++では問題があるのにg...
-
lsiをコンパイルしたいのですが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
コンパイルできない
-
C++でアボート(Abort)で処理が...
-
io.hをincludeするとそのような...
-
変数(関数)名の頭に_
-
コンパイラについて
-
Eclipseの環境設定について
-
C言語のワーニングメッセージの...
-
fortranでのNaNについて
-
ABAQUS ユーザーサブルーチン...
-
Visual C++とVisual C++.NETの違い
-
volatile修飾について
-
C言語
-
PICマイコンによる乱数の表示に...
-
コンパイラの制限 : ヒープの領...
-
バイナリファイルとソースコー...
-
コンパイラフラグ(compiler fla...
-
どのプログラミング言語ででき...
-
io.hをincludeしたプログラムで...
おすすめ情報