最新Ucos系统常用的专业术语

所谓代码的临界段

  指处理时不可分割的代码。一旦这段代码开始执行,不允许中断的打入。

  在进入临界段代码之前,需要关中断,执行完临界段代码,开中断。

  学习过硬件操作系统的人都知道,我们在做纬度测量的时候,经常会用到DS18B20这样的一个芯片,这个芯片是一个单组件协议,我们都知道DS18B20对时序的要求非常严格。我们通常是把它的DQ数据线拉高,拉高以后延时,比如说延时两毫秒,然后再把DQ拉低,在这三步执行的过程中,是不允许中断打人的,为什么呢?

  因为它对这个时序的要求非常高,比如这个两毫秒是不能超过两毫秒的,安如果在这个地方被中断打入了,那中断执行的时间可能会比较长,会大于两毫秒,这样的话,这个DQ的数据线就变成了一个高电频,一个低电频,但是这个高电频可能就不是两毫秒了,可能会变成10毫秒,那这样的话,这协议就出问题了。

  为了确保我们代码在执行时,不被中断,那么我们该怎么办呢?那很简单,在执行这个代码临界段的时候关中断,这个代码临界段的执行完的时候开中断。

资源和共享资源

资源:

  任何为任务所占用的实体。如:打印机,键盘,显示器等。另外资源也可以是一个变量,一个结构或者一个数组。

  所以说我们操作系统中的资源是广义的资源,任何为任务所服务的东西,我们都被称为资源。

共享资源:

  被一个以上的任务使用的资源。

  比如这里面有个变量,这个变量是全局变量,全局变量假设它是一个LEDFlag的状态,在一个LED中,我们要对这个LEDFlag进行修改,或者说做使用,而另外一个按键当中,我们也要用到LEDFlag,那这样的话,这一个变量被两个任务使用,首先这个变量是个资源,接下来这个资源,被两个任务使用,这样的资源就被称为共享资源。

  我们子啊使用共享资源的时候,必须使用一些手段来保证共享资源不出问题。什么意思呢?假设LED中刚刚把这个LEDFlag修改为1,然后在按键中,又把它修改为0了,就是在任务执行到LED中把这个LEDFlag修改为1,接下来来判断这个状态。但是在这个之前,按键刚把它修改为0了,那这个时候,我们来看就出问题了,我们把它改为1,这个时候,判断我们应该是1,但是实际上由于按键这个任务的作用,它已经变成了0,所以关于共享资源的访问,我们必须满足一个条件叫做互斥。

  对共享资源的访问,必须满足互斥:(独占)

满足互斥的方法:

1、关中断和开中断。

  在使用这个全局变量或者共享资源之前呢,我们首先把这个中断给关掉,当共享资源使用完毕以后,我们再把这个中断给打开就行了

2、使用测试并置位指令。

  假设还是刚刚一个LED灯的任务,还有一个按键任务,都会使用到一个共享资源叫做LEDFlag,那这个时候我们使用一个测试并置位,我们首先再加一个变量bit,我们把变量bit初始化为0,当LED任务要使用LEDFlag的时候,我先判断bit是否等于0,如果bit等于0,我们就把bit置成1,如果bit等于1的话,就表明我们这个LED正在使用,安接下来就可以使用LEDFlag了,使用完毕后,我们再把bit置成0,这样的话每个任务在使用LEDFlag之前,首先判断bit的状态,判断完毕之后,如果能使用,就把bit置成1,使用完共享资源以后,再把bit置成0,这个方法就是测试并置位指令。我们发现,这样一个测试并置位指令就很好的避免了我们这个共享资源的访问问题。

3、任务禁止切换,使用,允许任务切换。

  因为不被任务切换,那么这个时候,我们就不会被别的任务所打断,那这个时候我们就可以使用这个共享资源,使用完毕之后,接下来开启任务的切换功能就行了。

4、使用信号量。

  它和我们的使用测试并置位指令这条命令是差不多的,也就是说,在我们使用这个共享资源之前首先开启一个信号量。我们用这个信号量来约束共享资源的访问,怎么办呢?首先还是这个信号量,假设这个共享资源正在访问的时候,我们把这个信号量置为1,接下来,我们访问共享资源,访问后,再把这个信号量变成0,只不过在这里我们需要注意,对信号量它有两个专业的术语,一个叫做获取信号量,一个叫做释放信号量。也就是说,我们使用共享资源的时候,首先来获取这个信号量,获取到了以后,就使用共享资源,使用完毕以后,就把这个信号量释放。

死锁

  死锁也称为抱死。指2个任务无限期的互相等待对方控制的资源。

  我们刚刚说有一个LEDFlag这个共享资源,LED和按键这个任务都在使用它,假设我们这里还有一个keyFlag,也就是说,按键也有一个共享资源,如果出现这样的情况,我们来看一下,假设LED这个任务在进行,在运行的过程中,它需要等待keyFlag这个共享资源,但是keyFlag这个资源被按键使用着,这个时候,LED灯就被挂起了,它要去等待这个资源,但是这个资源被按键使用,那它被挂起以后,按键就开始运行。假设运行到某个地方,按键要等待LEDFlag这个资源,但是这个资源又被LED使用着,那这个时候就出现了一个问题,LED等待按键的资源,按键等待LED的资源,那这个时候,最终这两个任务就被死死的困死,你等待我的,我等待你的,但是谁也等待不了谁,这样的现象就被称为死锁。


原文链接:http://www.maiziedu.com/wiki/iot/ucosterm/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值