中断服务函数的编写要求
Posted DeanBoyLoveLinux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中断服务函数的编写要求相关的知识,希望对你有一定的参考价值。
中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。许多编译开发商在标准C上增加了对中断的支持,提供新的关键字用于标示中断服务程序 (ISR),类似于__interrupt、#program interrupt等。当一个函数被定义为ISR的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码
例:
_interrupt double compute_area(double radius)
{
double area=PI*radius*radius;
printf("%f\n", area);
return area;
}
中断服务程序需要满足如下要求:
(1)不能返回值;
(2)不能向ISR传递参数;
(3) ISR应该尽可能的短小精悍;
(4) printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用
(5)在许多处理器、编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额外的寄存器入栈,有些处理器/编译器就不允许ISR 中做浮点运算。此外,ISR 应该是短而有效率的,在ISR 中做浮点运算是不明智的
参考 : http://blog.csdn.net/maochengtao/article/details/40373039
以上是关于中断服务函数的编写要求的主要内容,如果未能解决你的问题,请参考以下文章
stm32中断编程要求:2个中断,2个优先级,2个初始化函数