微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在C程序AVR中编写程序集ISR?

如何解决如何在C程序AVR中编写程序集ISR?

| 接下来是我的另一个问题,帮助优化此C(AVR)代码? :),我只是意识到我并不真正了解如何在C程序中的汇编中实现ISR的机制。我用谷歌搜索,但没有发现任何有用的信息。 基本上,我想在我的C项目中设置其他所有内容包括使中断触发的寄存器),但是我希望中断执行我编写的一些汇编代码。 如果有帮助,我正在Windows上使用AVR Studio 6。有人告诉我我需要使用
.s
文件,但除此之外,我不确定要怎么做。基本结构如下吗?
#include <avr\\io.h> 
TIMER1_COMPA_vect:
    ; assembly instructions here
如果我希望在激发TIMER1_COMPA_vect中断时运行程序集(这是C中ISR的名称)。还是我完全偏离了轨道?我需要做的基本模板是什么?或者,如果这是一个愚蠢的问题,是否可以找到我可以找到更多信息的链接?     

解决方法

汇编语言的艺术(由Randall Hyde撰写)有两章关于ISR(第17和18章,特别是第18.5和18.6节可能会对您有所帮助)。不久: 转到IVT(中断向量表)并使用ISR段和偏移量对其进行修改,并保存旧值 您应该执行一个TSR(终止并驻留)程序,以便即使用户关闭窗口,ISR仍驻留在内存中 完成工作后,请记住调用旧的ISR(这称为中断链接) 您的ISR应该重新进入(这样,如果在ISR仍在运行时再次触发中断,则PC不会爆炸;)) 顺便说一句,您可以在这里获得该本书的pdf副本     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。