μ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.保证数据的完整性

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

你可能感兴趣的:(嵌入式学习,操作系统,嵌入式)