FreeRTOS任务

系统运行时,全局变量放在哪里?子函数调用时,局部变量放在哪里?中断发生时函数的返回地址放在哪里???

栈是单片机RAM中一段连续的内存空间  栈的大小一般在启动文件或者连接脚本中指定,最后由C库函数 __main进行初始化

在多任务中每个任务都是独立的互不干扰的,所以每个任务都分配独立的栈空间,这个栈空间通常是

一个预先定义好的全局数组,也可以是动态分配的一段内存空间   ,都存在与RAM .

vTaskStartScheduler创建空闲任务

空闲任务是系统在启动任务调度器时创建的优先级最低的任务  空闲任务的主题主要是做一些系统内存的清理  在实际应用中可以让空闲任务让单片机进入休眠或者低功耗操作

空闲任务的堆栈是一个定义好的数组  大小由FreeRTOSConfig.h中定义的宏connfigMINIMAL_STACK_SIZE控制

空闲任务的任务控制块,是一个全局变量

任务栈其实就是一个预先定义好的全局数据,数据类型wei StackType_t ,大小由TASK1_STACK_SIZE这个

宏来定义,默认为128,单位为字即512个字节        ·

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

在裸机系统中,程序的主题是CPU按照顺序执行的,在多任务系统中任务的执行是靠系统调度的

系统为了顺利调度任务,为每个任务都额外定义了一个任务控制块,任务控制块相当于任务的身份证

里面存储任务的所有信息,任务的栈指针  任务的名称,任务形参,系统对任务的全部操作 都可以通过这个任务控制块来实现


typedef struct tskTaskControlBlock
{

}tskTCB
typedef tskTCB TCB_t;

xTaskCreateStatic()

任务的创建分为两种,一种是动态创建一种是静态创建。动态创建时,任务控制块和内存是创建任务时动态分配的,任务删除时

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

configSUPPORT_STATIC_ALLOCATION在FreeRTOSConfig.h中定义

任务句柄用来指向任务的TCB任务句柄的数据类型为TaskHandle_t

就绪列表

任务创建好之后,我们需要把任务添加到就绪列表中,表示任务已经就绪,系统随时都可以调度。

就绪列表实际上就是一个LIST_t类型的数组,数组的大小由决定最大任务优先级的宏定义configMAX_PRIORITES确定,configMAX_PRIORITES在FreeRTOSConfig.h中默认为5最大支持256个优先级,数组的下标对应任务的优先级,同一优先级的任务统一插入到就绪列表的同意链表中

将任务插入到就绪列表中就是通过将任务控制块的xStatieListItem节点插入到就绪列表中来实现·

任务调度器是操作系统的核心,其主要任务是实现任务的切换,技术从就绪列表中找到优先级最高的任务,然后执行该任务

vTaskStartScheduler

 

调度器启动函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值