创建一个总任务,由总任务创建其他任务
c
// led 任务
void led1_task(void *arg) {
while (1) {
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);
vTaskDelay(300);
printf("in");
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
vTaskDelay(300);
printf("out");
}
}
// 创建任务句柄
// 统一任务管理
static TaskHandle_t app_task_handle = NULL;
// 其他任务句柄
static TaskHandle_t led1_task_handle = NULL;
static void app_task_create(void) {
BaseType_t x_return = pdPASS;
// 创建其他任务
x_return = xTaskCreate((TaskFunction_t )led1_task, /* 任务入口函数 */
(const char* )"LED1_Task",/* 任务名字 */
(uint16_t )512, /* 任务栈大小 */
(void* )NULL, /* 任务入口函数参数 */
(UBaseType_t )2, /* 任务的优先级 */
(TaskHandle_t* )&led1_task_handle);
if(pdPASS == x_return) {
printf("led task ok\r\n");
}
// 全部任务创建成功后删除总任务
vTaskDelete(app_task_handle);
taskEXIT_CRITICAL(); //退出临界区
}
int main(void) {
BaseType_t x_return = pdPASS;
x_return = xTaskCreate((TaskFunction_t) app_task_create, /* 任务入口函数 */
(const char *) "create_test",/* 任务名字 */
(uint16_t) 512, /* 任务栈大小 */
(void *) NULL,/* 任务入口函数参数 */
(UBaseType_t) 1, /* 任务的优先级 */
(TaskHandle_t *) &app_task_handle);/* 任务控制块指针 */
if (pdPASS == x_return) {
vTaskStartScheduler();
} else {
printf("test fail\r\n");
return -1;
}
}
任务挂起
c
void vTaskSuspend(TaskHandle_t xTaskToSuspend);
任务恢复
c
void vTaskResume(TaskHandle_t xTaskToResume);
中断服务中恢复任务
c
void vTaskResumeFromISR(TaskHandle_t xTaskToResume);
全部挂起与恢复
c
vTaskSuspendAll();
xTaskResumeAll();
获取任务当前状态。
eTaskGetState
函数 eTaskState eTaskGetState( TaskHandle_t xTask )
参数 xTask: 任务句柄
返回值: 以下值
c
/* Task states returned by eTaskGetState. */
typedef enum
{
eRunning = 0, /* A task is querying the state of itself, so must be running. */
eReady, /* The task being queried is in a read or pending ready list. */
eBlocked, /* The task being queried is in the Blocked state. */
eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
eDeleted, /* The task being queried has been deleted, but its TCB has not yet been freed. */
eInvalid /* Used as an 'invalid state' value. */
} eTaskState;