- 1、本文档共131页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
六、嵌入式系统初始化与操作系统的移植解读
关于移植 相对于其他的嵌入式操作系统,uCOS-II的移植虽然是一个很简单的过程,但是,对于不熟悉uCOS-II的开发者,移植还是有一定难度的。 移植要点 定义函数OS_ENTER_CRITICAL和OS_ENTER_CRITICAL。 定义函数OS_TASK_SW执行任务切换。 定义函数OSCtxSw实现用户级上下文切换,用纯汇编实现。 定义函数OSIntCtxSw实现中断级任务切换,用纯汇编实现。 定义函数OSTickISR。 定义OSTaskStkInit来初始化任务的堆栈。 uC/OS的完善 固定的基于优先级的调度,不支持时间片,使用起来不方便。一个任务的基础上增加一个基于时间片的微型调度核 系统时钟中断,没有提供用户使用定时器,可以借鉴linux的定时器加以修改 在对临界资源的访问上使用关闭中断实现,没有使用CPU提供的硬件指令,例如测试并置位。 只是一个实时多任务内核,没有图形用户接口(GUI)、文件系统(FS)和TCP/IP协议栈 谢 谢 各 位 * 中断服务 中断服务程序 关于栈指针调整 栈指针调整 调整堆栈指针(加一个数在堆栈指针上)来完成的。加在堆栈指针上的数必须是明确的,而这个数主要依赖于移植的目标处理器(地址空间可能是16,32或64位),所用的编译器,编译器选项,内存模式等等。另外,处理器状态字可能是8,16,32甚至64位宽,并且OSIntExit()可能会分配局部变量。有些处理器允许用户直接增加常量到堆栈指针中,而有些则不允许。在后一种情况下,可以通过简单的执行一定数量的pop(出栈)指令来实现相同的功能。一旦堆栈指针完成调整,新的堆栈指针会被保存到被切换出去的任务的OS_TCB中 OSIntCtxSW的实现 OSIntCtxSw()的原型 void OSIntCtxSw(void) { 调整堆栈指针来去掉在调用: OSIntExit(), OSIntCtxSw()过程中压入堆栈的多余内容; 将当前任务堆栈指针保存到当前任务的OS_TCB中: OSTCBCur-OSTCBStkPtr = 堆栈指针; 调用用户定义的OSTaskSwHook(); OSTCBCur = OSTCBHighRdy; OSPrioCur = OSPrioHighRdy; 得到需要恢复的任务的堆栈指针: 堆栈指针 = OSTCBHighRdy-OSTCBStkPtr; 将所有处理器寄存器从新任务的堆栈中恢复出来; 执行中断返回指令; } OSIntCtxSW ();中断级的任务切换函数(1) OSIntCtxSw LDR sp, =IRQStack ;FIQ_STACK Sub r7,sp,#4 mrs r1, SPSR ; 得到暂停的 PSR orr r1, r1, #0xC0 ; 关闭 IRQ, FIQ. msr CPSR_cxsf, r1 ; 转换模式 (应该是 SVC_MODE) ldr r0, [r7] ; 从IRQ堆栈中得到IRQs LR (任务 PC) sub r0, r0, #4 ; 当前PC地址是(saved_LR - 4) STMFD sp!, {r0} ; 保存任务 PC STMFD sp!, {lr} ; 保存 LR sub lr, r7 ,#52 ; 保存 FIQ 堆栈 ptr in LR (转到 nuke r7) ldmfd lr!, {r0-r12} ; 从FIQ堆栈中得到保存的寄存器 STMFD sp!, {r0-r12} ;在任务堆栈中保存寄存器 OSIntCtxSW ();中断级的任务切换函数(2) ;在任务堆栈上保存PSR 和任务 PSR MRS r4, CPSR bic r4, r4, #0xC0 ; 使中断位处于使能态 STMFD sp!, {r4} ; 保存任务当前 PSR MRS r4, SPSR STMFD sp!, {r4} ; SPSR ; OSPrioCur = OSPrioHighRdy // 改变当前程序 LDR r4, addr_OSPrioCur LDR r5, addr_OSPrioHighRdy LDRB r6, [r5] STRB r6, [r4] ; 得到被占先的任务TCB LDR r4, addr_OSTCBCur LDR r5,
您可能关注的文档
- 消防工程分项质量验收记录表讲述.doc
- 公司必威体育官网网址协议、必威体育官网网址制度等解读.doc
- 消防安全培训(在职员工培训)讲述.ppt
- 公司2016年消防安全培训课件解读.ppt
- 消防培训2讲述.ppt
- 公司学习贯彻党的十八届六中全会精神暨四季度会议精神考试参考题库解读.doc
- 消防工程师技术实务思考题讲述.doc
- 消防工程基础知识、识图及工程量计算、清单编制20140615讲述.ppt
- 德国统一的背景和过程精要.ppt
- 消防安全课件3月讲述.ppt
- 主题四 微专题1 中国优秀传统文化的内涵、价值与演变.docx
- 主题四 微专题1 中国优秀传统文化的内涵、价值与演变.pptx
- Unit 5 Music 单元词汇默写与运用(含答案)-2024-2025学年高中英语人教版(2019)必修第二册.docx
- 安徽省天长市2024-2025学年高三上学期第四次学情调研考试历史试题(含解析).docx
- Unit 3 The Internet 单元词汇默写与运用(含答案)--2024-2025学年高中英语人教版(2019)必修第二册.docx
- 部编人教版二年级下册道德与法治《我的环保小搭档》课件.pptx
- 山东省中企质信检测技术有限公司实验室建设项且建设项目环境影响报告表(污染影响类).pdf
- 北师大版(2019)必修第三册Unit 7 Art Lesson 3 A Musical Genius 课文变形语法填空(含答案).docx
- 福建省龙岩市2024-2025学年高一上学期1月期末英语试题(无答案).docx
- 广东省广州市2024-2025学年高三2月月考英语试题(无答案).docx
文档评论(0)