欢迎来到天天文库
浏览记录
ID:44872262
大小:1.01 MB
页数:11页
时间:2019-11-01
《详细的S3C2440的ucOSII和ucGUI移植过程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于S3C2440的uc/OS-II和uc-GUI移植和应用实验目的:1.熟悉ARM体系结构2.深入学习操作系统原理3.增强动手实践能力实验平台:ARM9体系结构处理器—S3C2440飞凌嵌入式开发板—FL2440(由于本实验大部分在宿舍完成,故采用了自己的嵌入式开发板作为平台,硬件与实验箱基本相似)功能实现主要功能是利用uc/OS-II的多任务调度功能和uc-GUI提供的图形函数接口,编写一个Uart传输测试程序。通过Uart协议,传输PC机键盘输入的数据,在开发板的LCD上显示出来。同时实现了字符串移动和现实系统信息的附加功能。注:本实验中,移植代码部分参考了网络上的一些相关文章,应
2、用程序部分全部由自己编写完成。实验原理:1.背景介绍(1)ARM9(S3C2440) ARM9系列处理器是英国ARM公司设计的主流嵌入式处理器。S3C2440是三星公司生产的基于ARM9体系结构的处理器,能够运行linux、wince等大型操作系统,构成非常典型的cpu+os嵌入式系统。[1](2)uc/OS-IIuc/OS是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。uc/OS-II是一个实时操作系统内核,它包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。是一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号
3、量,邮箱,消息队列,内存管理,中断管理等。(3)uc-GUIuC/GUI是Micrium公司开发的通用的嵌入式用户图形界面软件。它给任何使用图形LCD的应用程序提供独立于处理器和LCD控制器之外的有效的图形用户接口。可以应用于单一任务环境,也可以应用于多任务环境中。uC/GUI能够应用于任何LCD控制器和CPU的任何尺寸的物理显示或者模拟显示中。2.移植原理(1)uc/OS-II移植为了方便移植,大部分的uC/OSII代码是用c语言写的,但仍需要用c和汇编语言写一些与处理器相关的代码,这是因为uC/OSII在读写处理器寄存器时只能通过汇编语言来实现。由于uC/OSII在设计时就已经充分考
4、虑了可移植性,所以uC/OSII的移植相对来说是比较容易的。移植主要涉及的文件。(具体移植代码见后文附录)(a)设置与处理器及编译器相关的代码[OS_CPU.H]这部分代码主要实现一些数据类型的定义。不同的编译器会使用不同的字节长度来表示同一数据类型,所以要定义一系列数据类型以确保移植的正确性。下面是uC/OSII定义的一部分数据类型。typedefunsignedcharBOOLEAN;/*布尔型数据类型*/ typedefunsignedcharINT8U;/*无符号8位*/ typedefsignedcharINT16S;/*带符号8位*/ typedefunsignedin
5、tINT16U;/*无符号16位*/……uC/OSII需要先关中断再访问临界区的代码,并且在访问完后重新允许中断。uC/OSII定义了两个宏来禁止和允许中断:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),本移植实现这两个宏的汇编代码。 #defineOS_ENTER_CRITICAL()__asm{blARMDisableInt}//ARMDisableInt()#defineOS_EXIT_CRITICAL()__asm{blARMEnableInt}//ARMEnableInt()其中ARMDisableInt和ARMEnableInt两个函数在24
6、40slib.s里面实现(b)用C语言实现与处理器任务相关的函数[OS_CPU_C.C]这部分代码最主要的功能是实现一个系统的堆栈初始化函数OS_STK*OSTaskStkInit(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT16Uopt)其他的一些操作系统的钩子函数也在这里定义,如:voidOSTaskCreateHook(OS_TCB*ptcb);等等,用来实现操作系统的扩展功能。由于本实验没有使用到这些钩子函数,故在这里只定义成空函数即可。(c)处理器相关部分汇编实现这部分代码是移植的核心内容,主要实现操作系统的任务调度等核心功能。
7、a)OSStartHighRdy() 该函数在OSStart()多任务启动之后,负责从最高优先级任务的TCB控制块中获得该任务的堆栈指针sp,通过sp依次将CPU现场恢复,此时系统就将控制权交给用户创建的该任务的进程,直到该任务被阻塞或者被其他更高优先级的任务抢占了CPU。该函数仅仅在多任务启动时被执行一次,用来启动第一个,也就是最高优先级的任务执行。 b)OSCtxSw() 该函数是任务级的上下文切换函数,在任务因为被阻塞而
此文档下载收益归作者所有