RTOS任务创建

1、创建任务

动态创建任务

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, // 函数指针, 任务函数
						const char * const pcName, // 任务的名字
						const configSTACK_DEPTH_TYPE usStackDepth, // 栈深度,单位为 word,10 表示40 字节
						void * const pvParameters, // 调用任务函数时传入的参数
						UBaseType_t uxPriority, // 优先级,值越小优先级越低
						TaskHandle_t * const pxCreatedTask ); // 任务句柄, 以后使用它来操作这个任务
xTaskCreate(vTaskFunction, "Task 1", 1000, NULL, 1, &xHandleTask1);

创建任务返回的Handle(任务控制块)是 TCB_t 结构体(每个任务都会有TCB_t 结构体)的指针

静态创建任务

    TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
                                    const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                                    const uint32_t ulStackDepth,
                                    void * const pvParameters,
                                    UBaseType_t uxPriority,
                                    StackType_t * const puxStackBuffer, //传入栈
                                    StaticTask_t * const pxTaskBuffer );//结构体
xTaskCreateStatic(Task3Function, "Task3", 100, NULL, 1, xTask3Stack, &xTask3TCB);

静态创建任务:TCB_t 结构体事先分配好,栈(一块空闲的内存)事先分配好

2、任务优先级

优先级的取值范围是: 0~(configMAX_PRIORITIES – 1),数值越大优先级越高,高优先级的任务先运行,如果高优先级的任务没有主动放弃运行,其他低优先级任务根本没办法执行

默认调度机制:

  • FreeRTOS 会确保最高优先级的、可运行的任务,马上就能执行
  • 对于相同优先级的、可运行的任务,轮流执行

3、删除任务

void vTaskDelete( TaskHandle_t xTaskToDelete );

pvTaskCode:任务句柄,使用 xTaskCreate 创建任务时可以得到一个句柄也可传入 NULL,这表示删除自己。

4、栈空间

栈空间栈中存有地址和局部变量,如果任务中用大量的局部变量填满空间会破坏头部、破坏TCB,程序将会崩溃,所以在创建任务之前首先要确定任务需要的栈空间

volatile char buf[500];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值