2

私の他の質問に続いて、このC(AVR)コードの最適化を支援しますか?:)、私は自分のCプログラム内のアセンブリでISRを実装する方法の仕組みを本当に知らないことに気づきました。グーグルで検索しましたが、あまり便利なものは見つかりませんでした。

基本的に、Cプロジェクトで他のすべて(割り込みを発生させるためのレジスタを含む)を設定したいのですが、自分が書いたアセンブリコードを割り込みで実行したいのです。

それが助けになるなら、私はWindows上でAVRスタジオ6を使用しています。ファイルを使う必要があると言われましたが.s、それ以外はどうしたらいいのかよくわかりません。基本的な構造は次のとおりですか?

#include <avr\io.h> 
TIMER1_COMPA_vect:
    ; assembly instructions here

TIMER1_COMPA_vect割り込みが発生したときにアセンブリを実行したい場合(これはCでのISRの名前です)。それとも私は完全に軌道に乗っていないのですか?私がする必要があることの基本的なテンプレートは何ですか?または、それがばかげた質問である場合、私がより多くの情報を見つけることができるリンクはありますか?

4

1 に答える 1

1

Art of Assembly Language(Randall Hydeによる)には、ISRに関する2つの章があります(17番目と18番目、特にセクション18.5と18.6が役立つ場合があります)。まもなく:

  1. IVT(割り込みベクトルテーブル)に移動し、ISRセグメントとオフセットで変更して、古い値を保存します
  2. ユーザーがウィンドウを閉じてもISRがメモリに常駐するように、TSR(終了して常駐)プログラムを実行する必要があります。
  3. 作業が終了したら、忘れずに古いISRを呼び出してください(これは割り込みチェーンと呼ばれます)
  4. ISRは再入可能である必要があります(ISRがまだ実行されているときに割り込みが再度発生した場合、PCが爆発しないようにするためです;))

ちなみに、ここでその素晴らしい本のPDFコピーを入手できます

于 2011-04-16T11:26:42.357 に答える