gpt4 book ai didi

c - 如何在 C 程序 (AVR) 中编写汇编 ISR?

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:07 24 4
gpt4 key购买 nike

继我的另一个问题之后, Help optimising this C (AVR) code? :) ,我刚刚意识到我并不真正了解如何在我的 C 程序中以汇编方式实现 ISR 的机制。我用谷歌搜索,但没有找到任何有用的东西。

基本上我想设置我的 C 项目中的所有其他内容(包括用于触发中断的寄存器),但我希望中断执行我编写的一些汇编代码。

如果有帮助,我会在 Windows 上使用 AVR studio 6。有人告诉我我需要使用 .s 文件,但除此之外我不太确定该怎么做。基本结构是不是下面这样?

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

如果我希望程序集在触发 TIMER1_COMPA_vect 中断时运行(这是 C 中 ISR 的名称)。还是我完全偏离了轨道?我需要做什么的基本模板是什么?或者,如果这是一个愚蠢的问题,是否有我可以找到更多信息的链接?

最佳答案

The Art of Assembly Language(Randall Hyde 着)有两章是关于 ISR 的(第 17 和 18,特别是第 18.5 和 18.6 节可能对您有所帮助)。很快:

  1. 转到 IVT(中断 vector 表)并使用您的 ISR 段和偏移量修改它,保存旧值
  2. 你应该做一个 TSR(终止并保持驻留)程序,这样即使用户关闭窗口,你的 ISR 也会驻留在内存中
  3. 记得在完成工作后调用旧的 ISR(这称为中断链)
  4. 你的 ISR 应该是可重入的(这样如果在你的 ISR 仍在运行时再次触发中断,PC 就不会爆炸;))

顺便说一下,您可以获得那本伟大 书的 pdf 副本 here

关于c - 如何在 C 程序 (AVR) 中编写汇编 ISR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5683925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com