ucosIII 共享资源(信号量、互斥信号量)

共享资源:

变量(静态或全局变量)、数据结构体、RAM表格、I/O设备等。OS在使用一些资源时候,例如IO设备打印机,当任务1在使用打印机时候必须保证资源独享,避免其他任务修改打印内容导致出错,因此需要有资源共享机制。

一般推荐使用互斥信号量对共享资源实现保护

独占资源和创建临界区方法表

方法 优点 何时使用
开关中断 能很快地结束访问共享资源,不推荐,会导致中断延迟 访问共享资源时间小于中断关闭时间
锁调度器 不推荐,有悖ucos任务切换 访问共享资源时间大于中断关闭时间,给调度器上锁时间短
信号量 信号量可能会造出优先级反转。然而,信号量方式的执行时间少于互斥信号量 方式 所有的任务可以无限期等待对共享资源的访问
互斥信号量 推荐使用这种方法访问共享资源,有内置的优先级,时间较久 当任务要访问的共享资源有截止时间

只有开关中断才能任务和中断程序共享资源。其它只能用于任务相关的资源共享。

关/开中断

和CPU 相关的操作,其相关代码被放在与CPU相关的文件中(见CPU.H)。uC/OS-III 中与CPU相关的模块叫做uC/CPU。每种架构的CPU 都需要设置相适应的uC/CPU 文件。

API 注释
CPU_SR_ALLOC() 分配存储空间存储当前cpu的中断状态
CPU_CRITICAL_ENTER() 关全局中断
CPU_CRITICAL_EXIT() 开全局中断,恢复局部变量中存储的cpu中断状态

只有这种方法才能任务和中断程序共享资源。只要关中断的时间不比系统本身的关中断时间长,就不会影响到系统的中断延时。

锁调度器

如果任务不需要和ISR 共享资源,就可以通过锁调度器来访问共享资源。
实际上就是禁止任务调度已达到资源的独占

API 注释
OSSchedLock() 锁调度
OSSchedUnlock()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值