中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展-让标准c支持中断。具体代表事实是,产生了一个新的关键字_interrupt。下面的代码就使用了_interrupt关键字去定义了一个中断服务子程序(ISR),请评论下这段代码的。
_interrupt double compute_area(double radius)
{
double area=PI*radius*radius;
printf("Area=%f",area);
return area;
}
Answer:
1)ISR不能返回一个值。如果你不懂这个,那么你不会被雇佣的。
2)ISR不能传递参数。如果你没有看到这一点,你被雇用的机会等于第一项。
3)在许多的处理器、编译器中,浮点一般都是不可重入的。雨后些处理器。编译器需要让额外的寄存器入栈,有些处理器、编译器就是不允许在ISR中做浮点运算。此外ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。
4)与第三点一脉相承,printf()经常有重入和性能上的问题。