嵌入式系统实验二

上传人:M****1 文档编号:485245967 上传时间:2023-11-23 格式:DOCX 页数:15 大小:84.37KB
返回 下载 相关 举报
嵌入式系统实验二_第1页
第1页 / 共15页
嵌入式系统实验二_第2页
第2页 / 共15页
嵌入式系统实验二_第3页
第3页 / 共15页
嵌入式系统实验二_第4页
第4页 / 共15页
嵌入式系统实验二_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《嵌入式系统实验二》由会员分享,可在线阅读,更多相关《嵌入式系统实验二(15页珍藏版)》请在金锄头文库上搜索。

1、实验二 嵌入式操作系统程序设计班级:0810805姓名:谭 明 李学号:08200515一、实验目的1. 了解卩C/OS-II内核的主要结构。2. 掌握卩C/OS-II程序设计的基本方法。3. 学习使用嵌入式系统绘图的API函数。理解绘图设备上下文(DC)在多任务操作系 统中的作用。会使用绘图设备上下文(DC)在屏幕上绘制一个圆角矩形和一个圆。 了解绘制动画防止闪烁的基本原理,可以实现无闪烁的动画。4. 学习使用系统的消息循环。掌握如何通过系统的消息循环来响应键盘任务的消息, 同时学会使用图形模式下的液晶屏文字显示函数。二、实验内容1. 学习卩C/OS-II的编程方法。2. 编写几个简单任务,

2、在超级终端上观察任务的切换。3. 通过使用嵌入式系统的绘图API函数,首先,在屏幕上绘制一个圆角矩形和一个整 圆。然后,再在屏幕上无闪烁的绘制一个移动的正弦波。4. 通过使用消息队列接收键盘任务发出的按键消息,并把对应按键的字符显示在液晶 屏和PC机的终端上。三、预备知识1. 掌握在ADS1.2集成开发环境中编写和调试程序的基本过程。2. 了解ARM7处理器的结构。3. 了解卩C/OS-II系统结构。四、实验设备及工具硬件:ARM嵌入式开发平台、用于ARM7TDMI的J TAG仿真器、PC机。软件:PC机操作系Win2000、ADS1.2集成开发环境、仿真器驱动程序、超级终端通 讯程序。五、实

3、验原理()pC/OS-II程序编写基础为了使pC/OS-II可以正常运行,硬件初始化和配置文件也是必须的。STARTUP目录 下的文件还包括中断处理,时钟,串口通信等基本功能函数。在文件main.c中给出了应用 程序的基本框架,包括初始化和多任务的创建,启动等。在pC/OS-II中创建一个任务的步骤如下:1)在程序开头定义任务堆栈,任务函数声明和任务优先级:OS_STK TaskName_StackSTACKSIZE=0, ; /任务堆栈void TaskName(void *Id); /任务函数 #define TaskName_Prio N /任务优先级2 )在皿ain ()函数中调用OS

4、Start ()函数之前用下列语句创建任务: OSTaskCreate(TaskName,(void*)0,(OS_STK*)&TaskName_StackSTACKSIZE-1, TaskName_Prio);OSTaskCreate()函数的原型是:INT8U OSTaskCreate (void (*task)(void *pd), void *p_arg, OS_STK *ptos,INT8U prio);需要将任务函数TaskName,任务堆栈TaskName_Stack,任务优先级TaskName_Prio三 个参数传给OSTaskCreate()函数。根据任务函数的内容决定堆栈大

5、小,宏STACKSIZE定义 为4KB,可以在此基数上乘倍。任务优先级越高,TaskName_Prio值越小;卩C/OS-II可以 管理64个任务,由OSInit()创建的空闲任务的优先级最低为63; pC/OS-II保留4个最高和4 个最低优先级,用户任务可以使用其余56 个优先级值。3)编写任务函数内容:void TaskName(void *Id)/添入任务初始化语句for(;) / 添入任务循环内容OSTimeDly(SusPendTime);/挂起一定时间,以使其他任务可以占用CPU卩C/OS-II至少要有一个任务,这里首先创建一个系统任务SYS_Task,其中由语句 OSRunni

