嵌入式软件经常要同时完成若干任务,可以在无人干预的情况下应对所有的事件及异常,并且可以根据事件的轻重缓急自动保证最先完成最紧急的任务。
 
嵌入式软件由RTOS跟其上跑的应用部分软件组成,应用部分软件可简单看成一个个任务,每个任务可以对相关的外界产生的事件或是异常响应。而RTOS的核心功能就是管理各个任务,并建立起任务和外界事件的联系。
 
一个典型的任务示意如下:
 
void Task()
{
       for (;;)
       {
              //Do something initial;
              OSFlagPend();
              OSMboxPend();
              OSMutexPend();
              OSQPend();
              OSSempend();
 
              OSTaskPend(priority);
              OSTaskDel(priority);
              OSTimeDly();
             
              /* application code */
       }
}
 
首先任务应该包含一个无限循环,这个循环意在一直处理跟任务自己感兴趣的事件。可以看到上面的示意代码里有一串的Pend调用,这些Pend函数就是每个RTOS都会提供的,使用了这些Pend调用后RTOS就可以让这个任务与它感兴趣的事件建立起联系。如果有它感兴趣的事件发生,就会向下执行到application code来处理这个事件。处理完以后又进入循环回等待它感兴趣事件的状态,直到有它感兴趣的事件发生,然后又处理,如此周而复此。如果没有这个任务感兴趣事件发生会怎么呢?那RTOS就会挂起这个任务,去执行其它的任务处理其自身感兴趣的事件。如果没有任何事件发生会怎么样呢?这种情况下通常RTOS会运行一个自建的任务TaskIdle(), 这个任务什么事也不干,通常是给一个整数进行自加动作。