任务的创建
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头文件里面去,
开始任务:创建其他应用任务和信号量,队列等内核对象
,
,
,