`
小麦麦子
  • 浏览: 30648 次
文章分类
社区版块
存档分类
最新评论

Ucos资源与共享资源详解

阅读更多

本文和大家分享的主要是ucos中资源与共享资源的异同点,希望对大家学习ucos有所帮助。

  资源:

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

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

  共享资源:

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

  比如这里面有个变量,这个变量是全局变量,全局变量假设它是一个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,只不过在这里我们需要注意,对信号量它有两个专业的术语,一个叫做获取信号量,一个叫做释放信号量。也就是说,我们使用共享资源的时候,首先来获取这个信号量,获取到了以后,就使用共享资源,使用完毕以后,就把这个信号量释放。

 

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

分享到:
评论

相关推荐

    ucosII内核详解

    信号量用于保护共享资源,互斥锁确保同一时刻只有一个任务访问资源。消息队列用于任务间的数据传递,而事件标志组则支持复杂条件的同步。 5. **STM32移植**:STM32是意法半导体公司推出的基于ARM Cortex-M内核的微...

    ucos 内核详解解析12讲

    4. **同步与通信机制**:UCOS提供了信号量、消息队列、事件标志组和互斥锁等工具,使得任务之间可以安全地共享资源,实现同步和通信。 5. **时间管理**:UCOS的时间管理功能包括定时器和延时函数,可以用于设置周期...

    ucosII内核详解.rar

    3. **信号量管理**:UCOSII中的信号量用于同步任务和保护共享资源。OSQCreate创建信号量,OSQSend/Recv实现发送和接收,OSQFlush清空信号量,OSQDel删除信号量。 4. **邮箱管理**:邮箱是UCOSII中一种数据通信机制...

    ucos 代码详解源码以及中文注释

    - 提供信号量机制,允许任务间同步和互斥访问共享资源。 3. **消息邮箱管理** (`os_mbox.c`): - 用于发送和接收消息,提供了一种非阻塞的消息传递方式。 - 可用于实现简单的任务间通信。 4. **内存管理** (`os...

    ucos-ii 内核中文详解

    4. 信号量:信号量是UCOS-II中的同步机制,用于控制对共享资源的访问。它可以是二进制信号量(只能取0或1),也可以是计数信号量(可取非负整数)。 5. 消息队列:消息队列是任务间通信的重要手段,允许任务之间...

    ucosII.rar_site:www.pudn.com_ucos_ucosII 内核_ucosii内核详解

    信号量可用于控制对共享资源的访问数量,互斥量则保证同一时间只有一个任务访问特定资源。 5. **消息队列**:消息队列是UCOSII中实现任务间通信的重要机制,允许任务之间传递固定大小的数据块,实现异步通信。 6. ...

    ucos源码详解

    如果想自己动手写写操作系统的书籍,建议大家下一本叫做《自己动手写操作系统》的书籍,非常好,我暑期看了几章,觉得非常好,现在一直没时间看,推荐给大家,这个资料在我共享的资源里面也有,有书有源码,而且记得...

    ucos中的消息队列代码详解

    在 UCOS 操作系统中,消息队列是使用互斥信号量来保护共享资源的,互斥信号量是一个二值信号,它可以是任务以独占的方式使用共享资源。使用互斥信号量可能引起优先级反转的问题,例如:当有三个任务 A、B、C,任务 A...

    uCOS-II源代码详解

    5. **os_mutex.c**:互斥型信号量管理文件,用于保护共享资源的访问。 6. **os_q.c**:消息队列管理文件,支持多个任务间的数据传递。 #### 四、中文注解的重要性 由于uCOS-II的源代码最初是英文编写,对于非英语...

    uCOS-II常用的46个函数详解

    通常在某些关键操作(如修改全局变量或访问共享资源)期间调用此函数,以防止被其他任务打断。 #### 5. `Void OSSchedUnlock(void);` 与`OSSchedLock()`相对应,`OSSchedUnlock()`函数用于解锁uCOS-II的任务调度器...

    UCOSII操作系统

    2. **信号量**:用于同步任务或保护共享资源,防止竞态条件的发生。 3. **邮箱与消息队列**:提供任务间的异步通信,可以传递结构化数据。 4. **定时器**:支持周期性和一次性定时事件,可用于触发特定任务或操作。 ...

    ucos2官方2.84版

    这些机制使得任务间可以安全地共享资源,避免了数据竞争问题。 6. **中断处理**:中断服务是嵌入式系统中的重要组成部分,uCOS-II支持中断嵌套,确保中断服务的快速响应和系统稳定运行。 7. **可移植性**:uCOS-II...

    ucos-ii北航课件

    信号量用于控制资源的访问权限,消息队列则用于传递数据,互斥锁用于保护共享资源。 6. **中断服务** 中断是嵌入式系统中的重要特性,UCOS-II提供了中断处理机制,能在中断发生时快速响应,保证系统的实时性。 7....

    ucos课件,很详细的讲解

    它可以是二进制或计数型,前者只允许一个任务访问,后者可以控制多个任务共享资源。信号量在解决资源争抢和保护临界区等问题上发挥着重要作用。 6. **内存管理** UCOS的内存管理模块负责内存的分配和释放,它通常...

    uCOS-II.chm

    作为同步和互斥机制,信号量用于保护共享资源,防止多个任务同时访问。消息队列则提供了一种任务间通信的方式,允许任务发送和接收结构化的数据。 5. **事件标志组** 事件标志组是一种同步机制,允许任务等待一组...

Global site tag (gtag.js) - Google Analytics