嵌入式软件经常要同时完成若干任务,可以在无人干预的情况下应对所有的事件及异常,并且可以根据事件的轻重缓急自动保证最先完成最紧急的任务。
嵌入式软件由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(), 这个任务什么事也不干,通常是给一个整数进行自加动作。
转载于:https://blog.51cto.com/alexto/122718