使用Ucosii操作系统编写应用程序时,会经常使用到全局变量等共享资源。若在使用时,如对全局变量的同时的读写操作,可能会造成程序的崩溃,故在使用全局变量时,要对其进行锁或互斥处理。另,如果函数可以进行修改,则可通过函数的可重入性,即传形参使用局部变量,而避免使用全局变量。
共享资源处理简介:
(1)关中断/开中断 关、开中断是独占共享资源最简单也是最快捷的方法。μC/OS-Ⅲ访问系统内部的变量和数据结构时,绝大部分使用的就是这种方法,一次来确保操作的“原子性”。这种方法也是任务和中断服务程序共享变量或数据结构的唯一方法。 使用这种方法时,只要关中断时间比系统本身关中断时间短(或相同),就不会增加中断延迟。然而尽管如此,仍要尽量避免关中断,因为这将影响到系统对实时事件的响应能力。
(2)给调度器上锁/解锁 如果任务不需要和中断服务程序共享变量或数据结构,那么可以通过给调度器上锁的方法来访问共享资源。需要注意的是,一旦给调度器上锁,即使有更高优先级的任务就绪了,也要等当前任务执行完毕,解锁后才能切换到其他任务。也就是说一旦某个任务给调度器上锁,那这个任务就成为了优先级最高的任务。
(3)信号量 &