【FreeRTOS】任务及相关常用API函数

目录

一、任务状态

1、就绪态

2、运行态

3、阻塞态

4、挂起态

状态间转换图示

二、常用任务函数

1、创建任务

(1)动态创建

(2)静态创建

2、任务删除

3、任务挂起

(1)挂起指定任务

(2)挂起全部任务

4、解除任务挂起

三、其他任务相关API函数

四、内核控制函数


一、任务状态

        在FreeRTOS系统中,每个任务都在多种任务状态中来回切换。

1、就绪态

        处于就绪态的任务以及具备执行条件,等待任务调度器调度即可执行。新创建的任务会初始化为就绪态。

2、运行态

        任务正在运行,正在运行的任务永远是所有就绪态任务中优先级最高的。同一时刻只有一个任务处于运行态。

3、阻塞态

        如果一个任务正在等待某个信号或外部事件那就说它处于阻塞态,阻塞态任务不在就绪列表中。例如调用了延迟函数vTaskDelay()时,那么该任务就会进入阻塞态,不再占用处理器,延迟结束再回到就绪态。

4、挂起态

        处于挂起态的任务对调度器是不可见的,也就是说挂起态任务不会得到执行。将一个任务挂起就调用函数vTaskSuspend();解除挂起调用vTaskResume()和vTaskResumeFromISR(),其中vTaskResumeFromISR()是在中断中调用。

状态间转换图示

二、常用任务函数

1、创建任务

(1)动态创建

xTaskCreate();

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,                 //任务函数
                        const char * const pcName,                 //任务名字(字符串类形)
                        const configSTACK_DEPTH_TYPE usStackDepth, //任务栈大小
                        void * const pvParameters,                 //传给任务的参数
                        UBaseType_t uxPriority,                    //任务优先级
                        TaskHandle_t * const pxCreatedTask )       //任务句柄

(2)静态创建

xTaskCreateStatic();

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 ) //任务控制块(需定义)

2、任务删除

vTaskDelete();

入口参数为任务句柄。

void vTaskDelete( TaskHandle_t xTaskToDelete );

3、任务挂起

(1)挂起指定任务

vTaskSuspend();

入口参数为任务句柄。

void vTaskSuspend( TaskHandle_t xTaskToSuspend );

(2)挂起全部任务

void vTaskSuspendAll( void )
{
    ++uxSchedulerSuspended;
}

注意:调用多少次vTaskSuspendAll()就需要调用多少次xTaskResumeAll()函数来恢复。

4、解除任务挂起

入口参数为任务句柄:

void vTaskResume( TaskHandle_t xTaskToResume ); //解除指定任务

BaseType_t xTaskResumeAll( void );              //解除全部任务

BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ); //中断中使用

三、其他任务相关API函数

四、内核控制函数

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值