FreeRTOS学习笔记(二)创建任务

2 篇文章 0 订阅
2 篇文章 0 订阅

任务创建流程

1.定义任务栈

每个任务都是独立的,互不干扰的,所以要为每个任务都分配独立的栈空间,这个栈空间通常是一个预先定义好的全局数组, 也可以是动态分配的一段内存空间,但它们都存在于 RAM 中。

 #define TASK1_STACK_SIZE 128 

 StackType_t Task1Stack[TASK1_STACK_SIZE]; 

 #define TASK2_STACK_SIZE 128

 StackType_t Task2Stack[TASK2_STACK_SIZE];

2.定义任务函数

任务是一个独立的函数,函数主体无限循环且不能返回。

void Task1( void *p_arg )

 

3.定义任务块

任务控制块就相当于任务的身份证,里面存有任务的所有信息,比如任务的栈指针,任务名称, 任务的形参等。有了这个任务控制块之后,以后系统对任务的全部操作都可以通过这个任务控制块来实现。

1 typedef struct tskTaskControlBlock
2 {
3 volatile StackType_t *pxTopOfStack; /* 栈顶 */ (1)
4
5 ListItem_t xStateListItem; /* 任务节点 */ (2)
6
7 StackType_t *pxStack; /* 任务栈起始地址 */ (3)
8 /* 任务名称,字符串形式 */(4)
9 char pcTaskName[ configMAX_TASK_NAME_LEN ];
10 } tskTCB; 
11 typedef tskTCB TCB_t; (5)

 

 

4.实现任务创建函数

1)静态创建任务函数

           任务控制块和栈的内存需要事先定义好,是静态的内 存 , 任 务 删 除 时 , 内 存 不 能 释 放 。

TaskHandle_t xTaskCreateStatic(  TaskFunction_t pxTaskCode, (2)
                                 const char * const pcName, (3)
                                 const uint32_t ulStackDepth, (4)
                                 void * const pvParameters, (5)
                                 tackType_t * const puxStackBuffer, (6)
                                 TCB_t * const pxTaskBuffer ) (7)
 

 

2)动态创建任务函数

TaskHandle_t       xTaskCreate ( TaskFunction_t pxTaskCode, (2)
                                 const char * const pcName, (3)
                                 const uint32_t ulStackDepth, (4)
                                 void * const pvParameters, (5)
                                 tackType_t * const puxStackBuffer, (6)
                                 TCB_t * const pxTaskBuffer ) (7) 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值