可重入函数(转载)

可重入函数

 在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。不可重入函数在实时系统设计中被视为不安全函数。


 满足下列条件的函数多数是不可重入的:

(1)函数体内使用了静态的数据结构;

(2)函数体内调用了malloc()或者free()函数;

(3)函数体内调用了标准I/O函数。

如何写出可重入的函数?在函数体内不访问那些全局变量,不使用静态局部变量,坚持只使用缺省态(auto)局部变量,写出的函数就将是可重入的。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。或者调用该函数前关中断,调用后再开中断。

可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断,一段时间以后又可以运行,而相应的数据不会丢失。可重入函数或者只使用局部变量,即保存在CPU寄存器中或堆栈中;或者使用全局变量,则要对全局变量予以保护。

说法2:

一个可重入的函数简单来说,就是:可以被中断的函数。就是说,你可以在这个函数执行的任何时候中断他的运行,在任务调度下去执行另外一段代 码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等等,所以他如果被中断的话,可能出现问题,所以这类函数是 不能运行在多任务环境下的。

基本上下面的函数是不可重入的
(1)函数体内使用了静态的数据结构;

(2)函数体内调用了malloc()或者free()函数;

(3)函数体内调用了标准I/O函数。

把一个不可重入函数变成可重入的唯一方法是用可重入规则来重写他。
其实很简单,只要遵守了几条很容易理解的规则,那么写出来的函数就是可重入的。

第一,不要使用全局变量。因为别的代码很可能覆盖这些变量值。

第二,在和硬件发生交互的时候,切记执行类似disinterrupt()之类的操作,就是关闭硬件中断。完成交互记得打开中断,在有些系列上,这叫做“进入/退出核心”或者用OS_ENTER_KERNAL/OS_EXIT_KERNAL来描述。//这是临界区保护

第三,不能调用任何不可重入的函数。

第四,谨慎使用堆栈。最好先在使用前先OS_ENTER_KERNAL。

还有一些规则,都是很好理解的,总之,时刻记住一句话:保证中断是安全的!

转载于:https://www.cnblogs.com/UniMilky/p/7476119.html

jQuery 是一个非常流行的 JavaScript 库,它提供了许多易于使用的属性和函数,以下是常用的属性和函数: 属性: - `text()`:获取或设置元素的文本内容。 - `html()`:获取或设置元素的 HTML 内容。 - `val()`:获取或设置表单元素的值。 - `attr()`:获取或设置元素的属性。 - `prop()`:获取或设置元素的属性,比如 `checked`、`disabled` 等。 - `css()`:获取或设置元素的 CSS 样式。 - `width()`:获取或设置元素的宽度。 - `height()`:获取或设置元素的高度。 - `offset()`:获取元素相对于文档的位置。 - `position()`:获取元素相对于父元素的位置。 函数: - `$(selector)`:选择器,选择一个或多个元素。 - `$(selector).each(function(index, element))`:遍历一个或多个元素,并对每个元素执行一个函数。 - `$(selector).on(event, handler)`:为一个或多个元素绑定事件处理程序。 - `$(selector).off(event, handler)`:移除一个或多个元素的事件处理程序。 - `$(selector).addClass(class)`:为一个或多个元素添加一个或多个类。 - `$(selector).removeClass(class)`:从一个或多个元素中删除一个或多个类。 - `$(selector).toggleClass(class)`:在一个或多个元素中切换一个或多个类。 - `$(selector).fadeIn()`:淡入一个或多个元素。 - `$(selector).fadeOut()`:淡出一个或多个元素。 - `$(selector).slideDown()`:向下滑动一个或多个元素。 - `$(selector).slideUp()`:向上滑动一个或多个元素。 - `$.ajax(options)`:执行异步 HTTP(Ajax)请求。 以上是 jQuery 常用的属性和函数,当然还有很多其他的属性和函数可以使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值