




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、写一个简易嵌入式操作系统在了解了操作系统的原理和工作后,我们可以自己写一个简 易的嵌入式操作系统,下面由 小编为大家整理了写一个简易嵌入式 操作系统的相关知识,希望对大家有帮助!写一个简易嵌入式操作系统概述1. 首先确定CPU,在这里为了简单,就选用嵌入式的 CPU,比如arm系列,之所以用RISC(简单指令集)类型的CPU,其方便之 处是没有实模式与保护模式之分,采用线性的统一寻址,也就是不需 要进行段页式内存管理,还有就是芯片内部集成了一些常用外设控制 器,比如以太网卡,串口等等,不需要像在PC机的主板上那么多外设芯片2. 确定要实现的模块和功能,为了简单,只实现多任务调度 (但有限制,比
2、如最多不超过10),实现中断处理(不支持中断优先级), 不进行动态SHELL交互,不实现动态模块加载,不实现fork之类的 动态进程派生和加载(也就是说要想在你的操作系统上加入用户程序,只能静态编译进内核中;不支持文件系统,不支持网络,不支持 PCI,磁盘等外设(除了支持串口,呵呵,串口最简单嘛),不支持虚拟内存管理(也就是说多任务中的每个进程都可以访问到任何地址, 这样做的话,一个程序死了,那么这个操作系统也就玩完了)3. 确定要使用的编译器,这里采用 GCC,文件采用ELF格 式,当然,最终的文件就是BIN格式,GCC和LINUX有着紧密的联 系,自己的操作系统,需要 C库支持和系统调用支
3、持,所以需要自 己去裁剪库,自己去实现系统调用4. 实现步骤:首先是CPU选型,交叉编译环境的建立,然 后就是写BOOTLOADER ,写操作系统通过以上4点的学习一个简单 的嵌入式操作系统准备工作就差不多做好了。写一个简易嵌入式操作系统详解程序本质的剖析写操作系统这个高端大气上档次的工作肯定要有一些铺垫 了,最必须的就是对你写的程序的了解,也许你会说,我写的程序, 我还能不理解吗,但是这次咱么要从寄存器角度分析。咱们首先从类比学习开始,咱们先来理解中断,对于中断, 学习单片机的小朋友们肯定很理解,咱么来一起回顾下,单片机是怎 么用硬件实现中断的(更为具体的说明在 Cortex-M3 权威指南
4、 -carpter9中断的具体行为)其实中断就是多任务的环境了,只不过这 个多任务环境只能有两个任务(在只有一个中断的前提下),那么只要 咱么能模拟出来中断,那实现自己的操作系统也是很简单的呢。CM3中断的一个完整过程由一下几个部分组成1. 入栈2. 取向量3. 更新寄存器4. 异常返回入堆栈:响应异常的第一个行动,就是自动保存现场的必要 部分:依次把xPSR, PC, LR, R12以及R3 -R0由硬件自动压入适当的 堆栈中,就是保存要切换出去的任务,因为下面就要开始执行中断这 个任务了,如果不保存就无法实现这个任务的完全复原了。取向量:其实就是找到中断任务的入口地址, 这样才能开始执行中
5、断函数更新寄存器异常返回:当异常服务例程执行完毕后,需要很正式地做一 个“异常返回”动作序列,从而恢复先前的系统状态,才能使被中断 的程序得以继续执行操作系统的任务切换也是大同小异1. 屏蔽所有中断2保存正在执行的任务的寄存器信息到任务独立的堆栈中3. 从要投入运行的任务的堆栈中取出数据到寄存器中4. 取消中断屏蔽经过这四步,上一个任务已经被保存起来,等待下一次的运 行,要运行的任务已经开始了运行上面这四步只是一个大体的概述在对CM3内核的实现描述前有一些准备知识1. CM3寄存器基础(在Cortex-M3 权威指南一书)2. BASEPRI寄存器,用于中断屏蔽(在Cortex-M3 权威指南
6、一书)3. 线程模式和handler模式,在保存上下文时用(在Cortex-M3 权威指南一书)4. 特权级和用户级,明白在 Systick中断时的情况(在Cortex-M3 权威指南一书)5. Pe ndSV异常,在这个异常中进行任务切换(在Cortex-M3 权威指南一书)6. SVC异常,启动OS,开始执行第一个任务就是通过呼叫SVC异常(在Cortex-M3 权威指南一书)7. MSP和PSP双堆栈指针的使用,保存寄存器时用(在Cortex-M3 权威指南一书)8. 中断控制及状态寄存器ICSR,知道如何触发PendSV异 常(在Cortex-M3 权威指南一书)9. 向量表偏移量寄存
7、器VTOR,第一次切入任务的(在Cortex-M3 权威指南一书)10. 向量表结构,得到 MSP的初始值(在Cortex-M3 权威 指南一书)11. 系统异常优先级寄存器,用于设置PendSV异常和Systick异常的优先级(在Cortex-M3 权威指南一书)下面详细说明上述几点1. CM3寄存器基础1.BASEPRI寄存器,用于中断屏蔽(在Cortex-M3 权威指南一书)在更精巧的设计中,需要对中断掩蔽进行更细腻的控制—&m dash;只掩蔽优先级低于某一阈值的中断—&m dash;它们的优先级在数字上大于等于某个数。那么这个数存储在哪里?就存储在BASEPR
8、I中。不过,女口 1果往BASEPRI 中写0,则另当别论——BASEPRI将停止掩蔽任何中断。例如,如果你需要掩蔽所有优先级不高于0x60的中断,则可以如下编程:MOV R0, #0x60MSR BASEPRI, R0如果需要取消BASEPRI对中断的掩蔽,则示例代码如下:MOV R0, #0MSR BASEPRI, R02. 线程模式和handler模式3. 特权级和用户级4. PendSV 异常试想一个这个过程一个ISR正在执行SysTick异常会抢占 其ISR,在这时OS不得执行上下文切换,否则将使中断请求被延迟,而且在真实系统中延迟时间还往往不可预知 &m d
9、ash;&m dash;任何有一丁点实时要求的系统都决不能容忍这种事。因此,在CM3中也是严禁没商量——如果OS在某中断活跃时尝 试切入线程模式,将触犯用法fault异常。现在好了, PendSV来完美解决这个问题了。 PendSV异常会自动延迟上下文切换的请求,直到其它的ISR都完成了处理后才放行。为实现这个机制, 需要把PendSV编程为最低优先级的异常。如果OS检测到某IRQ正在活动并且被SysTick抢占,它将悬起一个PendSV异常,以便缓期执行上下文切换。5.SVC异常SVC用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些
10、系统服务函数,用户程序使用SVC发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。6.MSP和PSP双堆栈指针的使用一般情况下在线程模式下使用PSP,在handler模式下使用MSP所以在进行任务切换的时候,只需要把通用寄存器数据压入 任务的私有堆栈。在异常的时候,只能使用 MSP堆栈指针,任务切换又是在 PendSV异常中进行的,所以进入PnedSV异常的时候,7.先把通用寄存器的内容保存到要切换出去的任务的私有 堆栈(这是保存上文),8保存通用寄存器到主堆栈,9. 屏蔽所有中断,进入临界区10. 调用C语言函数进行切换当前任务的 TCB指针,11. 返回到异常汇编函数中12.
11、 解除中断屏蔽13. 从主堆栈中恢复数据到通用寄存器,14. 从要切入任务的私有堆栈中恢复数据到通用寄存器15. 退出异常16. 中断控制及状态寄存器ICSRICSR的第28位是读写类型,向这个位写1就可以实现悬起PendSV异常17. 向量表偏移量寄存器VTOR把这个作为地址从中取出的就是向量表的第一块内容18. 向量表结构向量表的第一块内容是MSP的初始值19系统异常优先级寄存器PendSV异常和Systick异常在操作系统中,应该设成最低, 通过这两个寄存器改变这两个异常的优先级应该修改成OxfO下面对于CM3这个内核说一下详细的实现步骤咱们先从简单的来,加入现在你写了两个函数并且有一个
12、任务切换函数void TaskSwitch(void);void Task0(void)while(1)/do someth ing task/实现任务的主动切换,就是把当前任务切换出去把另一个任务切换进去TaskSwitch();void Task1(void)while(1)/do someth ing task/实现任务的主动切换,就是把当前任务切换出去把另一个任务切换进去TaskSwitch();在main函数中调用TaskO函数,实现手动启动TaskO,这就进入了任务切换的循环了,那么 TaskSwitch怎么实现了,下面开始进入重点,开始一步一步说明,如何实现这个函数。这里有一个前
13、提/*当前任务控制块的指针*/OS_TCB * p_OS_TCB_Curre nt;/*高优先级任务控制块指针*/OS_TCB * p_OS_HighPriTCB_Curre nt;首先先说一下TaskSwitch函数中实现了什么1. 屏蔽中断,进入临界区2. 根据相应的算法计算下一个应该切入的任务是那个,咱么这里很简单,如果正在执行任务0,那么切换到任务1,如果正在执行任务1,那么切换到任务0,这就实现了最简单的任务切换。3. 把p_OS_HighP订CB_Current 指向要切入的函数4. 触发PendSV异常5. 解除中断屏蔽,退出临界区这块的任务C语言就可以实现,但是用汇编写效率可能会更高下面开始演示屏蔽中断,进入临界区这里就要利用上面说的准备的知识了 & mdash;BASEPRI寄 存器,因为用的是一个八位寄存器的高四位作为优先级, 这里只要把 一个0x10的数写入BASEPRI寄存器,就可以实现屏蔽所有的中断。根据相应的算法计算下一个应该切入的任务是那个,咱么这里很简单,如果正在执行任务0,那么切
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黑龙江省哈尔滨市122中学2025届高三TOP300七月尖子生联考英语试题含解析
- 黑龙江省饶河县高级中学2024-2025学年高三年级5月份三校联考历史试题含解析
- 黑龙江职业学院《国际汉语传播案例》2023-2024学年第二学期期末试卷
- 人教版四年级数学上册教案:1 大数的认识(修改后)
- 五味子叶论文主题:标准提取物;制备工艺;质量控制
- 如何减少宝宝的夜间哭闹试题及答案
- 八年级试卷试题及答案
- 投资绩效评价必考试题及答案
- 2024年计算机实践能力试题及答案
- 2024年普通话口语考试知识点总结及试题及答案
- 2025届成都市2022级高中毕业班第二次诊断性检测语文试题及答案
- 2025届北京市第四中学顺义分校高三零模英语试题(原卷版+解析版)
- 全国第9个近视防控月活动总结
- 智能传感器研发-第1篇-深度研究
- 2025至2030年中国快速换模系统数据监测研究报告
- 利益平衡理论及其在民事诉讼中的运用
- 《艺术学概论考研》课件艺术内涵的演变
- 三年级英语家长会发言稿15篇
- 光的折射(课堂PPT)
- 监控系统维护及方案
- 无心磨床新手
评论
0/150
提交评论