freeRTOS 一步步学习(一)

    xiaoxiao2021-12-14  21

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

    转载请注明原文地址: https://ju.6miu.com/read-970291.html

    最新回复(0)