目录
可重入函数和不可重入函数:
函数可重入是指一函数可以被多个任务调用,而不需要担心在任务切换的过程中,代码的执行会产生错误的结果。可重入函数任何时候都可以被中断,一段时间之后又可以运行,而相应的数据不会丢失。可重入函数或者只会使用局部变量,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以保护。
eg:
void strcpy(char *dest,char *src) { while(*dest++ = *src++) { } *dest = NULL; }函数Strcpy()做字符串复制。因为参数是存在堆栈中的,故函数Strcpy()可以被多个任务调用,而不必担心各任务调用函数期间会互相破坏对方的指针。
如果函数被多个任务调用,可能产生错误的结果,就是不可重入函数。
不可重入函数的例子,Swap()是一个简单函数,它使函数的两个形式变量的值互换。为便于讨论,假定使用的是可剥夺型内核,中断是开着的,Temp定义为整数全程变量。
eg:
int Temp; void swap(int *x ,int *y) { Temp = *x;//1 *x = *y;//2 *y =Temp;//3 }把swap函数设置为任何函数可以调用,如果一个低优先级的任务正在执行swap()函数假设执行到

最低0.47元/天 解锁文章





