实验四μCOS-II移植实验.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档