4

ほんの数週間前に大学でマイクロプロセッサのクラスを終えたばかりで、そこではアセンブリのみでプログラミングしました。割り込みについてかなりの量(IMHO)を学びました。

ここに私の質問があります: 私は 16F684 用の HiTech コンパイラを使用して C でプログラミングしています。割り込みについて説明しているデータシート セクション ( PIC 16F684 データシートセクション 12.4) では、プログラムが割り込みベクトル 0x0004 に移動すると書かれています。マイクロプロセッサ クラスのアセンブリを使用して、そのアドレスを指す .org ステートメントをセットアップし、必要なアセンブリを以下に記述して、割り込みが発生したときにそこにジャンプして実行するだけです。アセンブリでそれを理解することはできますが、CI でプログラムする場合、プログラムの一部がメモリ内のどこに配置されるかを制御できるとは思えないため、問題が発生します。C の割り込みでコマンドを配置する方法がわかりません。

明確にする必要がある場合はお知らせください。

4

4 に答える 4

3

HiTech Cは、C言語をinterrupt関数型で拡張します。

void interrupt my_interrupt_handler (void) {
    handle_interrupts_here();
}

あなたは本当にコンパイラのマニュアルを手に入れるべきです。Pic-liteのマニュアルは無料でダウンロードできると思います。少なくとも、2001年に自分のコピーをダウンロードしたときでした。

于 2010-01-06T15:40:01.953 に答える
1

HiTech のドキュメントを掘り下げる必要がありますが、多くの場合、コンパイラには割り込み関数を定義するための特別なキーワードがあります。コンパイラまたはランタイム システムは、割り込みによって呼び出される関数を特別に処理する必要があります。ベクトルの設定に加えて、コンパイラ (またはランタイム システム) はすべてのレジスタを保持する必要があります。通常の非割り込み機能の場合は、そうする必要はないかもしれません。

マニュアルはあなたの友達になります。

于 2010-01-06T15:38:03.250 に答える
0

PIC 用のCCS コンパイラは、さまざまな割り込みソースの割り込み処理関数で #INT_* コンパイラ ディレクティブまたは「属性」を使用します。

于 2010-01-23T17:12:42.393 に答える