嵌入式学习笔记 - freeRTOS动态创建任务时传入的任务句柄参数
FreeRTOS把任务句柄定位void类型指针:
typedef void * TaskHandle_t;
static TaskHandle_t AppTaskCreate_Handle = NULL;
以下为创建任务函数:
/* 创建AppTaskCreate任务 */
xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate, /* 任务入口函数 */
(const char* )"AppTaskCreate",/* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL,/* 任务入口函数参数 */
(UBaseType_t )1, /* 任务的优先级 */
(TaskHandle_t* )&AppTaskCreate_Handle);/* 任务控制块指针的地址 */
以下为调用函数实体:
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
const char * const pcName,
const uint16_t usStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
TaskHandle_t * const pxCreatedTask )
FreeRTOS在用动态方式创建任务时,最后一个参数传入的是任务句柄的指针的地址,也就是指针的指针,而被调用函数实体使用的是指针的地址,而不是这个指针。
以下是函数内部使用这个参数的具体部分,如果这个参数被赋值过,也是就是参数(这个参数是一个指针地址)里面有指针,也就是用户定义过这个指针,就进行赋值操作,否则无任何操作,后续程序也不能使用这个任务。
if( ( void * ) pxCreatedTask != NULL )
{
/* Pass the handle out in an anonymous way. The handle can be used to
change the created task's priority, delete the created task, etc.*/
*pxCreatedTask = ( TaskHandle_t ) pxNewTCB;
}
else
{
mtCOVERAGE_TEST_MARKER();
}