函数互斥(中断函数使用原则)

2025-05-07 13:19:33 函数指令 嘉兴
  1. 单片机C语言设计里说的可重入函数是什么?和不可重入函数的区别是什么
  2. 中断函数使用原则
  3. 一个函数可以既是无穷大量又是无穷小量吗

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

一、可重入函数

1)什么是可重入性?

函数互斥(中断函数使用原则)

可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入 函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。

2)可重入函数:

不为连续的调用持有静态数据。

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

函数互斥(中断函数使用原则)

使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。

如果必须访问全局变量,记住利用互斥信号量来保护全局变量。

绝不调用任何不可重入函数。

3)不可重入函数:

函数互斥(中断函数使用原则)

中断函数使用原则

1. 中断处理函数的返回值和形参

中断处理函数不能有返回值和形参,因为中断处理函数都是硬件调用(或者叫触发),没有程序给它传递参数,也没有程序接收它的返回值,其参数的传递通过全局变量的方式。

但是要注意,如果在中断服务函数中改变了供其他函数检测的全局变量的值,要使用volatile关键字定义该全局变量。因为主程序可能将该变量读取到寄存器中,以后每次只使用寄存器中的变量副本,这时候吐过不使用volatile关键字,会导致中断服务函数中修改该变量的操作被短路

2. 中断处理函数中进行浮点数运算

由于浮点运算一般都是由专门的硬件来完成的,硬件设备会牵扯到一些类似全局变量的东西(比如硬件端口,或者硬件设备本身存放的数据),如果浮点运算的过程被中断,而其他函数也可能使用浮点数运算,这就会破坏当前硬件设备中的数据。可以理解为浮点运算一般是不可重入的,因此不能在中断服务函数中使用浮点运算。

可以在满足精度的前提下,将浮点运算扩大若干倍,变成整型运算。

3. 中断处理函数中使用printf函数

这个原理跟上面的在中断服务函数中使用浮点数类似,因为printf函数使用硬件资源,而这些资源本身就应该互斥访问(在多线程和多进程中),而这些导致printf函数不可重入,不能在中断中使用。

另外像malloc,free这些函数会使用全局的内存分配表,因此也是不可重入的,不能在中断中使用。

一个函数可以既是无穷大量又是无穷小量吗

一个函数不能既是无穷大量又是无穷小量。根据定义,无穷大量是指当x趋于某个点或无穷时,函数值f(x)趋于无穷大的量,而无穷小量是指当x趋于某个点或无穷时,函数值f(x)趋于0的量。这两个概念是互斥的,因为一个函数不能同时满足这两个条件。
例如,考虑函数f(x)=1/x,当x趋于0时,f(x)趋于无穷大,而当x趋于无穷时,f(x)趋于0。这说明函数在某一特定范围内可以是无穷大量,但在另一范围内却变成无穷小量。
因此,一个函数不能同时是无穷大量和无穷小量。

无穷大的倒数等于无穷小,无穷小的倒数(当其不du等于0时,因为此时倒数才有意义,而无穷小量是可能取0的)是无穷大量。

无穷小和无穷大是从极限的角度考虑,指在n→某个点时,数列或函数取值大小,无穷小即趋于0,无穷大即趋于无穷。

扩展资料

无穷小量是数学分析中的一个概念,在经典的微积分或数学分析中,无穷小量通常以函数、序列等形式出现。无穷小量即以数0为极限的变量,无限接近于0。无穷小量是以0为极限的函数,而不同的无穷小量收敛于0的速度有快有慢。因此两个无穷小量之间又分为高阶无穷小 ,低阶无穷小,同阶无穷小,等价无穷小。

若自变量x无限接近x0(或|x|无限增大)时,函数值|f(x)|无限增大,则称f(x)为x→x0(或x→∞)时的无穷大量。例如f(x)=1/(x-1)^2是当x→1时的无穷大量,f(n)=n^2是当n→∞时的无穷大量。无穷大量的倒数是无穷小量。应该特别注意的是,无论多么大的常数都不是无穷大量。

到此,以上就是小编对于互斥的条件的问题就介绍到这了,希望介绍的3点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。

随机图文
    此处不必修改,程序自动调用!
  • 随机文章

  • 热门文章

  • 热评文章

sql语句自动生成(sql语句自动生成器)
2025-05-05  阅读(541)
  • B函数求解(函数b的求法)
    2025-05-05  阅读(456)
  • 周期函数,周函数的使用方法
    2025-05-05  阅读(578)
  • 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。

    语法

    REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' )

    参数

    SqlServer中REPLACE函数的使用,sql替换字符串函数

    ''string_replace1''

    待搜索的字符串表达式。string_replace1 可以是字符数据或二进制数据。

    ''string_replace2''

    待查找的字符串表达式。string_replace2 可以是字符数据或二进制数据。

    SqlServer中REPLACE函数的使用,sql替换字符串函数

    在SQL Server中,REPLACE函数用于替换字符串中出现的指定子字符串。它接受三个参数:原字符串,要被替换的子字符串和替换后的子字符串。

    该函数会查找原字符串中的所有匹配项,并将其替换为指定的字符串。如果原字符串中不存在要替换的子字符串,则不会发生任何更改。使用REPLACE函数可以轻松地进行字符串替换操作,例如将某些特定字符替换为其他字符或将一部分文本替换为其他文本。这在数据清洗和字符串处理中非常有用。

    sourceinsight怎么替换字符串

    12。replace('string" class="zf_thumb" width="48" height="48" title="SqlServer中REPLACE函数的使用,sql替换字符串函数" />

  • SqlServer中REPLACE函数的使用,sql替换字符串函数
    2025-05-06  阅读(527)
  • 一个已知的函数有几个原函数,任意原函数之间的差值是
    2025-05-05  阅读(449)
  • sql server新建表(sql如何新建数据库)
    2025-05-06  阅读(455)
  • 数行函数(数行数的函数)
    2025-05-06  阅读(458)
  • mysql数据库,指定到某一时间,它就自动执行相应的操作?sql语句该怎么写,定时执行sql语句设置
    2025-05-05  阅读(558)
  • 最新留言