| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 1264_FreeRTOS任务的初始化以及堆栈初始化处理分析 -> 正文阅读 |
|
[嵌入式]1264_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指令集。 这部分文档是对前面的说法的说明信息。 这样,任务初始化以及堆栈初始化的信息的分析就完成了。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:28:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |