详细的S3C2440的ucOSII和ucGUI移植过程

上传人:夏** 文档编号:501971782 上传时间:2022-11-27 格式:DOC 页数:10 大小:156KB
返回 下载 相关 举报
详细的S3C2440的ucOSII和ucGUI移植过程_第1页
第1页 / 共10页
详细的S3C2440的ucOSII和ucGUI移植过程_第2页
第2页 / 共10页
详细的S3C2440的ucOSII和ucGUI移植过程_第3页
第3页 / 共10页
详细的S3C2440的ucOSII和ucGUI移植过程_第4页
第4页 / 共10页
详细的S3C2440的ucOSII和ucGUI移植过程_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《详细的S3C2440的ucOSII和ucGUI移植过程》由会员分享,可在线阅读,更多相关《详细的S3C2440的ucOSII和ucGUI移植过程(10页珍藏版)》请在金锄头文库上搜索。

1、基于S3C2440的uc/OS-II和uc-GUI移植和应用实验目的:1.2.3.熟悉ARM体系结构深入学习操作系统原理增强动手实践能力实验平台:ARM9体系结构处理器S3C2440飞凌嵌入式开发板FL2440(由于本实验大部分在宿舍完成,故采用了自己的嵌入式开发板作为平台,硬件与实验箱基本相似)功能实现主要功能是利用uc/OS-II的多任务调度功能和uc-GUI提供的图形函数接口,编写一个Uart传输测试程序。通过Uart协议,传输PC机键盘输入的数据,在开发板的LCD上显示出来。同时实现了字符串移动和现实系统信息的附加功能。注:本实验中,移植代码部分参考了网络上的一些相关文章,应用程序部分

2、全部由自己编写完成。实验原理:(1) 1背景介绍ARM9(S3C2440)(2) ARM9系列处理器是英国ARM公司设计的主流嵌入式处理器。S3C2440是三星公司生产的基于ARM9体系结构的处理器,能够运行linux、wince等大型操作系统,构成非常典型的cpu+os嵌入式系统。1uc/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在设计时就已经充分考虑了可移植性,所以uC/O

4、SII的移植相对来说是比较容易的。(a) 移植主要涉及的文件。(具体移植代码见后文附录)设置与处理器及编译器相关的代码OS_CPU.H这部分代码主要实现一些数据类型的定义。不同的编译器会使用不同的字节长度来表示同一数据类型,所以要定义一系列数据类型以确保移植的正确性。下面是uC/OSII定义的一部分数据类型。typedefunsignedcharBOOLEAN;/*布尔型数据类型*/typedefunsignedcharINT8U;/*无符号8位*/typedefsignedcharINT16S;/*带符号8位*/typedefunsignedintINT16U;/*无符号16位*/uC/OS

5、II需要先关中断再访问临界区的代码,并且在访问完后重新允许中断。uC/OSII定义了两个宏来禁止和允许中断:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),本移植实现这两个宏的汇编代码。#defineOS_ENTER_CRITICAL()_asmblARMDisableInt/ARMDisableInt()(b) #defineOS_EXIT_CRITICAL()_asmblARMEnableInt/ARMEnableInt()其中ARMDisableInt和ARMEnableInt两个函数在2440slib.s里面实现用C语言实现与处理器任务相关的函数OS_CP

6、U_C.C这部分代码最主要的功能是实现一个系统的堆栈初始化函数OS_STK*OSTaskStkInit(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT16Uopt)其他的一些操作系统的钩子函数也在这里定义,如:voidOSTaskCreateHook(OS_TCB*ptcb);等等,用来实现操作系统的扩展功能。由于本实验没有使用到这些钩子函数,故在这里只定义成空函数即可。(c) 处理器相关部分汇编实现这部分代码是移植的核心内容,主要实现操作系统的任务调度等核心功能。a) OSStartHighRdy()该函数在OSStart()多任务启动之后,负

7、责从最高优先级任务的TCB控制块中获得该任务的堆栈指针sp,通过sp依次将CPU现场恢复,此时系统就将控制权交给用户创建的该任务的进程,直到该任务被阻塞或者被其他更高优先级的任务抢占了CPU。该函数仅仅在多任务启动时被执行一次,用来启动第一个,也就是最高优先级的任务执行。OSCtxSw()该函数是任务级的上下文切换函数,在任务因为被阻塞而主动请求与CPU调度时执行,主要工作是先将当前任务的CPU现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的CPU现场,使之继续执行,从而完成一次任务切换。b) OSIntExit()该函数是中断级的任务切换函数,在时钟中断ISR

8、中发现有高优先级任务在等待时,需要在中断退出后不返回被中断的任务,而是直接调度就绪的高优先级任务执行。其目的在于能够尽快让高优先级的任务得到响应,保证系统的实时性能。c) OSTickISR()该函数是时钟中断处理函数,主要任务是负责处理时钟中断,调用系统实现的OSTimeTick函数,如果有等待时钟信号的高优先级任务,则需要在中断级别上调度其执行。另外两个相关函数是OSIntEnter()和OSIntExit(),都需要在ISR中执行。22)uc-GUI移植移植uC/GUI主要集中在修改三个头文件和两个C文件。三个头文件都在Config下,分别是GUICon.h,GUITouchConf.h

