首页 > 编程知识 正文

可重入函数和不可重入函数的区别,函数可重入

时间:2023-05-05 11:34:03 阅读:190227 作者:1059

1.可重入函数实时系统的设计中,多个任务经常调用同一个函数。 如果此函数不幸被设计为不可重新输入的函数,则不同的任务调用此函数时,其他任务可能会修改调用此函数的数据,从而导致意外的结果。 那么,什么是可重入函数呢? 重入是由多个任务调用的过程,无需担心数据是否有误。 不可重入的函数在实时系统设计中被视为不安全的函数。 满足以下条件的大多数函数是不可重入的。 (1)在函数体内使用静态数据结构2 )在函数体内调用malloc (或free )函数; )3)在函数体内调用了标准I/O函数。 可以在多个任务中调用可重新输入的函数,而不用担心数据被破坏。 可以随时中断重入函数,并在一段时间后运行,并且不会丢失相应的数据。 可以重新装入函数,也可以只使用局部变量。 这意味着它存储在CPU寄存器或堆栈中。 或者使用全局变量时,必须保护全局变量。 说明2 :可再输入的函数简单地说是可中断的函数。 这意味着,如果在此函数运行时随时中断他的执行,并在调度任务时执行其他代码,则不会出现错误。 不可重入的函数使用全局变量区域、中断向量表等系统资源,中断可能会导致问题,因此不能在多任务环境下运行。 基本上下面的函数是不可重入的(1)函数体内使用静态数据结构(2)在函数体内调用malloc (或free )函数; )3)在函数体内调用了标准I/O函数。 使不可重入函数可重入的唯一方法是用可重入规则重写他。 其实很简单。 只要遵守几个简单易懂的规则,编写的函数就可以重新输入。 第一,不使用全局变量。 因为其他代码很可能覆盖这些变量的值。 第二,与硬件交互时,请不要忘记执行disinterrupt ()等操作。 这意味着关闭硬件中断。 请记住打开中断以完成对话。 在某些系列中,这可以通过输入/输出核心或OS_ENTER_KERNAL/OS_EXIT_KERNAL来描述。 //这是临界区域保护的第三方,不能调用不可重入的函数。 第四,谨慎使用堆栈。 首先,请在使用OS_ENTER_KERNAL之前使用。 有些规则,都很好理解。 总之,请始终记住保证中断是安全的这句话。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。