Skip to content

创建一个总任务,由总任务创建其他任务

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;

Released under the GPL License.