欢迎来到天天文库
浏览记录
ID:30885049
大小:134.55 KB
页数:7页
时间:2019-01-03
《实验四μcos-ii移植实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验五UC/OS-II移植实验—、实验目的•了解》C/OS-II移植条件和内核基本结构。•掌握将UC/OS-II内核移植到ARM7处理器上的方法和步骤。二、实验原理1.uC/OS-II文件体系pC/OS-II的文件体系结构见图1,其中应用软件层是基于uC/OS-II上的代码。nC/OS-II包括3个部分:1)核心代码部分:这部分代码与处理器无关,包括7个源代码文件和1个头文件。它们负责的功能是内核管理、事件管理、消息队列管理、存储管理、消息管理、信号量处理、任务调度和定时管理。2)设置代码部分:包括2个头文件
2、,用来配置事件控制块的数目以及是否包含消息管理相关代码等。3)处理器相关的移植代码部分:包括1个头文件、1个汇编文件和1个C代码文件。在uC/OS-II的移植过程中,用户所需关注的就是这部分文件。应用软件(用户代码)PC/0S—II与处理器无关的代码OS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q・COS_SEM・COS_TASK.COSTIME.CklC/OS-II配置与应用相关的代码INCLUDE・HOS_CFG.HUC/OS-II移植(与处理器相关的代码
3、)OS_CPU_A.ASMOS_CPU.C.COS_CPU.H软届分硬件部分,,CPU定时器图1nC/OS-II文件体系结构2.UC/OS-II移植条件1)处理器的C编译器能产生可重入代码。可重入代码指的是可以被多个任务同时调用,而不会破坏数据的一段代码;或者说代码具有在执行过程屮打断后再次被调用的能力。2)用C语言就可以打开和关闭中断。ARM处理器核包含一个CPSR寄存器。该寄存器包括一个全局中断禁止位,控制它打开和关闭中断。3)处理器支持屮断并且能产生定时屮断。ARM处理器都支持中断并能产生定时屮断。3)
4、处理器支持容纳-定量数据的硬件堆栈。对于一些只有10根地址线的8位控制器,芯片最多可访问1KB存储单元。在这样的条件下移植是比较困难的。4)处理器有将堆栈指针和其他CPU寄存器读岀和存储到堆栈或内存中的指令。ARM处理器中汇编指令STMFD可以将所有寄存器压栈,对应也有一个出栈的指令LDMFDo三、实验内容移植nC/OS-II内核到ARM处理器S3C44B0,在IDE中观察其运行状况。四、实验步骤1.基本的配置和定义所有需要完成的基本配置和定义全部集中在OS_CPU.H中。1)定义与编译器相关的数据类型uC/
5、OS-II为保证可移植性,程序中没有直接使用int.unsignedint等定义,而是自己定义了一套数据类型。2)定义使能和禁止中断宏3)定义栈的增长方向用户规划好栈的增长方向后,定义符号0S_STK_GROWTH的值。4)定义OS_TASK_SW宏此宏是uC/OS-II从低优先级任务切换到高优先级任务时的调用,可采用两种方式定义:若处理器支持软中断,可使用软中断将中断向量指向OSCtxSW函数;也可直接调用OSCtxSW函数。2.移植OS_CPU_A.ASM汇编代码文件OS_CPU_A.ASM汇编代码文件有
6、4个汇编函数需要移植。1)OSStartHighRdy()该函数由OSStan()调用。OSStart()负责使就绪状态的任务开始运行,其中OSStartHighRdy()负责获取新任务的堆栈指针,并从堆栈指针中恢复新任务的所有处理器。2)OSCtxSw()该函数rtlOS_TASK_SW宏调用。OS_TASK_SW宏由OSSched()调用。OSSchcd()负责任务Z间的切换。OSCtxSw()在OSSched()屮负责将当前任务对应的处理器寄存器保存到堆栈中,并将任务中需要恢复的处理器寄存器从堆栈屮恢复
7、出来。3)OSIntCtxSw()该函数由OSIntExit()调用。OSIntExit()由OSTicklSR()调用。OSIntCtxSw()负责在定时中断中任务之间的切换。4)OSTicklSR()时钟节拍函数,由定时中断产生,主要负责在进入时保存处理器寄存器,完成任务切换,退11!吋恢复寄存器并返回。3.移植OS_CPU_C.C标准C代码文件OS_CPU_C.C标准C代码文件中有6个函数需要移植。1)OSTaskStklnit();2)OSTaskCreatHook();3)OSTaskDelHook
8、();1)OSTaskSwHook();1)OSTaskStatHook();2)OSTimeTickHook();后面5个Hook函数又称为钩子函数,主要用来扩展UC/OS-II功能,但必须声明,并不一定要包含任何代码。唯一必须移植的函数是OSTaskStklnit函数,该函数在任务创建时被调用,它负责初始化任务的堆栈结构。五、实验参考程序1・OSSlartHighRdyldrr4,=addr_O
此文档下载收益归作者所有