- 1、本文档共101页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统移植解读
初始化C环境(3) 改变处理器模式 除用户模式以外,其他6 种模式都是特权模式。因为在初始化过程中许多操作需要在特权模式下才能进行(比如CPSR 的修改),所以要特别注意不能过早地进入用户模式。一般地,在初始化过程中会经历以下一些模式变化: 七、调用C程序 对main函数的调用进入uc/OS的入口,通过这个入口就进入uC/OS的主函数,启动对uC/OS的初始化 例 IMPORT Main b Main ;C Entry uC/OS系统的初始化 完成了前面的硬件初始化和运行环境的相关设置后,进入Main(), Main()是uC/OS的入口函数,启动对uC/OS的初始化 ARM的硬件抽象层——uHALuC/OS ARM公司为操作系统的开发提供了一个硬件抽象层HAL,称为uHAL; 从结构上看,uHAL是一组库程序,需要说明的是,uHAL并不是专门为uC/OS准备的,甚至也不是专为操作系统内核准备的; uHAL只是个针对ARM核的函数库; uC/OS是建立在uHAL的基础之上的; uC/OS系统的初始化(2) ARMTargetInit()函数结构 ARMTargetInit() 调uHAL打印接口打印系统信息 调用uHAL函数禁止所有中断 调用uHAL函数对中断初始化 uHAL函数对ARM计数器初始化 结束 uHAL的功能 uHAL的作用之一是在操作系统本身进入正常运行之前,为系统提供基本的输入输出手段,例如uHALr_printf()等; uHAL还要为操作系统的运行准备一个基本的运行环境,具体包括下列各种初始化: 通过uHAL_ResetMMU(),将MMU设置在一个确定的初始状态; 通过ARMDisable()关闭中断; 通过uHAL_InitInterrupts()设置中断向量处理程序; 通过uHAL_InitTimer()对系统使用的计数器进行初始化 ARMTargetStart()的分析 创建了任务之后,ARMTargetStart()调用uHALr_InstallSystemTimer()创建一个系统时钟,为时钟中断做好准备; * 关于中断及时钟节拍 流程图 保存当前任务的 寄存器组 中断嵌套数加1 切换到系统模式 执行中断服务程序 关中断 执行OSIntExit( ) 切换到IRQ模式 判断是否需要进行任务切换 切换任务或返回 关于中断及时钟节拍 流程图 保存当前任务的 寄存器组 中断嵌套数加1 切换到系统模式 执行中断服务程序 关中断 执行OSIntExit( ) 切换到IRQ模式 判断是否需要进行任务切换 切换任务或返回 MACRO $IRQ_Label HANDLER $IRQ_Exception_Function EXPORT $IRQ_Label ; 输出的标号 IMPORT $IRQ_Exception_Function ; 引用的外部标号 $IRQ_Label SUB LR, LR, #4 ; 计算返回地址 STMFD SP!, {R0-R3, R12, LR} ; 保存任务环境 MRS R3, SPSR ; 保存状态 ; 保存用户状态的R3,SP,LR,不能回写 STMFD SP, {R3, SP, LR}^ LDR R2, =OSIntNesting LDRB R1, [R2] ADD R1, R1, #1 STRB R1, [R2] SUB SP, SP, #4*3 ; 切换到系统模式 MSR CPSR_c, #(NoInt | SYS32Mode) CMP R1, #1 LDREQ SP, =StackUsr ... 关于中断及时钟节拍 中断嵌套层数加1 切换到系统模式,如果是第一次中断还要设置堆栈指针 压栈保存被中断任务的运行环境 关于中断及时钟节拍 流程图 保存当前任务的 寄存器组 中断嵌套数加1 切换到系统模式 执行中断服务程序 关中断 执行OSIntExit( ) 切换到IRQ模式 判断是否需要进行任务切换 切换任务或返回 中断服务程序 (ISR) 在ISR中可以打开中断实现中断嵌套 MACRO $IRQ_Labe
文档评论(0)