FreeRTOS 第13章 FreeRTOS的启动流程

首先明确,在运行的时候,一些全局变量是保存在堆中的,堆是一块很大的区域,这个由宏定义来明确大小,在最后几章的时候有内存管理会涉及到这个内容,当调用动态任务创建函数的时候,会调用一个pvPortMalloc()函数,是申请内存函数,在这个函数中加个判断,如果是第一次调用,则初始化堆,堆的初始化其实就是根据一个宏定义(堆的大小)把某个内存空间规定为堆。初始化后才能申请内存。

如果调用的是动态任务创建函数,那么在开启调度的时候,也会创建动态空闲任务并且加入就绪列表。可以使用xTaskGetIdleTaskHandle函数来获取空闲任务的句柄xIdleTaskHandle。

而当配置了configUSE_TIMERS时,表示使用定时器任务,那么也会在开启调度的时候使用xTimerCreateTimerTask()来创建定时器任务。

Systick是用来执行时间片功能和延时的,其优先级最低,确保主动提出切换的任务不会打断某个中断。这样做不会干扰Systick的计时时间,其是硬件定时器,它的每个滴答都会被硬件计次,然后才去把Systick中断标志位挂起。(感觉有个问题,在挂起Systick的中断函数中,可以看到在更新时基函数中有个变量xConstTickCount表示当前计时总的Tick是多少,在每个中断来的时候加一,如果某个中断函数的执行时间超过1ms,那么下一个Systick中断又来了,而上一个还没有执行,就会覆盖掉一次,那么xConstTickCount就比真实的Tick少一,当然,执行1ms一个的中断应该不多)

这本书中是定义了一个任务AppTaskCreate()函数,在这个任务中来统一创建各任务,最后再删除这个认识,书上在创建的时候是调用了临界区,在所有任务创建完成后退出才开始调度最高优先级任务。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值