プロが教えるわが家の防犯対策術!

今までずっとアセンブラを使い開発していたのですが、XC8コンパイラ+MPLABで
C言語を使い開発したいと思っています。
以下の点について教えていただければ助かります。

・タイマー割り込みについて
アセンブラで書く場合、プリスケーラの設定などから計算して
一回の割り込み内で何命令まで書けるかがわかるため割り込みの最中に
再度割り込みが発生するようなことは避けられますが
Cで書く場合はどのように回避するのでしょうか?
・コンフィギュレーションの設定の仕方
アセンブラでは__CONFIG _HS_OSC & _CP_OFF ・・・のように書きますが
Cではどのように書くのでしょうか。

C言語はわかるので取っ掛かりの部分がわかれば後はすいすいいけると思うのですが。。。
上記とあわせてお勧めの書籍やページなどがありましたら教えていただけないでしょうか。
よろしくお願いします。

A 回答 (1件)

PICマイコン事態も、そのコンパイラ環境での開発は経験がないですが、



一般的に、割り込み処理はリエントラントにしない(してもいいですがえらく複雑になる)と思いますので、多重割り込みを回避するために、

・チップ自体が、割り込み受付から復帰まで割り込み禁止になっている(割り込みからの復帰命令で割り込み禁止のステータスが変化する)
・割り込みルーチンの先頭で割り込み禁止して、処理から復帰するときに割り込み禁止解除する(割り込み禁止のレジスタを能動的に制御する)

のいずれかだと思います。

割り込み禁止・禁止解除などはC言語用のマクロなどが用意されていませんでしょうか?
チップのマニュアルと割り込み処理のアプリケーションノートやサンプルコードを参考にされるのが良いと思います。


また、割り込み処理内の処理時間については、C言語のまま見積もるのはちょっと難しいですが、
C言語で記述した割り込み処理の中間コード(アセンブラ)を吐き出して、ステート数を計算したりします。

参考になれば幸いです。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。
割り込み処理に関してはおっしゃるとおりです。
あれからいろいろ試してなんとか解決にいたりました。
タイマー割り込みを止めることなくフリーランさせる必要があったため
アドバイス頂いたようにアセンブラを確認し実際の処理数をカウントしてみました。
やはり最終的にはこうするしかないんですね・・・(^^;

コンフィグレーションビッツの設定についてですが後に参照された方のために記載しておきます。
以下のように設定します。
#pragma config CP = OFF, DEBUG = OFF, WRT = OFF, CPD = OFF, LVP = OFF, BOREN = OFF, PWRTE = ON, WDTE = OFF, FOSC = HS, CPD = OFF
設定できる項目に関してはmplabインストールディレクトリ内にリファレンスがありました。
当方の環境では
C:\Program Files\Microchip\xc8\v1.10\docs\chips
です。

KEIS050162さんご回答本当にありがとうございました。m(_。_。)m

お礼日時:2012/09/21 03:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!