μC/OS-II 是嵌入式实时操作系统。μC/OS-II 可以并行处理多个任务,对于每个任务分配 CPU 时间片,可以让多个任务在不同时间间隔内轮流运行。在多任务实时系统中,任务的切换不仅与软件的设计有关,还与硬件的支持和操作系统的机制有关。
μC/OS-II 操作系统提供了两种任务切换方式:主动切换和被动切换。被动切换是系统自动触发的,在以下情况会触发任务切换:
1、任务时间片用完,当前任务需要把 CPU 让给下一个就绪任务继续运行;
2、所有的任务都处于等待操作的状态,系统切换到 idle 任务;
3、高优先级任务等待低优先级任务的某个事件,当事件发生时,操作系统会切换到等待的低优先级任务;
4、中断服务程序完成后,操作系统会查找优先级最高的任务运行。
UCOS-II 的内核不提供公共资源的访问和同步机制,这是避免任务切换调度的重要因素。资源的访问和同步需要使用信号量、互斥信号量、消息邮箱等资源访问机制来实现。
使用互斥信号量可以避免多个任务同时访问同一个共享资源。如果在同一个任务的代码中避免访问共享数据,将能降低系统调度的次数。如果代码区域执行的时间够短,可以避免任务切换,并提高系统整体的运行效率。
μC/OS-II 操作系统是基于优先级的操作系统,任务和中断服务程序都有自己的优先级。中断服务程序拥有最高的优先级,因为中断服务程序必须要及时响应外设等事件。任务的优先级决定了它们在并行运行时获取 CPU 时间片的顺序。优先级高的任务获得 CPU 时间片的概率也高。
如果一个中断服务程序执行的时间太长,未处理的其他中断就不能得到及时响应,影响了系统的实时性。因此,我们应该尽可能的减少中断服务程序的执行时间,并且在中断服务程序中尽量避免使用 UCOS-II API。
UCOS-II 中的任务切换策略取决于任务之间的优先级和任务状态。任务的优先级决定了执行的顺序以及获取 CPU 时间片的概率。为了提高 UCOS-II 系统的实时性并减少任务切换次数,需要尽量避免不必要的任务切换和减少中断服务程序的执行时间。