2016 - 2024

感恩一路有你

不可重入函数列表 C语言可重入函数应该注意哪些事项?

浏览量:2042 时间:2021-03-13 11:05:07 作者:admin

C语言可重入函数应该注意哪些事项?

你好,我是小徐艾。我很高兴为你回答。再入函数又称为再入函数,是一种不能直接或间接调用自身的函数。重入函数可以递归调用,包括中断函数在内的任何函数都可以随时调用。在C51中编译时,重入函数使用模拟堆栈。函数描述:函数名(形式参数表)可重入注:1。重入函数不能传递位类型参数。2PL/M51兼容函数不能具有可重入性,因此不能调用重入函数。三。编译时:模拟的堆栈区域由reentry函数创建。在小模式下,模拟堆栈区域位于IDA区域;在紧凑模式下,模拟堆栈区域位于pdata区域;在大模式下,模拟堆栈区域位于扩展数据区域。4在同一个程序中可以定义和使用不同存储模式的再入函数。任何模式的重入函数都不能调用不同内存模式函数的重入函数,但可以调用普通函数。5实际参数可以传递给一个间接调用的重入函数。没有重入属性的间接调用函数不能包含调用参数。更专业的科学知识,请关注我。如果你喜欢我的回答,也请给我表扬或转发,你的鼓励是支持我写下来的动力,谢谢。

什么是C语言的可重入函数?怎么使用?

字面意思是您可以重复输入。可重入性是多任务系统中的一个概念,它意味着该函数在运行到任何位置时都可以被中断以执行其他任务,并且返回时不会出错。当我们同时处理多个任务时,为什么会有这个概念呢。我举个例子。我们定义了一个名为func的函数和两个线程。两个线程都调用func。情况就是这样。当线程1执行func时,线程2开始执行func。结果,两个线程都执行了两次func。在正常情况下,两个线程都可以成功执行,并且没有错误。我们认为func是一个可重入函数。但是,如果func使用一个公共资源,例如读取同一个文件或访问同一个全局变量,则当两个线程访问公共资源时,会导致冲突。这样的函数是不可重入的。

单片机C语言设计里说的可重入函数是什么?和不可重入函数的区别是什么?

1、可重入函数

1)什么是可重入函数?

可重入函数可由多个任务同时使用,无需担心数据错误。相反,非可重入函数不能由多个任务共享,除非它们相互排斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以随时中断,以后继续运行而不会丢失数据。可重入函数要么使用局部变量,要么在使用全局变量时保护其数据。

2)可重入函数:

不保留连续调用的静态数据。

不返回指向静态数据的指针;所有数据由函数的调用者提供。

通过使用本地数据或制作全局数据的本地副本来保护全局数据。

如果必须访问全局变量,请记住使用互斥信号量保护它们。

切勿调用任何不可重入函数。

3)不可重入函数:

函数中使用静态变量,无论是全局变量还是局部变量。

函数返回一个静态变量。在函数中调用不可重入的函数。

在函数体中使用静态数据结构;

在函数体中调用malloc()或free()函数;

在函数体中调用其他标准I/O函数。

函数是单例中的成员函数,它使用的成员变量不是由线程独立存储的。

一般来说,如果一个函数在重入条件下使用了不受保护的共享资源,那么它是不可重入的

看了下面兄弟的回复,我们只能说它是对的一半。

真正的原因是abi(应用程序二进制接口)。

ABI定义了与系统交互的细节,如数据类型、大小和对齐方式;调用约定(控制函数的参数传递方向、可变长度处理、堆栈清理体以及如何接受返回值等);系统调用的编码以及应用程序如何对操作系统进行系统调用系统;以及采用完整ABI操作系统基本格式、程序库等的第二代对象文件。完整的ABI,如英特尔二进制兼容标准(IBCs),允许支持它的操作系统上的程序在支持此ABI的其他操作系统上运行,而无需修改。

其他ABI标准化细节包括C名称修改和同一平台上编译器之间的调用约定,但不包括跨平台兼容性。

至于下面兄弟提到的eax save返回值,这只是X86的ABI规范。在其他CPU架构平台(如PowerPC)中,实现是不同的!--在PowerPC中,返回值存储在R3寄存器中

不可重入函数列表 不可重入函数汇总 什么是可重入函数

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。