1、找出下面程序的错误 (一个中断服务子程序ISR)
interrupt double compute_area(double radius)
{
double area = PI *radius * radius;
printf("\nArea=%f",area);
return area;
}
分析:
1、ISR不能有返回值,必须用void;
2、ISR不能传递参数,必须用void;
3、ISR应该是短而高效的,所以不推荐在ISR中做浮点运算,应该只由中断发出消息或置位标志然后由应用层去处理其他工作。且 在许多处理器编译器中,浮点一般都是不可重入的。有些处理器编译器需要让额外的寄存器入栈,有些处理器编译器就不允许在ISR中做浮点运算;
4、ISR中不应该有重入和性能上的问题,因此使用pintf()函数也是不好的
2、ISR不能传递参数,必须用void;
3、ISR应该是短而高效的,所以不推荐在ISR中做浮点运算,应该只由中断发出消息或置位标志然后由应用层去处理其他工作。且 在许多处理器编译器中,浮点一般都是不可重入的。有些处理器编译器需要让额外的寄存器入栈,有些处理器编译器就不允许在ISR中做浮点运算;
4、ISR中不应该有重入和性能上的问题,因此使用pintf()函数也是不好的