实例介绍
详细介绍μC/OS-II操作系统在STM32上的移植过程,引导初学者完成基本的操作系统架构的创建。
建立工程 使用 (我使用版)在 目录下建立工程,工程名为 。选一个 系列的芯片,哪一个都无所谓(我选的是 因为我的板子就是用这个芯片),接下来要注意的是当弹出是否拷贝启动代码到工 程文件夹时要选,因为标准外设厍里已经有启动代码了。 将 里的顶层日录名改为 ,并将第一个 名改为 把 日录下所有和文件加载到工程里的 在下建立一个目录用来放置系统初始化代码。把 拷贝到文件夹 拷贝到 文件夹中。 是中断服务程序文件。 是标 准外设库的配置文件,对于工程中不需要的外设,可以注释掉里面的包含的头文件。 这里我建议先仅留下 ,用到什么再打 开什么,这样编译起来快一点,当然也可都留着。 使用 标准外设库 事实上 标准外设库的使用在 中的 节中已有说明,下面我把其中的步骤罗列一下 根据所选芯片,把 中的启动代码 加到工程中,这一步在上面凵经做过了。 在 的 行,根据所选芯片类型,去掉相应注释,这里我去掉 行的注释(大谷量型 片) 去掉行的 注释,启用 标准外设库。 在 的 行,根据所选芯片主频,去掉相应注释,默 认 注释已去掉,如果你的芯片主频是 ,就不用做 修改了,这里我的芯片是 注释 去掉 注释 跑马灯程序 现在可以使用 标准外设库了,下面以一个简单的跑马灯程序说明。 在日录下建立 作为系统入口 在下建立一个日录用来放置板级支持代码,建立 代码如下: 在 中建立 组,并将各种代码加入。在工程的 选项卡的 中添加 选项卡 中选 选项卡 中选 选项卡选 打钩,这一步大家 可以根据自己手上的仿真器做不同选择。编译运行。 在 上的移植详解 虽然目前网上凵经有不少关于 在 上的移植版本,包括 也 有官方移植版本。但这些版本具体是怎么移植出来的,又该怎么基于移植好的 开发应用软件,网上介绍的并不多。这里介绍一下我的移植经历,希望对大家有所 帮助。 我的移植基本上是从零开始的。首先想要做好移植,有两方面的內容是必须要 了解。日标芯片 内核原理 虽然我们移植的目标芯片是,但操作系统的移植基木是针对 内核(以下简称)而言的,所以我们只需了解内核就好了。 片 就是内核加上各种各样的外设。 怎么才能了解呢?看一本书 权威指南(宋岩译,网 上多的很)就好了,很多同学可能想,看完这本书移植的新鲜劲都没了,因此我把 该书和移植有关的章节都刎了出来,并对其中的重点内容进行介绍,我数了数相关 章节还不到页,就这点内容,总要看了吧。 相关章节如下 概览 主要了解 的概貌。刚开始看时不用追求仝部理解,后面会有详细介 绍,很多内容多看几遍就明白。其中指令集,只要了解,只使用 就了 基础 寄存器组 通用寄存器 堆栈寄存器 有两个, 和 同时只能看见一个 引用时,引用的是正在使用的那个 可用于异常服务和应用程序 只能用于应用程序 系统复位后,用的堆栈指针是 连接寄存器,又名,存储返冋地址 程序计数寄存器,又名 特殊功能寄存器 程序状态字寄存器组( 中断屏蔽寄存器组( 控制寄存器( 程序状态字寄存器组()分为 应用程序 中断号 执行 每个都是位,由于这个寄存器有效位是错开的,因此可以组合访问。 中断屏蔽寄存器组( ),这三个寄存器用于 控制异常的使能和除能。 控制寄存器( )它有两个作用: 定义特权级别 选择当前使用哪个堆栈指针 操作模式和特权极别 操作模式处理者模式和线程模式 异常处理:处理者模式 主程序:线程模式 不区分特权级和用户级,程序始终工作在特权级 这两个堆栈指针的切换是全自动的,就在出入异常服务例程时由硬件处理。 没什么好讲的,需要看。 复位序列 初值 初值复位向量 异常 异常类型 分为系统异常编号和外部中断大于 优先级 支持个固定的高优先级和多达级的可编程优先级。 在 中,每个中断都有一个优先级配置寄存器(个 ,用来配置该 中断的优先级。但该寄冇器并不是每个位都被使用,不同制造商生产的芯片不相同, 譬如 使用位,也就是说 支持个可编程优先级(参考 注意该寄存器是以对齐的,因此 每个中断的优先级配置寄存器 位有效,位无效。 对于优先级, 又分为抢占优先级和亚优先级, 中的应用程序中断及复位掉制寄存器 的优先级分组描述了 如何划分抢占优先级和亚优先级 什么意思?以 为例,优先级配置寄存器不是位有效吗,如果 中的优先级分组值为,则优先级配置寄冇器的位确定抢占优先级,位确定 亚优先级。此时所有中断有个抢占优先级,每个抢占优先级有个亚优先级。 抢占优先级高的中断可以抢占抢占优先级低的中断,即抢占优先级决定了中断是 否可以嵌套 相同抢占优先级的中断不能嵌套,但当抢占优宄级相同的异常有不止一个到来 时,就优先响应亚优先级最高的异常。 参考附求 表表 中断优先级寄存器阵列 共 系统异常优先级寄冇器 共个 优先级相同,看中断号,中断号小的优先。 向量表 初始在 处,可以通过向量表偏移量寄存器 (地址: )更改,般无需更收。 中断输入及挂起行为 需要看。 异常 可不看 和 主要用在分特权级和用户级的操作系统, 不区分特权级和用户级 可以不管这个东西。 这里说点题外话,一开始我很奇怪为什么会提供这种中断,因为这种中断一般 都是用在大型的操作系统上,如系统上,可又不提供,应该是无 法移植系统。后来我才知道 是针对没有的嵌入式系统而设计的 不过还是很怀疑有人会在像 这种芯片上用 中断主要做上下文切换,也就是任务切换,是 移植过程中最重要 的中断。 主要有两点 中断是手工往 的 悬起寄存器中写产生的(由 写) 中断优先级必须设为最低 在讲移植代码时会介绍具体是如何做的。 对于的 部分应认真研读一下。 与中断控制 负责芯片的中断管理,它和 内核紧密相关。 如果对于 中断配置不是很了解,可以看看 节讲述了 定时器,需要看。 中断的具体行为 中断/异常的响应序列 当开始响应一个中断时 以及 入栈 取向量 选择堆栈指针 ,更新堆栈指针,更新连接寄存器,更新程序 计数器 对移植 米说,需要注意 异常返同 在中,进入中断时,寄存器的值会被自动更新。节对史新后的值进 行说明。这里统称 。返回时通过把 往里写来识 别返回动作的。因为 是一个特殊值,所以对于,汇编语言就 不需要类似这种指令,而用语言开发时,不需要特殊编译器命令指示个函 数为中断服务程序。实际上,中断服务程序如果是代码编写,汇编成汇编代码, 函数结尾一般是 嵌套的中断 只要注意:中断嵌套不能过深即可。 和 这两节说明对中断的响应能力大大提高了,主要是硬件机制的改进。但对 移植来说,并不需要关注 异常返回值 对不同状态进入中断时,寄存器的值进行说明,需要看。这里有一点需要注 意,该点在讲移植代码时再介绍 利 对移植来说,并不需要关注。 的低层编程 这·章仅需关注节,因为对移植来说汇编与的接口是必须面对的。 汇编与的接口 有两点需要知道 当主调函数需要传递参数(实参)时,它们使用 。其中传递第一 个,传递第个在返冋时,把返冋值写到中 在函数中,用汇编写代码时, 可以随便使用,而使用 则必须先 以上内容和移植多少都有些关系,刚开始看,可能不太明白,多看几遍就好了。 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论