freeRTOS 一步步学习(一)

来源:互联网 发布:淘宝3c证书编号 编辑:程序博客网 时间:2024/05/12 09:07

源自: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 );     /* 任务句柄  */

0 0