嵌入式系统作业
互斥(Mutual Exclusion)互斥是用来控制多任务对共享数据进行串行访问
的同步机制。在多任务应用中,当两个或多个任务同时访问共享数据时,可能
会造成数据破坏。互斥使它们能串行地访问数据,从而达到保护数据的目的。
实现资源互斥访问的方法很多,不同之处仅在于互斥的范围和程度,互斥的本
质是为了有序地利用资源,与共享资源打交道时,使之满足互斥条件最一般的
方法有:关中断、使用测试并置位指令、禁止做任务切换、利用信号量。
1 关中断
优点:访问共享资源最简单的方法是关中断: 一个任务在对共享资源进行
访问前将中断关闭, 然后执行访问共享资源的关键段落代码, 访问共享资源结束
后再打开中断。如果在参入访问共享资源的并发程序单元中包括ISR(中断服务
程序)时, 任务级程序单元只能用关中断的措施来访问共享资源。中断被关闭后,
系统失去了对所有事件的反映能力, 不可能进行任务的切换, 从而保证了共享资
源的独占式访问。
缺点:由于关中断延迟了对中断的响应时间, 直接影响了系统的实时性, 因
此一般用于对简单共享资源的短暂访问。因此在上锁期间,它可能造成系统对
外部事件反应迟钝。这对于大多数实时系统而言,系统的实时性也就得不到保
证,因而不适合作为一种通用的互斥方法。然而当涉及到任务和中断服务程序
共享数据时,中断上锁又是唯一的方法。但是在任何情况下,应该使中断上锁
时间尽量短,这也是所有实时系统的基本要求。
关中断方法实现互斥程序:
void Function (void){
关中断;
处理共享资源;
开中断;
}
开中断程序:
Disable interrupts; /*关中断*/
Access the resource (read/write from/to variables); /*读/写变量*/
Reenable interrupts; /*重新允许中断*/
μC/OS-Ⅱ 在处理内部变量和数据结构时就是使用的这种方法,即使不是全
部,也 是绝大 部分 。 它提 供 了关 中 断(OS_ENTER_ CRITICAL()) 和开中 断
(OS_EXIT_CRITICAL())两个宏调用,以方便用户利用 C 代码开关中断。
利用 μC/OS-Ⅱ 宏调用关中断和开中断的程序:
void Function(void){
OS_ENTER_CRITICAL(); //宏调用,关中断
处理共享数据;
OS_EXIT_CRITICAL(); //宏调用,开中断
}
关中断这种互斥方法是在中断服务子程序中处理共享变量或共享数据结构
评论0
最新资源