




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课件 ucos ii嵌入式操作系统介绍与移植 目录 1 uc os ii简介2 uc os ii的移植3 os cpu h的移植4 os cpu c的移植5 os cpu a s的移植6 多任务应用程序的编写 uc os ii简介 1 uc os ii是一个简单 高效的嵌入式实时操作系统内核2 支持x86 arm powerpc mips等众多体系结构3 可从www ucos 网站上获得全部源码及其在各种体系结构平台上的移植范例 uc os ii特点 1 uc os ii内核具有可抢占的实时多任务调度功能2 提供了许多系统服务 如信号量 消息队列 邮箱 内存管理 时间函数等3 这些功能可以根据不同的需求进行裁减 uc os ii的移植 1 汇编语言 c语言代码需要移植2 移植工作集中在多任务切换的实现上3 在arm处理器上的移植 需要完成的工作包括 修改三个和体系结构相关的文件 代码量大约是500行 这三个文件是os cpu c c os cpu c h以及os cpu a s os cpu h的移植 1 数据类型定义2 arm处理器相关宏定义3 堆栈增长方向 数据类型定义 1 int8u unsignedchar2 int8s signedchar3 int16u unsignedshort4 int16s signedshort5 int32u unsignedint6 int32s signedint arm处理器相关宏定义 1 退出临界区 defineos enter critical armdisableint 2 进入临界区 defineos exit critical armenableint 堆栈增长方向 1 堆栈由高地址向低地址增长 这个也是和编译器有关的 当进行函数调用时 入口参数和返回地址一般都会保存在当前任务的堆栈中 编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向 defineos stk growth1 os cpu c的移植 1 任务堆栈初始化2 系统hook函数3 中断级任务切换函数 任务堆栈初始化ostaskstkinit 1 由ostaskcreate或ostaskcreateext调用2 用来初始化任务的堆栈并返回新的堆栈指针stk 初始状态的堆栈模拟发生一次中断后的堆栈结构 3 在arm体系结构下 任务堆栈空间由高至低依次将保存着pc lr r12 r11 r10 r1 r0 cpsr spsr4 堆栈初始化结束后 ostaskstkinit返回新的栈顶指针 ostaskcreate或ostaskcreateext将指针保存在任务的os tcb中 系统hook函数 1 任务创建钩子osstaskcreatehook2 任务删除钩子ostaskdelhook3 任务切换钩子ostaskswhook4 任务统计钩子ostaskstathook5 时钟节拍处理钩子ostimetickhook 中断级任务切换函数osintctxsw 1 该函数由osintexit 和osexintexit 调用2 在时钟中断isr 中断服务例程 中发现有高优先级任务等待的时钟信号到来 则需要在中断退出后并不返回被中断任务 而是直接调度就绪的高优先级任务执行 3 该函数通过设置一个全局变量need to swap context标志以表示在中断服务程序中进行任务切换 然后在ostickisr 中判断该变量以进行正确的动作 os cpu a s的移植 1 时钟节拍中断服务函数2 退出临界区和进入临界区函数3 任务级上下文切换函数4 osstarthighrd 时钟节拍中断服务函数ostickisr 1 时钟节拍是特定的周期性中断2 时钟节拍率越快 系统的额外开销就越大 越慢则系统响应速度越慢3 本系统使用定时器0作为时钟节拍源 产生间隔10ms的时钟节拍4 ostickisr 就是时钟节拍中断服务函数 也就是定时器0的中断处理函数 ostickisr函数 1 首先在被中断任务堆栈中保存cpu寄存器的值 然后调用osintenter 2 调用ostimetick 检查所有处于延时等待状态的任务 判断是否有延时结束就绪的任务 3 最后调用osintexit 如果在中断中 或其他嵌套的中断 有更高优先级的任务就绪 并且当前中断为中断嵌套的最后一层 osintexit 将进行任务调度 如果当前中断不是中断嵌套的最后一层 或中断中没有改变任务的就绪状态 osintexit 将返回调用者ostickisr 最后ostickisr 返回被中断的任务 退出 进入临界区函数armdisableint armenableint 1 直接操作cpsr的i f位2 armdisableint将cpsr的i f位设置为1 关闭所有中断3 armenableint将cpsr的i f位设置为0 打开中断 任务级上下文切换函数os task sw 1 该函数当任务因为被阻塞而主动请求cpu调度时被执行 由于此时的任务切换都是在非异常模式下进行的 因此区别于中断级别的任务切换 2 它先将当前任务的cpu现场保存到该任务堆栈中 然后获得最高优先级任务的堆栈指针 从该堆栈中恢复此任务的cpu现场 使之继续执行 这样就完成了一次任务切换 osstarthighrd 1 该函数是在osstart函数中调用2 负责从最高优先级任务的tcb中获得该任务的堆栈指针sp 并依次将cpu现场恢复 这时系统就将控制权交给用户创建的该任务进程 直到该任务被阻塞或者被其他更高优先级的任务抢占cpu3 该函数仅在多任务启动时被执行一次 用来启动之前创建的第一个 也就是最高优先级的任务执行 多任务应用程序的编写 1 c语言入口函数1 调用函数armtargetinit初始化arm处理器 2 调用osinit进行操作系统初始化 3 调用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电缆辅材知识培训总结
- 监理职业伦理建设-洞察及研究
- D打印行业市场分析与未来
- 2025年湖北省黄石市辅警招聘考试题库及答案
- 2025年海南省三沙市辅警招聘考试题题库(含参考答案)
- 2025年废旧塑料回收处理技术突破与产业生态构建报告001
- 2025年新能源与环保产业环保产业技术创新战略研究报告
- 2025年眼科医学生面试题及答案
- 2024-2025学年湖南省张家界市桑植县八年级(下)期末历史试卷(含答案)
- 2025年度茶叶进口许可证及跨境电商平台合作合同
- 移动电子商务技术基础及应用
- 混凝土裂缝控制技术
- 纳思达在线测评试题
- 《文化研究导论》课件
- 融资入股合作协议
- PHQ-9抑郁评分量表
- 教师工作培训手册
- 汽车美容(劳动)单元六-汽车电子设备安装课件
- 井口工具课件
- 《公差配合与测量技术》课件
- 电机设计数字化解决方案
评论
0/150
提交评论