学习笔记rtos的任务创建

任务的创建

1,任务需要RAM来保存与任务有关的状态信息(任务控制块)

2,需要一定的RAM来作为任务堆栈


,xTaskCreate()就会从FreeRTOS的堆中分配,必须提供内存管理文件

,默认使用heap_4。c


3宏configSUPPORT_DYNAMIC_ALLOCATION必须为1


4函数xTaskCreateStatic()创建的话这些RAM就需要用户来提供了

,configSUPPORT_STATIC_ALLOCATION设置为1


5任务调度器启动前还是启动后,都可以创建任务

,最常用的一个

BaseType_t xTaskCreate (, TaskFunction_t pxTaskCode,

,,,,,,,,,,,,,const char * const pcName,

,,,,,,,,,,,,,const uint16_t usStackDepth,

,,,,,,,,,,,,,void * const pvParameters,

,,,,,,,,,,,,,UBaseType_t uxPriority,

,,,,,,,,,,,,,TaskHandle_t * const pxCreatedTask)

pxCreatedTask任务句柄,就是任务的任务堆栈,其他API可能会用到


,返回值是反映任务创建成功或出错码

,,,,,pdPASS:任务创建成功。


6不常用

TaskHandle_t xTaskCreateStatic (TaskFunction_t pxTaskCode,

,,,,,,,,,,,,,,,,const char * const pcName,

,,,,,,,,,,,,,,,,const uint32_t ulStackDepth,

,,,,,,,,,,,,,,,,void * const pvParameters,

,,,,,,,,,,,,,,,,UBaseType_t uxPriority,

,,,,,,,,,,,,,,,,StackType_t * const puxStackBuffer,

,,,,,,,,,,,,,,,,StaticTask_t * const pxTaskBuffer)

, pxTaskBuffer:,任务控制块。

,返回值:空:,任务创建失败

,,,,,其他值:任务创建成功,返回任务的任务句柄。


7 vTaskDelete (TaskHandle_t xTaskToDelete)

,xTaskToDelete:要删除的任务的任务句柄。

,可以使用零做参数,删除任务本身


8,关键实验(学习动态创建):

,,

,任务创建:

# define START_TASK_PRIO, 1,//任务优先级,

# define START_STK_SIZE 128//任务堆栈大小

TaskHandle_t StartTask_Handler;//任务句柄,

空白start_task (void * pvParameters);//任务函数,,


xTaskCreate (start_task (TaskFunction_t),//任务函数,

,,(const char *)“start_task”,,,//任务名称

,,,,,,(uint16_t) START_STK_SIZE,,,//任务堆栈大小

,,,,,,(void *)空,,,,,,,,,,//传递给任务函数的参数

,,,,,,(UBaseType_t) START_TASK_PRIO//任务优先级

,,,,,,(TaskHandle_t *), StartTask_Handler);//任务句柄


vTaskStartScheduler ();//开启任务调度,


开始任务:

, taskENTER_CRITICAL ();//进入临界区

,//创建TASK1任务

,…

,//创建TASK2任务

, vTaskDelete (StartTask_Handler);//删除开始任务,

, taskEXIT_CRITICAL ();//退出临界区


任务堆栈,任务句柄,任务函数声明等,这样方便修改。这些东

西可以放到一个。h头文件里面去,


开始任务:创建其他应用任务和信号量,队列等内核对象

,

,

,




























学习笔记rtos的任务创建