当前位置:   article > 正文

1264_FreeRTOS任务的初始化以及堆栈初始化处理分析_freertos初始化

freertos初始化

全部学习汇总: GreyZhang/g_FreeRTOS: learning notes about FreeRTOS. (github.com)

前面简单分析过任务创建函数的实现,在函数的最后有一个操作是对任务的初始化处理。这一次分析一下这个初始化的函数。

这里需要说一下的是,这个MPU我查看M3的内核手册的时候是看到了的,可能这个是M3内核都有的一个模块。当然,我看到的暂时是章节标题暂时还没有去仔细阅读。可能,这个模块在这个MCU上是可以用起来的。

这一段没有实质的意义,目前的工程中没有生效。不过,从这里能够看到这个数据填充的处理方式,那就是填充为0xA5。

进行堆栈的处理,主要是处理堆栈的栈顶。掩码的作用是为了能够保证堆栈指针的数值是8字节对齐的,而这个对齐是硬件属性决定的。

这一段是实现了任务名称的拷贝处理,考虑了一定的效率因素。

这是对优先级的处理,其中也检查了优先级是否是在一个合理的范围内。另外,也处理了互斥信号涉及到的优先级。这部分可能后面还得专门分析一下具体的作用,目前还不知道这个互斥信号的实现方式或机理。

处理状态、事件的链表信息,首先进行了初始化的操作,接下来指明了任务控制块状态信息以及时间信息的归属对象。同时,处理了用于排序的数值,这个数值是跟优先级最大值以及优先级的减数值相关的。

这部分代码都是没使能的,可以直接跳过。不过这里有一条是使能了的,那就是任务通知功能。通知状态有三种状态的可能:不等待通知、等待通知、接收到通知。

这里有两部分生效的地方,第一个是任务堆栈的初始化,另一个是任务句柄的处理。其中,任务句柄的处理比较简单,只要是对象不是NULL,那么指向任务控制块。关于堆栈的处理,后面另作分析。

上面这一部分信息来自于M3的内核手册,当exception产生的时候,内核会有一个堆栈的处理。而这个时候进入到对战区域的寄存器按照顺序就是上图的顺序,而这个也是前面看到的堆栈初始化的处理顺序。

这部分的赋值信息是如何来的呢?这个也需要看内核手册,但是不在exception的章节了。

xPSR是三个寄存器的信息,从上面的信息看,三个寄存器的bit位正好不是重合的位置。因此,正好可以通过一个寄存器进行存储。前面代码中的赋值,正好是bit24,也就是T。这个bit置位的作用是用以指示采用Thumb指令集。

这部分文档是对前面的说法的说明信息。

这样,任务初始化以及堆栈初始化的信息的分析就完成了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/677269
推荐阅读
相关标签
  

闽ICP备14008679号