一、信号量
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); //任务调度函数