欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

可重入函数与不可重入函数

程序员文章站 2022-03-06 16:01:39
主要体现在实时操作系统(RTOS)中,即多任务环境中,经常会出现多个任务调用同一个函数的情况。一、不可重入函数1、概念不可重入函数,即不能重复进入的函数,不能被中断的函数。在多个任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。不可重入函数在实时系统设计中被视为不安全函数。2、特点有以下条件都属于不可重入函数:函数体内使用了静态的数据结构;(static)函数体内调用了malloc()或者free()函数;函数体内调用了标准I/O函数。函数体...

主要体现在实时操作系统(RTOS)中,即多任务环境中,经常会出现多个任务调用同一个函数的情况

一、不可重入函数

1、概念

不可重入函数,即不能重复进入的函数,不能被中断的函数。在多个任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。不可重入函数在实时系统设计中被视为不安全函数

2、特点

有以下条件都属于不可重入函数:

  • 函数体内使用了静态的数据结构;(static)
  • 函数体内调用了malloc()或者free()函数;
  • 函数体内调用了标准I/O函数。
  • 函数体内访问了全局变量

3、其他

在许多的处理器/编译器中,浮点一般都是不可重入的。

printf()经常有重入和性能上的问题。

 

二、可重入函数

1、概念

可重入函数,即可以重复进入的函数,能被中断的函数。可以在这个函数执行的任何时候中断他的运行,在任务调度下去执行另外一段代码而不会出现什么错误。

2、实现

  • 在函数体内不访问那些全局变量,不使用静态局部变量,坚持只使用缺省态(auto)局部变量。
  • 如果使用全局变量(包括static),则应通过关中断、信号量(即P、V操作)等互斥方法对其加以保护。否则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使有关全局变量变为不可知状态。
  • 在和硬件发生交互的时候,关闭硬件中断。完成交互打开中断。
  • 不能调用其它不可重入的函数。

 

 

 

本文地址:https://blog.csdn.net/p1279030826/article/details/107638728

相关标签: # FreeRTOS