1.我们使用8位单片机,比如AVR,最常用的做法是在main函数里使用while(1)循环, 状态机以及中断服务函数来实现应用程序. 这样的系统不涉及到任务的概念或者说while(1)里每一个函数调用就是一个任务,叫做前后台程序,中断服务函数作为前台程序,while(1)循环作为后台程序.这种做法的好处是实现简单,代码占用小,坏处是实时性差.下图是前后台程序的示意图.
2.我们还有另外一种选择,就是使用操作系统,比如FreeRTOS. 为了解决上面那种裸机开发的弊端--实时性差,我们通过创建多个任务,将紧急的任务优先级设置相对高一点,不紧急的任务优先级设置相对低一点, 高优先级的任务可以从低优先级任务手中抢占CPU的使用权,保证紧急任务能够优先运行.下图是抢占式操作系统中任务的调度示意图.
3.FreeRTOS的4种任务状态切换如下图所示,且任务必定处于图中所示状态中的一种. 任何时刻只有一个任务处于Running状态.
4.FreeRTOS任务的优先级可以为0~(configMAX_PRIORITIES-1)范围内的任何一个值. 数字越小,优先级越低,0是最低优先级;数字越大,优先级越高,configMAX_PRIORITIES-1是最高优先级.空闲任务的优先级为0.
5.FreeRTOS任务函数原型如下:
- void ATaskFunction( void *pvParameters );
FreeRTOS任务函数的典型结构如下. 任务函数不能返回,要么是一个无限循环,要么在函数退出之前执行vTaskDelete( NULL );.
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|