ITPub博客

首页 > 应用开发 > IT综合 > gcc-avr中中断的写法

gcc-avr中中断的写法

原创 IT综合 作者:springb 时间:2008-12-16 10:45:16 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 关于2407的加密
请登录后发表评论 登录
全部评论

注册时间:2011-11-05

  • 博文量
    15
  • 访问量
    318494