- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五 μC/OS-II移植实验
实验目的
了解μC/OS-II移植条件和内核基本结构。
掌握将μC/OS-II内核移植到ARM7处理器上的方法和步骤。
实验原理
1.μC/OS-II文件体系
μC/OS-II的文件体系结构见图1,其中应用软件层是基于μC/OS-II上的代码。μC/OS-II包括3个部分:
1)核心代码部分:这部分代码与处理器无关,包括7个源代码文件和1个头文件。它们负责的功能是内核管理、事件管理、消息队列管理、存储管理、消息管理、信号量处理、任务调度和定时管理。
2)设置代码部分:包括2个头文件,用来配置事件控制块的数目以及是否包含消息管理相关代码等。
3)处理器相关的移植代码部分:包括1个头文件、1个汇编文件和1个C代码文件。在μC/OS-II的移植过程中,用户所需关注的就是这部分文件。
图1 μC/OS-II文件体系结构
2.μC/OS-II移植条件
1)处理器的C编译器能产生可重入代码。
可重入代码指的是可以被多个任务同时调用,而不会破坏数据的一段代码;或者说代码具有在执行过程中打断后再次被调用的能力。
2)用C语言就可以打开和关闭中断。
ARM处理器核包含一个CPSR寄存器。该寄存器包括一个全局中断禁止位,控制它打开和关闭中断。
处理器支持中断并且能产生定时中断。
ARM处理器都支持中断并能产生定时中断。
处理器支持容纳一定量数据的硬件堆栈。
对于一些只有10根地址线的8位控制器,芯片最多可访问1KB存储单元。在这样的条件下移植是比较困难的。
处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。
ARM处理器中汇编指令STMFD可以将所有寄存器压栈,对应也有一个出栈的指令LDMFD。
三、 实验内容
移植μC/OS-II内核到ARM处理器S3C44B0,在IDE中观察其运行状况。
实验步骤
1.基本的配置和定义
所有需要完成的基本配置和定义全部集中在OS_CPU.H中。
定义与编译器相关的数据类型
μC/OS-II为保证可移植性,程序中没有直接使用int、unsigned int等定义,而是自己定义了一套数据类型。
定义使能和禁止中断宏
定义栈的增长方向
用户规划好栈的增长方向后,定义符号OS_STK_GROWTH的值。
定义OS_TASK_SW宏
此宏是μC/OS-II从低优先级任务切换到高优先级任务时的调用,可采用两种方式定义:若处理器支持软中断,可使用软中断将中断向量指向OSCtxSW函数;也可直接调用OSCtxSW函数。
2.移植 OS_CPU_A.ASM汇编代码文件
OS_CPU_A.ASM汇编代码文件有4个汇编函数需要移植。
OSStartHighRdy()
该函数由OSStart()调用。OSStart()负责使就绪状态的任务开始运行,其中OSStartHighRdy()负责获取新任务的堆栈指针,并从堆栈指针中恢复新任务的所有处理器。
OSCtxSw()
该函数由OS_TASK_SW宏调用。OS_TASK_SW宏由OSSched()调用。OSSched()负责任务之间的切换。OSCtxSw()在OSSched()中负责将当前任务对应的处理器寄存器保存到堆栈中,并将任务中需要恢复的处理器寄存器从堆栈中恢复出来。
OSIntCtxSw()
该函数由OSIntExit()调用。OSIntExit()由OSTickISR()调用。OSIntCtxSw()负责在定时中断中任务之间的切换。
OSTickISR()
时钟节拍函数,由定时中断产生,主要负责在进入时保存处理器寄存器,完成任务切换,退出时恢复寄存器并返回。
3.移植 OS_CPU_C.C标准C代码文件
OS_CPU_C.C标准C代码文件中有6个函数需要移植。
OSTaskStkInit();
OSTaskCreatHook();
OSTaskDelHook();
OSTaskSwHook();
OSTaskStatHook();
OSTimeTickHook();
后面5个Hook函数又称为钩子函数,主要用来扩展μC/OS-II功能,但必须声明,并不一定要包含任何代码。唯一必须移植的函数是OSTaskStkInit函数,该函数在任务创建时被调用,它负责初始化任务的堆栈结构。
实验参考程序
1.OSStartHighRdy
ldr r4, =addr_OSTCBCur //获得当前任务的TCB地址
ldr r5, =addr_OSTCBHighRdy //获得高优先级任务的TCB地址
ldr r5, [r5] //获得堆栈指针
ld
您可能关注的文档
最近下载
- 随机过程(北大何书元)-课后习题集答案.pdf VIP
- 水文预报课程设计报告.doc
- 智慧职教平法识图与钢筋算量(宁波职院)章节测验作业期末考试答案.docx
- 中职外研版英语基础模块2全册教案教学设计.docx
- 理想 RISO 9050 7050 3050 7010 3010 闪彩印王中文技术维修手册 后面可以参考理想闪彩印王 EX7200 EX9050 EX9000 EX7250 系列中文维修手册 .pdf
- 索爱E-19蓝牙音箱说明书用户手册.pdf
- 地铁可视化接地管理系统安装工法19.3.6.doc
- 初中地理教学中学生学习兴趣的培养获奖科研报告论文.docx
- 情绪智力量表(Law,K.S.,Wong,C.S.&Song,L.,2004).doc
- 室外给排水施工方案.docx VIP
文档评论(0)