UCOS多个任务访问共享资源的方法

一、信号量

 1.定义信号量

OS_SEM	MY_SEM;		//定义一个信号量,用于访问共享资源

2.使用OSSemCreate()创建信号量

//创建一个信号量
	OSSemCreate ((OS_SEM*	)&MY_SEM,
                 (CPU_CHAR*	)"MY_SEM",
                 (OS_SEM_CTR)1,		
                 (OS_ERR*	)&err);

3.程序运行前请求信号量,运行后发送信号量(任务调度函数在OSSemPend和OSSemPost后面)

OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); 

//程序代码

OSSemPost(&MY_SEM,OS_OPT_POST_1,&err);		
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);   //	OSTimeDlyHMSM之类的任务调度函数

二、任务调度器上锁

1.定义错误返回变量

OS_ERR err;

2.程序运行前任务调度器上锁,运行后任务调度器解锁(任务调度函数在OSSchedLock和OSSchedUnlock后面)

OSSchedLock(&err);//任务调度器上锁

//程序代码

OSSchedUnlock(&err);//任务调度器解锁
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);   //任务调度函数

三、关闭中断(对时间影响严重)

1.使用CPU_SR_ALLOC (为CPU_CRITICAL_ENTER()和CPU_CRITICAL_EXIT()申请一个变量)

CPU_SR_ALLOC();

2.程序运行前关中断,运行后开中断(任务调度函数在OSSchedLock和OSSchedUnlock后面)

OS_CRITICAL_ENTER();//关中断

//程序代码

OS_CRITICAL_EXIT();//开中断
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);   //任务调度函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值