文档名: USING THE FREERTOS REAL TIME KERNEL 中文: FREERTOS实时内核实用指南
翻译作者----》》》》》》》》》》》》》》》》》》》》》》》》》》
硬实时功能必须在给定的时间限制之内完成——如果无法做到即意味着整个系统的绝对失败。大多数嵌入式系统不仅能满足硬实时要求,也能满足软实时要求。
在
任务函数
任务是由 C 语言函数实现的。唯一特别的只是任务的函数原型,其必须返回 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 ); /* 任务句柄 */