中断服务函数的编写要求

中断是嵌入式系统中重要的组成部分,但是在标准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

 

posted @ 2017-09-19 15:53  DeanBoyLoveLinux  阅读(2303)  评论(0编辑  收藏  举报