gcc-avr中中断的写法

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=552309&bbs_page_no=169&bbs_id=1000

Interrupts 和 Signals
详细描述
很难找到在如何处理中断方面达成一致的编译器,直到C语言试着隔离硬件相关的细节,编译器的作者才不得不设计他们自己处理中断的方法。
在AVR_GCC环境中,向量表已经使用预先定义好的名字来标志中断(interrupt)路由(routines),你即使不定义也可以使用他们。
但是定义(patching)向量表只是解决这个问题的一部分。一般来说,编译器在正常执行编译器生成(compiler-generated)的代码时使用一组寄存器。这些寄存器就像状态寄存器一样是很重要的哦。另外我们要做的事情就是用"__attribute__((interrupt))来标记中断处理函数。
这些细节看起来使中断处理有一些混乱,但是所有的这些细都是被中断API(Interrupt API)处理的。有两个宏用来定义中断处理函数,INTERRUPT()和SIGNAL()。这些宏用来标记你的代码为一个中断处程序,下面的例子定义了一个ADC中断的处理程序(handler)。
#include
INTERRUPT(SIG_ADC)
{
//user code here
}
如果一个未预期的中断产生了(终端已经产生,但是没有对应的处理程序,通常属于BUG),那么默认的行为则是跳转到reset区复位设备。也可以用一个名为__vector_default的方法重载(override)这种处理模式,既可以用SIGNAL()宏也可以用INTERRUPT()宏定义它。
#include
SIGNAL(__vector_default)
{
/user code here
}
再下面的内容我就不翻译了!

英文原文:

http://ccrma.stanford.edu/courses/250a/docs/avr-libc-user-manual-1.2.5/group__avr__interrupts.html


现在用的是Atmega64。中断向量表定义在iom64.h文件内。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/163295/viewspace-1014786/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/163295/viewspace-1014786/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值