μC/OS-ii的资源同步

被两个及以上并发程序单元(任务或者ISR)访问的资源称为共享资源,共享资源不一定是全局资源(有的全局变量只被一个任务调用)。

具体可以采用以下方法:

1.关中断

OS_ENTER_CRITICAL();//关中断
........
OS_EXIT_CRITICAL();//退出中断

中断关闭后,系统失去对有所事件的反应能力,不可能进行任务切换,保证对共享资源的独占访问。

2.关调度

OS_SchedLock();//关调度
........
OS_Schedunlock();//开调度

与该共享资源无关的任务也受到牵连,即使他们的优先级足够高、ISR触发也无法获得CPU使用权。

3. 互斥信号量

INT8U err;
OS_EVENT *Sem;//创建互斥信号量,继承优先级为2.继承优先级必须高于所有需要访问这个共享资源的任务的优先级,且继承优先级不能和其他任务的优先级相同。
void task(void * pdata)
{
........
OSMutexPend(Sem,0,&err);获取互斥信号量Sem

........
OSMutexPost(Sem);//释放互斥信号量Sem

}

4.保证数据的完整性

将共享资源备份一份,再进行处理。提高系统的实时性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值