FreeRtos动态方法创建删除任务
利用函数xTaskCreate
/*任务创建函数*/
xTaskCreate( TaskFunction_t pxTaskCode,
const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
const configSTACK_DEPTH_TYPE usStackDepth,
void * const pvParameters,
UBaseType_t uxPriority,
TaskHandle_t * const pxCreatedTask );
/*任务函数*/
void NAME_OF_YOUR_Task()
{
//任务一般为死循环程序
}
其中
pxTaskCode 为任务函数名称
pcName 双引号加名称
configSTACK_DEPTH_TYPE usStackDepth 为堆栈大小
pvParameters 为参数
uxPriority 为优先级
pxCreatedTask 任务句柄
创建任务时要注意 利用强制类型转换来避免数据类型出错
xTaskCreate( (TaskFunction_t) pxTaskCode,
(const char *) pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
(uint16_t) usStackDepth,
(void * ) pvParameters,
(UBaseType_t) uxPriority,
(TaskHandle_t *) pxCreatedTask );
/*用一个开始任务来创建两个任务使PG1和PG8两个LED以不同频率闪烁*/
#define START_TASK_DEPTH 120
#define START_TASK_PRIO 1
#define TASK_1_DEPTH 120 //堆栈
#define TASK_1_PRIO 3 //优先级
#define TASK_2_DEPTH 120 //堆栈
#define TASK_2_PRIO 2 //优先级
TaskHandle_t START_TASK_Handle;
TaskHandle_t TASK_1_Handle;
TaskHandle_t TASK_2_Handle;
void Start_Task( void * pvParameters)
{
xTaskCreate( (TaskFunction_t) Task_1,
(const char *) "Task_1", /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
(uint16_t) TASK_1_DEPTH,
(void *) NULL,
(UBaseType_t) TASK_1_PRIO,
(TaskHandle_t *) &TASK_1_Handle );
xTaskCreate( (TaskFunction_t) Task_2,
(const char *) "Task_2", /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
(uint16_t) TASK_2_DEPTH,
(void *) NULL,
(UBaseType_t) TASK_2_PRIO,
(TaskHandle_t *) &TASK_2_Handle );
vTaskDelete(START_TASK_Handle); //NULL表示删除自身也可以
}
void Task_1( void * pvParameters)
{
while(1)
{
vTaskDelay(300);
GPIO_ResetBits(GPIOG,GPIO_Pin_1 );
vTaskDelay(300);
GPIO_SetBits(GPIOG,GPIO_Pin_1 );
}
}
void Task_2( void * pvParameters)
{
while(1)
{
vTaskDelay(100);
GPIO_ResetBits(GPIOG,GPIO_Pin_8 );
vTaskDelay(100);
GPIO_SetBits(GPIOG,GPIO_Pin_8 );
}
}