9、,LCDConf.h;两个C文件一个是GUI_X.C(SampleGUI_X.C),.另外一个在GUILCDDriver目录下(LCDWin.c)(a) 修改头文件LCConf.h主要修改的地方:#defineLCD_XSIZE(320)#defineLCD_YSIZE(240)#defineLCD_BITSPERPIXEL(16)/16Bpp#defineLCD_CONTROLLER1375LCD_XSIZE,LCD_YSIZE是对应LCD的尺寸大小LCD_BISPERPIXEL指定每象素的位的数量LCD_CONTROLLER是LCD控制器(b) 修改头文件GUI_Conf.h#ifndef

10、GUICONF_H#defineGUICONF_H/*是否支持OS*/(0)/*是否支持触摸屏*/#defineGUI_OS(1)#defineGUI_SUPPORT_TOUCH#defineGUI_SUPPORT_UNICODE#defineGUI_DEFAULT_FONT(1)/*是否支持ASCII/UNICODE*/&GUI_Font6x8/*选择一个默认的字体*/#defineGUI_ALLOC_SIZE1024*1024/*动态内存的大小*/#defineGUI_WINSUPPORT(1)#defineGUI_SUPPORT_MEMDEV#defineGUI_SUPPORT_AA(0

11、)/*是否支持WM(视窗管理器)*/(1)/*是否支持存储设备*/*是否支持反锯齿*/#endif在LCD的最基本操作就是在某一个坐标上画点,其他的操作都是画点操作延伸出来的。uC/GUI的所有对LCD的操作也是基于这个动作。在FL2440_LCD_for_GUI.c文件中实现开发板LCD的基本操作函数,与uc-GUI中定义的函数对接。如:voidFL2440_LCD_SetPixel(U32x,U32y,U16c)PutPixel(x,y,c);/*基本的LCD画点函数*/U16FL2440_LCD_GetPixel(U32x,U32y)return(GUI_Point(x,y);/*基本的

12、LCD读点函数*/voidFL2440_LCD_Off(void)Lcd_EnvidOnOff(0);/*LCD开关*/voidFL2440_LCD_On(void)Lcd_EnvidOnOff(1);/*LCD开关*/3实验过程:前面介绍了基本的移植原理,要想让开发板能够正常工作,还需要一些额外的工作。1启动代码采用三星公司针对2440的启动代码,基本无需修改。2应用程序前面介绍的uc/OS-II只是一个操作系统的最基本内核,要实现具体功能,要求开发人员自己编写相关的应用程序。本实验中,应用程序在主函数文件finalmain.c中实现。主要功能是利用uc/OS-II的多任务调度功能和uc-G

13、UI提供的图形函数接口,编写一个Uart传输测试程序。通过Uart协议,传输PC机键盘输入的数据,在开发板的LCD上显示出来。同时实现了字符串移动和现实系统信息的附加功能。主函数如下:voidMain()/系统时钟,LCD,Uart,GUI以及uc/OS-II的初始化cpu_init();FL_Lcd_Init();Uart_Init(0,115200);Uart_Printf(begin!n);GUI_Init();GUITASK_Init();OSInit();OSTimeSet(0);/创建起始任务OSTaskCreate(TaskStart,0,&TaskStartSTKTaskStk

14、Leath-1,NormalTaskPrio+13);/创建信号量,用于在文本框输入满后清除文本框内容使用Cls=OSSemCreate(1);OSStart();voidTaskStart(void*pdata)/起始任务/设置系统时钟节拍Init_Timer4();/初始化统计任务OSStatInit();/创建任务/*Task_Text为创建文本框任务,在LCD上画出一个文本框,同时实现在文本框输入满的时候清楚文本框内容*/OSTaskCreate(Task_Text,0,&Task_Text_StkTaskStkLeath-1,NormalTaskPrio);/*Task_SideTe

15、xt任务,在LCD侧边处现实操作系统名称及版本,并向上移动*/OSTaskCreate(Task_SideText,0,&Task_SideText_StkTaskStkLeath-1,NormalTaskPrio+3);/*Task_Info任务,在文本框下方显示系统信息,包括CPU使用率,系统任务切换频率,系统开机时间*/OSTaskCreate(Task_Info,0,&Task_Info_StkTaskStkLeath-1,NormalTaskPrio+5);/*Task_Title任务在文本框上方滚动现实提示信息*/OSTaskCreate(Task_Title,0,&Task_Title_StkTaskStkLeath-1,NormalTaskPrio+6);/*Task_Uart任务,从Uart串口读取数据显示在文本框中*/OSTaskCreate(Task_Uart,0,&Task_Uart_StkTaskStkLeath-1,NormalTaskPrio+8);/*在文本框中现实位图,(可选)*/OSTaskCreate(Task_Bmp,0,&Task_Bmp_StkTaskStkLeath-1,NormalTaskPrio+7);OSTaskDel(OS_PRIO_SELF);Uart_

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号