RTOS也称为多线程/任务系统,相比前后台系统,多线程/任务系统的事件触发是在中断中完成的,但事件的处理是在线程/任务中完成的。在多线程/任务系统中,线程/任务跟中断一样,也具有优先级,当一个紧急的事件/信号在中断被触发之后,事件/信号对应的线程/任务的优先级足够高,就会立马得到响应。相比前后台系统,多线程/任务系统的实时性更高。并且,当所有的线程/任务处于等待状态时,系统会进入idle线程/任务,在idle线程/任务里面可以让CPU进入stop、standy等低功耗模式,降低系统功耗。
相应的伪代码如下:
os_event event1;
os_event event2;
int main(void)
{
HardWareInit(); /* 硬件相关初始化 */
RTOSInit(); /* OS 初始化 */
RTOSStart(); /* OS 启动,开始多线程调度,不再返回 */
}
void ISR1(void)
{
os_set_event(event1); /* 触发event1事件 */
}
void ISR2(void)
{
os_set_event(event2); /* 触发event2事件 */
}
void Task1(void) //优先级1
{
while(1)
{
os_event_wait(event1);
DoSomething1();
}
}
void Task2(void) //优先级2
{
while(1)
{
os_event_wait(event2);
DoSomething2();
}
}
void Task_idle(void)//优先级最低
{
cpu_stop();
}
在多线程/任务系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,称之为线程/任务。每个线程/任务都是独立的,互不干扰的,且具备自身的优先级,由操作系统进行调度管理。
对于一些复杂的需求,加入操作系统反而使我们的编程变得简单了。整个系统随之带来的额外开销是操作系统占据的FLASH 和 RAM。如今单片机的 FLASH 和 RAM 是越来越大,完全能够满足RTOS那点开销。
RTOS因为有了任务优先级、任务调度、事件/信号量等管理机制,
1. 能更有效区处理紧急任务
2. 能在CPU没有事情需要处理时,进入空闲任务方便低功耗管理
|