6、ng=TRUE; /使能(1C/OS-II 运行uHALr_InstallSystemTimer(); 启动系统时钟和多任务切换。为了验证卩C/OS-II多任务切换的进行,再编写两个简单的任务,分别在超级终端上输出run taskl和run task2。可以参考main.c的结构创建多个不同功能的任务,观察个任务的切换。(二)完善的pC/OS-II开发框架需要说明的是, pC/OS-I 作为一个实时操作系统只提供了多任务调度等基本功能,这 在实际应用中显然是不够的。除了移植好的操作系统内核部分,还必须有文件系统,全部硬 件的驱动程序,图形API,控件函数,综合提高的消息函数以及几个系统必须的基

7、本任务, 象键盘,触摸屏, LCD 刷新等。有了这些, pC/OS-I 才能实现复杂的功能。特殊需求的 地方还需要像USB通信协议,TCP/IP协议等更复杂的软件模块。实验系统提供的pC/OS-II库文件中包含了上述大部分功能,基于库的开发变的非常简 单,在基本的程序框架下应用实验系统提供的丰富API函数即可。实际开发中,用户的工 程中无需包括pC/OS-II的源代码,只需要包括库文件即可。当然,用户也可以了解库中部 分代码的源文件,可以根据自己的需求就行重新编译,也可以对自己的一系列源文件生成一 个专门的库,方便自己后续工作。pC/OS-II的开发中,应用程序和操作系统是绑在一起编译的,所生

8、成的system.bin文 件是唯一的可执行文件,其中包括了所需要的LiC/OS-II代码和被用到的驱动程序等函数代 码,以及应用程序的代码。system.bin文件是存放在平台的16M FLASH中的,在系统启动 时由BIOS依靠文件系统从FLASH中读入到SDRAM中,然后把控制转移到该代码上,完 成所谓的引导。而BIOS是存储在另外的ROM中的。本实验提供了基于库的lC/OS-II开发框架,可以打开工程进行了解。图3-3是ADS环 境下看到的该框架的文件组成,还可以展开各目录查看更多的文件信息。可以看出,STARTUP下的都是最基本的硬件初始化和配置文件;Ucosib.a是ADS环 境下

9、的库;SRC是用户编写的工程文件;lC/OS-II下都是系统用到的头文件,其中ADD下 是添加的基本系统任务和消息函数的相关头文件。 INC 下主要是硬件驱动程序的头文件。 Init下的几个文件是ADS环境下配置存储器及堆栈的,和pC/OS-II无直接关系。打开Main.c文件,可以看到一个应用工程的基本框架,在这个实验中,所谓的应用很 简单,就是在LCD上显示“Hello world!”大部分代码都是框架。用户可以在这些代码的 基础上进行应用开发,创建新任务,编写必要的函数。当然,如果针对特定的项目有相对独 立并集中的一些函数则最好新建源文件和头文件,以方便管理,这些用户新建的源文件可以 放

10、到SRC目录下,在编译环境下用Add Files命令加入对应位置。下面是Main ()函数中的内容:int main(void)ARMTargetInit(); /开发板初始化 OSInit(); /操作系统初始化 uHALr_ResetMMU(); /复位 MMU LCD_Init(); /初始化LCD 模块 LCD_printf(LCD initialization is OKn);/向液晶屏输出数据 initOSGUI(); /初始化图形界面LoadFont(); /调Unicode 字库LoadConfigSys(); /使用config.sys文件配置系统设置LCD_printf(C

11、reate task on yC/OS-II .n);OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_StackSTACKSIZE*8-1, Main_Task_Prio); / 创建系统任务OSAddTask_Init(); /创建系统附加任务LCD_printf(Starting yC/OS-I .n);LCD_printf(Entering graph mode.n);LCD_ChangeMode(DspGraMode); /变LCD 显示模式为图形模式InitRtc(); / 初始化系统时钟Nand_Rw_Sem=0SSemCrea

12、te(1); /创建Nand-Flash读写控制权旗语,初值为1满足互斥 条件OSStart();/操作系统任务调度开始/不会执行到这里return 0;main()函数中调用了必要的初始化函数,创建了系统任务和用户任务,然后启动系统任 务调度。建议用户不要改动该函数中的初始化过程,但可以按本实验第一部分所述的任务创 建方法来创建更多的任务,注意每个任务必须具有不同的优先级。(三)绘图的API函数请查阅附录API函数,在Display.h中定义了和绘图显示有关的数据类型和函数原型。 在卩C/OS-II系统环境下,绘图必须通过使用绘图设备上下文(DC)来实现。绘图设备上下 文(DC)中包括了与绘

13、图相关的信息,比如:画笔的宽度、绘图的原点等等。这样,在多 任务系统中,不同的任务通过不同的绘图设备上下文(DC)绘图才不会互相影响。绘图设 备上下文(DC)的结构定义如下:typedef structint DrawPointx;int DrawPointy; /绘图所使用的坐标点int PenWidth; /画笔宽度U32 PenMode; /画笔模式COLORREF PenColor; /画笔的颜色int DrawOrgx; /绘图的坐标原点位置 int DrawOrgy;int WndOrgx; /绘图的窗口坐标位置int WndOrgy;int DrawRangex; /绘图的区域范

14、围int DrawRangey;structRECT DrawRect; /绘图的有效范围U8 bUpdataBuffer; /是否更新后台缓冲区及显示U32 Fontcolor; /字符颜色 DC,*PDC与绘图设备上下文(DC)有关的函数有:initOSDC()用来初始化系统的DC,为DC动 态内存开辟空间;CreateDC()和DestoryDC(PDC pdc)分别用来创建和删除DC,前者返回所创 建的DC指针,后者则释放DC的内存空间。和绘图有关的函数有TextOut(), LineTo(), FillRect(), Circle。,ShowBmp()等常见的图 形函数,用户可以查看

15、附录API函数显示部分,尝试使用这些函数。在卩C/OS-II操作系统中,液晶显示屏的刷新是通过Lcd_Fresh_Task任务完成的,该任 务是在系统附加任务初始化函数OSAddTask_Init()中定义的,该函数开辟了LCD刷新任务, 触摸屏任务,键盘任务等。绘图首先是在绘图缓冲区中完成的,然后系统自动(也可以通过 设置绘图设备上下文参数,不让系统自动刷新)向Lcd_Fresh_Task发送更新消息。其流程 图如图 4-1所示:图4-1 绘图流程因为绘图是在后台进行的,绘制完成之后,再更新到液晶屏上,所以,在绘图的时候不 用担心反覆的擦除屏幕会引起屏幕的闪烁,这样,可以很方便的实现动画无闪烁的显示。绘 制完一次图形以后,必须要使用OSTimeDly()给出一定时间的延时(推荐用200),同时使 Main_Task任务主动让出对CPU的控制权,使Lcd_Fresh_Task任务可以完成刷新。 (四)图形系统的消息循环通常在多任务操作系统中,任务之间的通讯是通过发送消息来实现的。消息队列是 卩C/OS-II操作系统的一种通信机制,它可以使一个任务或者中断服务程序向另一个任务发 送以指针方式定义的变量。卩C/OS-II操作系统提供了若干对消息队列进行操作的函数,例 如0SQCre

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

当前位置:首页 > 学术论文 > 其它学术论文

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