一层是硬件相关,目的是执行中断找到中断向量,为中断服务历程提供运行环境(比如租滑保存中断前的各工作寄存器状祥型含态,屏蔽中断,中断嵌套计数,或者取消屏蔽)等等,搞定后跳转到中断向量指向的位置,执行中断服务(通常如果是完善的程序,这里应该允许添加多个服务历程)。。
服务例程就是具体要执行的内容,是和硬件无关的,换一个型号的CPU理论上应该保证也能顺利使用不用该代码。。
无非就这两层关系,如果要移植程序,硬谨笑件相关的中断处理必须修改,硬件无关的,理论上是不用修改,但写的水平很差劲,没有完全脱离硬件,也得改。。。
ISR = Interrupt Service Routine,裤氏中断服务子程序中断服务子程序有可能与程序主体“并行”运行,为防止编译器错误地认为其变量不会同时搭李使用而分配重叠地址,有些情况下会要求ISR中的胡枝散变量都声明为volatile确保独立分配独立运行不被篡改。
1、ISR不能有返返森回值,大世迹必须用void;2、ISR不能传递参数,必须用void;
3、ISR应该是短而高效的,所以不推荐在ISR中做浮点运算,应该只由中断发出消息或滚并置位标志然后由应用层去处理其他工作;
4、ISR中不应该有重入和性能上的问题,因此使用pintf()函数也是不好的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)