AVR全局全能中断 #define sei() __asm__ __volatile__ ("sei" ::) 是
如题.不理解__asm__ __volatile__ ("sei" ::) 是什么意思? 开中断 GCC 嵌入汇编的写法
1,标准C语言没有实现开关中断,所以需要内联汇编来实现。
__asm__ __volatile__ ("sei" ::)
__asm__ 是关键字,标明后面的是汇编代码。
__volatile__标识这代码是可变的,防止被编译器优化,其实在这里没有用。
("sei" ::)
sei 就是汇编指令,后面两个冒号隔开了两个操作数,输入和输出。
这里都没有,所以留空,其实两个冒号不写也是可以的。 :) 我知道这是一个开中断.为什么"sei"后面没有根相应的位怎么就开了中断呢?主要这是我不明白的地方.
同时谢谢2楼回答...
也希望二楼再详细的讲一下.我是刚开始学这个单片机. 哦,对了.还有这句ICC里面的
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
讲解一下这个..
是怎么跳过来执行中断的. 楼主逗大家玩呢,为什么1+1 = 2呢 很简单,因为AVR单片机不是我们设计的。人家设计的人说
“你用一条 sei 指令就可以开中断了”那么我们只能照着办 :)
当然,如果到时候你有能力设计MCU的时候,你也可以设计一个指令集
“我设计的指令集, nop 是开中断的!!!”那也没有人管你呢 ,(不被人扁的话 ....)
轮到人家照着办了~~~嘿嘿~~~
具体你参考一下AVR的汇编指令就OK了。sei没有参数的。
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
我没有用ICCAVR,你问问其他人吧。
不过道理也很简单,都说了C语言没有实现开关中断的,所以必须做一些扩展
只是ICC用了 #pragma 作为扩展的关键字 interrupt_handler 再说明是中断处理
其实这些都是说给编译器听的,编译器会自动设置中断向量。 谢谢大家了,新手。让你见笑了。 顶下! 顶,新手有很多指令都不知道~tks{:smile:} shupeng_avr 发表于 2008-8-17 10:00 static/image/common/back.gif
哦,对了.还有这句ICC里面的
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
讲解一下这个..
#pragma interrupt_handler 是所有的中断服务程序开头必须有的,你照用就行了。timer0_comp_isr是对应的中断向量号,iv_TIM0_COMP
是中断服务程序(函数)的名称,必须要和你接下来要写的函数名称一样!比如:
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
voidiv_TIM0_COMP()
{
//中断服务程序代码
}
shupeng_avr 发表于 2008-8-17 10:00 static/image/common/back.gif
哦,对了.还有这句ICC里面的
#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
讲解一下这个..
ICC很好用的, 顶下{:smile:}{:smile:}
页:
[1]