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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于S3C2440的uc/OS-II和uc-GUI移植和应用 实验目的: 熟悉ARM体系结构 深入学习操作系统原理 增强动手实践能力 实验平台: ARM9体系结构处理器—S3C2440 飞凌嵌入式开发板—FL2440(由于本实验大部分在宿舍完成,故采用了自己的嵌入式开发板作为平台,硬件与实验箱基本相似) 功能实现 主要功能是利用uc/OS-II的多任务调度功能和uc-GUI提供的图形函数接口,编写一 个Uart传输测试程序。 通过Uart协议,传输PC机键盘输入的数据,在开发板的LCD上显示出来。同时实现 了字符串移动和现实系统信息的附加功能。 注:本实验中,移植代码部分参考了网络上的一些相关文章,应用程序部分全部由自己编写完成。 实验原理: 1. 背景介绍 (1) ARM9(S3C2440)  ARM9系列处理器是英国ARM公司设计的主流嵌入式处理器。S3C2440是三星公司生产的基于ARM9体系结构的处理器,能够运行linux、wince等大型操作系统,构成非常典型的cpu+os嵌入式系统uc/OS是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。uc/OS-II是一个实时操作系统内核,它包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。uC/GUI是Micrium公司开发的通用的嵌入式用户图形界面软件。它给任何使用图形LCD的应用程序提供独立于处理器和LCD控制器之外的有效的图形用户接口。可以应用于单一任务环境,也可以应用于多任务环境中。uC/GUI能够应用于任何LCD控制器和CPU的任何尺寸的物理显示或者模拟显示中。为了方便移植,大部分的uC/OS II代码是用c语言写的,但仍需要用c和汇编语言写一些与处理器相关的代码,这是因为uC/OS II在读写处理器寄存器时只能通过汇编语言来实现。由于uC/OS II在设计时就已经充分考虑了可移植性,所以uC/OS II的移植相对来说是比较容易的。设置与处理器及编译器相关的代码[OS_CPU.H]不同的编译器会使用不同的字节长度来表示同一数据类型,所以要定义一系列数据类型以确保移植的正确性。下面uC/OS II定义的一部分数据类型。typedef unsigned char BOOLEAN;   typedef unsigned char INT8U;/*无符号8位*/   typedef signed char INT16S;/*带符号8位*/   typedef unsigned int INT16U;/*无符号16位*/uC/OS II需要先关中断再访问临界区的代码,并且在访问完后重新允许中断。uC/OS II定义了两个宏来禁止和允许中断:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),本移植实现这两个宏的汇编代码。   #define OS_ENTER_CRITICAL() __asm{bl ARMDisableInt}//ARMDisableInt() #define OS_EXIT_CRITICAL() __asm{bl ARMEnableInt}//ARMEnableInt()用C语言实现与处理器任务相关的函数[OS_CPU_C.C]OS_STK * OSTaskStkInit ( void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt) 其他的一些操作系统的钩子函数也在这里定义,如: void OSTaskCreateHook (OS_TCB *ptcb); 等等,用来实现操作系统的扩展功能。 由于本实验没有使用到这些钩子函数,故在这里只定义成空函数即可。 处理器相关部分汇编实现a) OSStartHighRdy()   该函数在OSStart()多任务启动之后,负责从最高优先级任务的TCB控制块中获得该任务 的堆栈指针sp,通过sp依次将CPU现场恢复,此时系统就将控制权交给用户创建的该任务的进程,直到该任务被阻塞或者被其他更高优先级的任务抢占了 CPU。该函数仅仅在多任务启动时被执行一次,用来启动第一个,也就是最高优先级的任务执行。   b)OSCtxSw()   该函数是任务级的上下文切换函数,在任务因为被阻塞而主动请求与CPU调度时执行,主要工作是 先将当前任务的CPU现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的CPU现场,使之继续执行,从而完成一次任务切 换。   ) OSIntExit()   该函数是中断级的

文档评论(0)

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

1亿VIP精品文档

相关文档