下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的错误。
__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
答案:
1、ISR不能有返回值,必须用void;
2、ISR不能传递参数,必须用void;
3、ISR应该是短而高效的,在许多的处理器/编译器中,浮点一般都是不可重入的。所以不推荐在ISR中做浮点运算,应该只由中断发出消息或置位标志然后由应用层去处理其他工作 。
4、ISR中不应该有重入和性能上的问题,因此使用pintf()函数也是不好的。