首页 > 代码库 > FreeRTOS学习笔记2

FreeRTOS学习笔记2

FreeRTOS函数原型解析:

portBASE_TYPE xTaskCreate(

              pdTASK_CODE pvTaskCode,

                        const signed portCHAR * const pcName,

                        unsigned portSHORT usStackDepth,

                        void *pvParameters,

                        unsigned portBASE_TYPE uxPriority,、

                        xTaskHandle *pxCreatedTask );

参数名:pvTaskCode 实现函数的指针,无实际意义,和函数名类似。

参数名:pcName  调试时描述任务的别名,系统不会调用, 通过定义常量 config_MAX_TASK_NAME_LEN 来定义任务名的最大长度。

参数名:usStackDepth 在任务创建时所分配的空间,需注意这个值是表示 字(WORD)而不是字节(byte),如果是32位的栈空间,

传入的值为100。那么分配的 空间为400字节(100*4byte)。栈深度乘以栈宽度的结果千万不能超过一个size_t 类型变量所能表达的最大值。

应用程序通过定义常量configMINIMAL_STACK_SIZE 来决定空闲 任务任用的栈空间大小。这个值一般是所有任务的最小建议值。

参数名:pvParameters

参数名:uxPriority 指定任务执行的优先级。优先级的取值范围可以从最低优先级0 到 最高优先级(configMAX_PRIORITIES – 1)。 configMAX_PRIORITIES 由用户定义的常量。一般设置为最大任务数量即可。过大会产生内存浪费

参数名:pxCreatedTask 用于传出任务的句柄。这个句柄将在API 调用中对 该创建出来的任务进行引用,比如改变任务优先级,或者删除任务。 如果应用程序中不会用到这个任务的句柄,则pxCreatedTask 可以 被设为NULL。

返回值:任务有两个可能的返回值 pdTRUE 用于表明任务创建成功 errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 由于内存堆空间不足,无法分配足够的空间保存任务结构数据和任务栈, 无法创建任务。

一个典型的任务函数:

void vTask1( void *pvParameters )

{   

  const char *pcTaskName = "Task 1 is running\r\n";   volatile unsigned long ul;  

   /* 和大多数任务一样,该任务处于一个死循环中。 */   

  for( ;; )

    {   

     /* Print out the name of this task. */    

    vPrintString( pcTaskName );    

    /* 延迟,以产生一个周期 */    

    for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )    

      {      

        /* 这个空循环是最原始的延迟实现方式。在循环中不做任何事情。后面的示例程序将采用      delay/sleep函数代替这个原始空循环。 */    

      }

    }

}

FreeRTOS学习笔记2