那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。
那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。
写出的函数就将是可重入的。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。
,一段时间以后又可以运行,而相应的数据不会丢失。可重入函数或者只使用局部变量,
在任务调度下去执行另外一段代 码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,比如全局变量区,
__interrupt double compute_area (double radius) { double area = PI * radius * radius; printf("\nArea = %f", area); return area; }
在OS的调度下去执行另外一段代码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,
压栈,转向ISR,弹栈后继续执行影响的稳定性。也就是说具有不会被中断影响的能力。既然有这个要求,
你提供和编写的每个函数就不能拿公共的资源或者是变量来使用,因为该函数使用的同时,ISR(中断服务程序)
void strcpy(char* lpszDest, char* lpszSrc) { while(*lpszDest++ = *lpszSrc++); *dest=0; }
char cTemp; // 全局变量 void SwapChar1(char* lpcX, char* lpcY) { cTemp = *lpcX; *lpcX = *lpcY; lpcY = cTemp; // 访问了全局变量,在分享内存的多个线程中可能造成问题 }
void SwapChar2(char* lpcX, char* lpcY) { static char cTemp; // 静态局部变量 cTemp = *lpcX; *lpcX = *lpcY; lpcY = cTemp; // 使用了静态局部变量,在分享内存的多个线程中可能造成问题 }
如果必须访问全局变量,记住利用互斥信号量来保护全局变量。
备注:
本文转自:
http://www.cnblogs.com/AlwaysOnLines/p/3912680.html
https://blog.csdn.net/zyboy2000/article/details/
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224528.html原文链接:https://javaforall.net
