源自:http://www.FreeRTOS.org
文档名: USING THE FREERTOS REAL TIME KERNEL 中文: FREERTOS实时内核实用指南
翻译作者----》》》》》》》》》》》》》》》》》》》》》》》》》》
硬实时功能必须在给定的时间限制之内完成——如果无法做到即意味着整个系统的绝对失败。大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。
在 FreeRTOS 中,每个执行线程都被称为”任务”。在嵌入式社区中,对此并没有一个公允的术语,但我更喜欢用”任务”而不是”线程”,因为从以前的经验来看,线程具有更多的特定含义。
任务函数 任务是由 C 语言函数实现的。唯一特别的只是任务的函数原型,其必须返回 void, 而且带有一个 void 指针参数。
void ATaskFunction( void *pvParameters );
每个任务都是在自己权限范围内的一个小程序。其具有程序入口,通常会运行在一 个死循环中,也不会退出。
FreeRTOS 任务不允许以任何方式从实现函数中返回——它们绝不能有一 条”return”语句,也不能执行到函数末尾。如果一个任务不再需要,可以显式地将其删除。 一个任务函数可以用来创建若干个任务——创建出的任务均是独立的执行实例,拥有属于自己的栈空间,以及属于自己的自动变量(栈变量),即任务函数本身定义的变量。
任务中创建多个任务与独立创建多个任务的区别
包含式
/* Init task */ xTaskCreate(Main_task, (int8_t *)"Main", configMINIMAL_STACK_SIZE * 2, NULL,MAIN_TASK_PRIO, NULL);
/** * @brief Main task * @param pvParameters not used * @retval None */ void Main_task(void * pvParameters) { xTaskCreate(vTask1, (int8_t *)"Task1", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO, NULL);
xTaskCreate(vTask2, (int8_t *)"Task2", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO, NULL);
xTaskCreate(vTask3, (int8_t *)"Task3", configMINIMAL_STACK_SIZE, NULL, LED_TASK_PRIO, NULL);
for( ;; ) { vTaskDelete(NULL); } }
独立的
xTaskCreate( vTask1, /* 任务函数 */ "Task 1", /* 任务名 */ 500, /* stack大小,单位word,也就是4字节 */ NULL, /* 任务参数 */ 1, /* 任务优先级*/ NULL ); /* 任务句柄 */ xTaskCreate( vTask2, /* 任务函数 */ "Task 2", /* 任务名 */ 500, /* stack大小,单位word,也就是4字节 */ NULL, /* 任务参数 */ 2, /* 任务优先级*/ NULL ); /* 任务句柄 */ xTaskCreate( vTask3, /* 任务函数 */ "Task 3", /* 任务名 */ 500, /* stack大小,单位word,也就是4字节 */ NULL, /* 任务参数 */ 3, /* 任务优先级*/ &xHandleTask3 ); /* 任务句柄 */
