慢慢学的个人空间 https://bbs.21ic.com/?1350744 [收藏] [复制] [RSS]

日志

reentrant--可重入的

已有 386 次阅读2015-3-19 15:40 |个人分类:C语言|系统分类:单片机| reentrant

这个修饰符用于把函数定义为可重入的,所谓可重入函数就是被允许递归调用的函数,,递归调用是指一个函数正在被调用,且尚未返回时,又直接或间接调用函数本身,一般的函数不能被调用,只有重入函数才允许被递归调用!

下面的函数是不可重入的:
(1)函数体内使用了静态的数据结构;
(2)函数体内调用了malloc()或者free()函数
(3)函数体内调用了标准I/O设备
把一个不可重入函数编程可重入函数的唯一方法是用可重入的规则来重写他。

只要遵守了几条很容易理解的规则,那么写出来的函数就是可重入的:
第一:不要使用全局变量,因为别的代码可能会覆盖这些变量值
第二:临界区保护,调用函数之前,先关中断,调用结束之后再打开中断(该方法可以使用全局变量)
第三:不能调用任何不可重入函数
第四:谨慎使用堆栈,使用前最好先进入临界区
第五:用信号量禁止该函数在使用过程中,被再次调用。
总之,保证中断是安全的。



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)