嵌入式操作系统---Windows_CE-天津大学-36页精选文档

合集下载

天津大学嵌入式系统——Blinky实验

天津大学嵌入式系统——Blinky实验

Blinky实验一、建立Keil工程1.选择Project→New uVision Project命令,弹出Create New Project 对话框,指定工程路径并在文件名文本框中输入Blinky,如图1所示。

图12.单击“保存”按钮,弹出Select Device for Target 窗口,在左侧的列表框中选择CPU的类型(Philips的LPC2138芯片),右边对应出现该芯片的资源描述,如图2所示。

图23.单击OK按钮,出现如图3所示提示信息(是否复制启动代码到工程文件夹并添加文件到工程中)。

这里的启动代码是依据设置的编译器而生成的。

图34.单击是按钮添加启动代码,此时启动代码已经添加到工程中,左侧的Project Workspace 中显示添加的启动代码文件,双击Startup.s可查看代码,如图4所示。

图45.在工作空间中选中Target 1,单击右键从弹出菜单选择Add Group,分别添加System Calls 和 Source Code两个文件夹,然后右键从弹出菜单选择Add Files to Group“System Calls/Source Code”命令分别为其添加retarget.c和blinky.c文件,如图5所示。

图5二、进行工程配置1.在工作空间选择Target1 右键选择Options for Target‘Target1’命令,弹出对话框如图6所示,设置Xtal为8MHz。

图62.单击Output标签,再单击Create Hex File前面的单选按钮,如图7所示。

可生成hex格式可执行文件,再单击Select Folder for Objects按钮,指定输出文件路径。

图73.单击Listing标签,再单击Select Folder for Listings按钮,指定生成的list文件的输出路径,然后单击Assembler Listing和Linker Listing前面的单选按钮,如图8所示。

WinCE实验教程之一嵌入式系统简介

WinCE实验教程之一嵌入式系统简介

WinCE实验教程之一嵌入式系统简介嵌入式这个词现在变得越来越流行,然而关于它的很多概念可能还有一大部分人不是很明确,在本文中,我们不追求具体的概念是否准确,而是要对其有一个准确的理解。

嵌入式系统是不同于常见计算机系统的一种计算机系统,它不以独立设备的物理形态出现,即它没有一个统一的外观,它的部件根据主体设备以及应用的需要嵌入在设备的内部,发挥着运算、处理、存储以及控制作用。

从体系结构上看,嵌入式系统主要由嵌入式处理器、支撑硬件和嵌入式软件组成。

其中嵌入式处理器通常是单片机或微控制器;支撑硬件主要包括存储介质、通信部件和显示部件等;嵌入式软件则包括支撑硬件的驱动程序、操作系统、支撑软件以及应用中间件等。

可见,嵌入式系统是一个很大的概念,一旦嵌入式处理器和支撑硬件选定了,那么工作最多的就集中在嵌入式软件当中了。

而嵌入式软件中的嵌入式操作系统部分和应用软件部分就成了重中之中。

它们与通常说的操作系统与应用软件的概念是相似的,但也有区别。

嵌入式操作系统是与应用环境密切相关的,从应用范围角度来看,大致可以分为通用型的嵌入式操作系统如Windows CE、VxWorks、嵌入式Linux等和专用型的嵌入式操作系统如Palm OS、Symbian等。

从实时性的角度看,大致可以分为实时嵌入式操作系统和一般嵌入式操作系统。

从原理上说,嵌入式操作系统仍旧是一种操作系统,因此它同样具有操作系统在进程管理、存储管理、设备管理、处理器管理和输入输出管理几方面的基本功能,但是由于硬件平台和应用环境与一般操作系统的不同,那么它也有自身的特点,最大的特点就是可定制性,也就是它能够提供可配置或可剪裁的内核功能和其他功能,可以根据应用的需要有选择的提供或不提供某些功能以减少系统开销。

前已述及,微软公司的Windows CE操作系统就是一种嵌入式操作系统,它1996年开始发布Windows CE 1.0版本,2004年7月发布了Windows CE .NET 5.0版本,目前用得最多的是Windows CE .NET 4.2版本,其发展速度也是很快的,功能上自不必描述,它的主要应用领域有PDA市场、Pcket PC、Smartphone、工业控制、医疗等。

天津大学嵌入式系统实验报告

天津大学嵌入式系统实验报告

2013-2014-(2)-Embedded System
《嵌入式系统设计》
实验报告
成绩:
评阅人:
学院:计算机科学与技术
专业:计算机科学与技术
年级:2011级
学生:童浏靓/ 3011216104
邱碧茹/ 3011216076
日期:2014年5月
1.实验内容:
实验内容描述。

参考:《嵌入式系统实验指导书》
注:前几个实验汇总为一个实验报告,综合实验单独一个报告。

2.实验系统框图:
参考:《嵌入式系统实验指导书》
3.软件设计:(综合实验)
软件各组成部分的说明,整体软件流程图,可附少量你自己修改过的代码。

4.实验结果和效果描述:
对实验完成后的结果或效果进行描述。

5.实验心得:
你在本次实习中的心得体会或任何你想说明的其他问题。

WINDOWS CE嵌入式系统 第一章 Windows CE简介 课件

WINDOWS CE嵌入式系统 第一章 Windows CE简介 课件

WinCE能作什么: 汽车电子
BMW Citroën Clarion Co. Ltd. DaimlerChrysler
Fiat
Subaru Honda Hyundai Mitsubishi Toyota…
WinCE能做什么 : 其它


工业控制 机顶盒 医疗设备 银行ATM系统 放映机和大屏幕显示器 VoIP 设备 …
Embedded Linux


嵌入式Linux是一种开放源代码、软实时、 多任务的嵌入式操作系统。 它是在标准Linux的基础上针对嵌入式系统 进行内核裁剪和优化后形成的。这使它体 积更小、性能更高。
将Linux嵌入到各种设备中
1.3 Windows CE嵌入式操作系统
Windows CE 特性 Windows CE 的应用

发展阶段

嵌入式系统的构成和特点

构成:嵌入式处理器、嵌入式外围设备、嵌入式 操作系统、嵌入式应用软件。

嵌入式系统的3种应用模型
应用程序 (Application) 硬件(Hardware) 应用程序 (Application) 应用编程接口 (API) 操作系统 (OS) 硬件(Hardware) 应用程序 (Application) 应用编程接口 (API) 操作系统 (OS) 板级支持包 (BSP) 硬件(Hardware)
Windows CE 特点
3.Windows CE 支持实时性

桌面 Windows


Windows CE

不具有实时性
线程优先级256 级 中断嵌套 每个线程都有独立的时钟 处理优先级反转
Windows CE 特点

wince嵌入式操作系统教学大纲

wince嵌入式操作系统教学大纲

《WinCE嵌入式操作系统》课程代码:32030241学位课程/非学位课程:非学位课学时/学分:38/2.5先修课程:汇编语言、微机原理与接口技术、ARM体系结构适用专业:信息工程课程简介WinCE嵌入式操作系统是高等学校电类专业的一门重要的专业选修课,是深入学习专业课程的必备基础,其理论和方法是以EVC工具的使用、 Windows CE的开发技术以及VC语言的编程为基础研究嵌入式系统设计仿真和测试方法和实现。

开设WinCE嵌入式操作系统课程,不仅可以在原先ARM与嵌入式技术上,丰富学生嵌入式系统设计的知识,而且能够给信息工程类专业学生对嵌入式系统的设计,仿真和测试提供一个全新的手段和方法,并运用所学知识去分析、设计和测试嵌入式系统。

因此,WinCE嵌入式操作课程既是一门基础性课程,能培养学生扎实的程序设计基础;又是一门“工具”或“方法”性课程,能培养学生利用计算机软件对嵌入式系统的设计、仿真、时序仿真和硬件测试技术的能力和素质。

一、教学目标1、知识水平教学目标通过ARM体系结构设计课程的学习,学生应获得EVC技术和VC硬件编程语言的基本概念及其应用、EVC设计流程及其工具、VC基本语句和设计方法和设计优化等方面的基本概念、基本理论、基本方法和设计技能,为今后学习DSP等课程,以及从事嵌入式设计工作奠定必要的基础。

2、能力培养目标通过本课程的学习,学生应获得如下能力:(1)使用常用EVC工具的使用方法、Windows CE的开发技术以及VC语言的编程方法,同时能较好地使用VC语言设计简单的嵌入式系统,学会多线程和串口通信技术;(2)会应用EVC软件等常用软件对进行简单的嵌入式系统的设计;(3)主动探索和独立思考的能力,提高学生的嵌入式软件设计和创新意识。

3、素质培养目标通过本课程的学习,应注意培养学生以下素质:(1)善于对嵌入式开发过程进行合理的简化和量化,建立编程模型的素养;(2)能用准确、简明、规范的使用编程语言编程的素养;(3)深入理解嵌入式系统分析、设计、综合、测试基本方法,掌握用软件的方法解决嵌入式系统设计中的实际问题的方法与手段,对各种问题能以多角度探寻解决问题的道路的素养。

WindowsCE嵌入式系统

WindowsCE嵌入式系统

第6章 操作系统移植
……
编辑本段 回目录4.Windows CE的应用
由于Windows CE的特性,Windows CE的使用极为广泛,几乎覆盖了生活中的所有电气设备,如掌上PDA、移动计算设备、电视机顶盒、数字电视、车载电脑、数字相机、家庭自动化系统、安全系统、自动售货机、蜂窝式电话、消费电子设备、工业自动化仪表与医疗器械等等。
当今Windows CE最为著名的应用当属windows mobile平台,它包括PDA Pocket PC和SmartPhone(智能手机)。世界各大著名的电脑制造商都有基于Windows Mobile平台的产品。
相关图书
作者:何宗键
出版社:北京航空航天大学出版社
页码:364 页
·出版日期:2006年
ISBN:7810777939
条形码:9787810777933
包装版本:1
装帧:平装
开本:16开
内容简介
《Windows CE嵌入式系统》根据同济大学软件学院的“Windows CE嵌入式系统”课程讲义整理而成。介绍了基于Windows CE5.O平台的嵌入式软件开发。宏观上涵盖了完整的基于Windows CE的嵌入式系统开发流程。
在Windows CE系统下的开发可以分为应用程序的开发、操作系统设计、驱动程序设计以及操作系统的移植。
开发的工具一般是系统自带的开发平台Platform Builder 5.0,当然也可以在Visual Studio 2005、 Visual 2003或者eMbedded Visual C++ 4.0中开发。而且必须安装.NET Compact Framework来托管代码,而在VS2005(2003)中 开发时还必须装有相应的SDK。

天大嵌入式系统课件-2-嵌入式处理器

天大嵌入式系统课件-2-嵌入式处理器

2017/8/11
22
ARM CPU ISA的发展

ARM CPU 的指令集体系 ISA 发展到现在,先后有 V1, V2, V3, V4, V4T, V5TE, V5TEJ, V6, V7等主要的版本。
ARM V1~V3版本的处理器未得到大量应用, ARM处理器的大量泛应用是从其V4版本开始的 到目前V7是最新的版本,它也被称作CoreTex系 列。
ARM1156T2
ARM10™ Family
300 DMIPS
ARM1026E
ARM1026E
ARM9™ Family
150DMIPS
ARM920T/ARM922T ARM926EJ
ARM946E
ARM966E ARM968E
ARM7™ Family
ARM720T
ARM7TDMI
ARM7TDMI
• 按应用特征分类 – 应用处理器 • Application Processor – 实时控制处理器 • Real-time Controller – 微控制器 • Micro-controller
18
累加器 B寄存器 程序状态字 堆栈指针 数据指针(包括DPH,DPL) 口0 口1 口2 口3 中断优先级控制寄存器 中断允许控制寄存器 定时/计数器方式控制寄存器 定时/计数器控制寄存器
特殊功能寄存器 SFR(表二)
标识符 TH0 TL0 TH1 TL1 SCON SBUF PCON 名 称 地 址
2017/8/11 13
数据存储器示意图
03FFH
FFH 特殊功能 寄存器 SFR 80H 7FH 通用数据 存储器 00H 0100H 00FFH
数据 存储器 1024B

Windows CE 嵌入式系统 平台的构建与配置 实验一 辅助文档

Windows CE 嵌入式系统 平台的构建与配置 实验一 辅助文档

实验一Windows CE平台的构建与配置一.实验箱线缆的连接1.连接JTAG线缆:用JTAG线缆将EELIOD系统上的M-CON7(XSBase270-Moudule板上)接口与主机的并口相连。

具体如下图所示。

2.连接串口线缆:该系统使用M-CON5做调试串口。

请将系统所提供的串口线与EELIOD系统MOUDLE板上面的CON5直接相连,另外一端和PC主机上的串口连上。

具体如下图所示。

3.连接交叉的以太网线:用提供的交叉的网线把EELIOD系统上的LAN 口,E-CON14,与主机端网口连接起来。

4.连接电源线缆:用提供的220V电源线连接到220V进行供电。

(当前先不用连接USB Slave线)。

二.超级终端的设置在EELiod中,调试信息是通过串口输出的。

超级终端是一个通用的串行交互软件,很多嵌入式应用的系统有与之交换的相应程序,通过这些程序,可以通过超级终端与嵌入式系统交互,使超级终端成为嵌入式系统的“显示器”。

1.运行超级终端2. 键入一个新的连接的名称3. 选择串口1(或串口2)作连接用,然后按下OK按钮4. 参照下图配置串口1的特性,然后按下OK按钮三.使用H-Jtag烧写EBootH-JTAG软件是免费JTAG调试和Flasher擦写软件,通过并口线连接目标板。

此软件针对EEliod开发平台和XSBASE 270-S开发板(或其它PXA270的开发板),需要进行配置才能正常工作。

1.正常连接下载线到目标板,并给目标板上电。

点击开始菜单->H-JTAG->H-JTAG 运行程序,程序首次启动后,界面如下图3。

如果程序此时提示没有检测到目标板,则需要重新确认目标板是否上电,以及连接线是否连接好,然后点击工具栏上的第二个(放大镜形状的)按钮。

重新检测目标板。

知道能够正确检测到目标板才能进行下面操作。

注意,如果计算机用的并口不是LPT1,则需要在“setting”菜单中进行选择。

嵌入式操作系统嵌入式操作系统WinCEWinCE

嵌入式操作系统嵌入式操作系统WinCEWinCE

The success's road嵌入式操作系统 WinCE华清远见内容安排初识WinCE v WinCE广泛的行业应用 v WinCE方便的开发平台 v WinCE BSP的开发v v华清远见WinCE BSP培训课程华清远见初识WinCEWinCE的发展历程 v WinCE的系统特性 v WinCE的体系架构 v WinCE的系统分层结构v华清远见WinCE的发展历程CedarWindows CE 3.0 4/2000Pegasus/AlderWindows CE 1.0 11/1996MacallanWindows CE 5.0 8/2004Tomatin NMD FPSP1 SP2 2.11 2.12 BirchWindows CE 2.0 11/1997Jameson McKendric 4.2 4.1 TaliskerWindows CE .NET 4.0 1/2002YamazakiWindows CE 6 H2/2006华清远见WinCE的发展历程v 1996年,微软32位的WinCE 1.0;卡西欧推出第一款蛤壳式PDA.由于不够稳定而备受指 责. v 2000年,一个名为“共享源代码计划”的共享 成功商业模式在WinCE 3.0基础上推出; 此时 更多的硬件厂商HP、Compaq、Casio等加入 Pocket PC阵营的包括.它们的加入使该系统 逐渐走向成熟. v 2002年,WinCE4.0 继承了良好的发展势头. v 当前主流版本WinCE5.0 v 最新的版本WinCE6.0华清远见WinCE的系统特性v Microsoft 在嵌入式OS方面的主打产品. v 友好的用户界面. v 32位的多任务,多线程的系统. v 强劲的实时性 v 强大的联网能力, 移动特性 v 丰富的多媒体应用 v 支持多种主流CPU.(ARM,MIPS,X86…) v 精简化的WIN32API,便捷的开发环境华清远见WinCE的系统结构华清远见WinCE的体系架构v 借鉴了Windows2000/XP操作系统的设计风格. v 采用分层模型,使整个系统的层次更加 清晰,定制更加方便. v WinCE5.0同时能够支持32个进程. v WinCE5.0每个进程支持32M的虚拟内 存.华清远见WinCE的分层结构应用层 (如网络应用,文本编辑器等) 应用开发层 (MFC,ATL,COM/DCOM,.NET…) 应用支持库 (COMM,GWES,STORAGEMANAGE..) 操作系统层 (CoreDll,Schedule,Memory,Device) OEM适配层 (BSP,CSP,Drivers) 硬件层华清远见内容安排初识WinCE v WinCE广泛的行业应用 v WinCE方便的开发平台 v WinCE BSP的开发v v华清远见WinCE BSP培训课程华清远见WinCE广泛的行业应用华清远见WinCE广泛的行业应用v v v v v v v v移动电话/智能电话 数字成像设备 工业自动化设备 Internet/媒体设备 PDA/移动手持设备 住宅门禁/ POS设备 顶置盒 Web板设备华清远见内容安排初识WinCE v WinCE广泛的行业应用 v WinCE方便的开发平台 v WinCE BSP的开发v v华清远见WinCE BSP培训课程华清远见WinCE方便的开发平台v 开发工具: Platform Builder v 提供了所有的设计,创建,修改和调试的工具 v 提供了方便的系统定制和驱动开发功能 v 界面友好,使用方便.华清远见WinCE方便的开发平台华清远见内容安排v 初识WinCE v WinCE广泛的行业应用 v WinCE方便的开发平台 v WinCE BSP的开发 v 华清远见WinCE BSP培训课程华清远见WinCE BSP的开发v BSP的概念 v BSP的主要元素和基本功能 v BSP的开发流程华清远见WinCE BSP的概念v BSP 板级支持包(Board Support Package) v 组成: 启动程序(Boot loader),OEM适配层程序及驱动程序和配置文件 v 存在形式: 源文件,库文件和一些二进制 文件; v 用途:通过Platform Builder,根据特定的 BSP,可以生成针对不同开发板(SDB)的特 定的操作系统镜像;华清远见WinCE BSP的元素和功能华清远见WinCE BSP的元素和功能构成元素 Boot loader OEM adaptation layer 功能说明 完成将操作系统映像下 载到设备存储器的功能 和操作系统内核相连 接,完成硬件的初始化 和管理功能。

面向嵌入式应用的通用型操作系统Windows CE

面向嵌入式应用的通用型操作系统Windows CE
对于一个优先级只有一个任务的简单系统内核,上述的三种调度机制足以满足系统的实时要求。但对于Windows CE .NET这样复杂的、高性能的多任务实时内核,由于多个任务允许共用一个优先级,则相同优先级间的调度就要采取Windows CE .NET提供的时间片轮转方法来实现。具体实现。
(8)内置多媒体功能,具有可扩充的Compact Flash/MMC/SD插槽,通过扩展卡可实现多种功能。
(9)提供高级电源管理功能。
此外,Windows CE应用程序的集成开发环境eMbedded Visual C++拥有强大的开发和调试工具。利用其进行应用程序的开发,程序可运行于特定的平台,而不需要编写额外的代码,针对特定平台的代码转换工作由系统自动完成。
(1)逻辑内存管理
Windows CE .NET提供了三个层次的内存逻辑结构,即物理内存、虚拟内存和逻辑内存。Windows CE .NET采用分页式虚拟内存,通过32位的虚拟地址查找页表,映射到相应的ROM或RAM物理地址。为了避免以页为单位分配回收时造成的空间浪费,Windows CE .NET采用以堆为单位的逻辑内存管理机制,应用程序可以用比页小的很多的粒度来申请堆,系统可以根据应用程序的需要自动地增加堆的大小,而释放空间时,堆的削减也由系统自动完成。
3.2 系统管理机制
Windows CE作为目前掌上电脑的主流操作系统,在内存管理方面除了采用分配、回收、虚拟映射、调页等机制外,为了优化页的使用,系统在虚拟内存之上提供了逻辑内存管理机制。此外,Windows CE .NET是一个多任务的操作系统,在多任务调度方面,为了满足实时性的要求,Windows CE .NET采用基于动态优先级的抢占式调度算法,而对于相同优先级的任务采用了时间片轮转调度的算法。同一优先级的时间片轮转调度算法可作为基于优先级的可抢占调度算法的补充,以完成实时多任务系统的任务调度。

嵌入式操作系统-WindowsCE

嵌入式操作系统-WindowsCE
• 使用多个识别框时,偏 移参数在各个识别框之 间形成了一定的缓冲区, 以防止一个识别框内的 字符覆盖另一个识别框 的字符
xOrigin yOrigin cxOffset cyOffset
cxWriting
cyMid cyBase
cyWriting
cyBox
cxBox
嵌入式操作系统-WindowsCE
Windows CE支持的用户输入的 类型
• 键盘 • 鼠标 • 触摸屏和输入笔 • 输入面板 • 手写体识别
嵌入式操作系统-WindowsCE
键盘输入模型
键盘
扫描码
键盘设备驱动程序
虚键码 转换消息 字符
消息 系统消息队列
系统消息队列
消息 线程消息队列
消息
线程消息循环
消息
窗口过程
嵌入式操作系统-WindowsCE
virtual DWORD GetObjectType()=0;
• 坐标空间转换函数,坐标设备与设备空间 等价
• 时区变换API • 彩色光标
嵌入式操作系统-WindowsCE
基本GDI对象的基类-GDIOBJ
class GDIOBJ{
public: static HTABLE* m_pHTable; //句柄表
INT16 m_nCount;
//引用计数
UINT16 m_nIndex;
一起 – 窗口是消息传送的目的地
嵌入式操作系统-WindowsCE
其它消息处理函数
GetMessage DispatchMessage TranslateMessage
从消息队列中得到消息
将GetMessage找回的消息分发给一 个窗口程序
将一个键盘消息转换为字符消息

天大嵌入式系统课件-1-设计概述

天大嵌入式系统课件-1-设计概述

2020/7/24
20
基于IP核的SOC设计
可以将IP软核集成到FPGA芯片中, 并根据需要修改和扩充,从而可以在较短 的时间内实现相当复杂的功能。
IP核表现形式:HDL语言代码、原理图、网 表、针对特定EDA软件的格式、…
使用IP核可以大大降低硬件电路设计的复杂 性,缩短开发周期,降低成本。
除各种商用IP Core之外,目前还出现了 Open Core
根据IEEE(国际电气和电子工程师协会)的定义: 嵌入式系统是“用于控制、监视或者辅助操作机
器和设备的装置”(原文为:devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
18
IP核的概念
Intellectual Property Core,知识产权核
一种典型的知识产权产品,某种功能电路的较为理 想的实现方案。一般是预先定义好功能, 经过精心设 计、优化和验证过的逻辑功能模块或巨宏单元
IP Core的分类
微处理器IP Core:ARM、Power PC、… 存储器IP Core:RAM 处理器外设IP Core:LCD控制器、总线控制器、… 算法IP Core:加密算法、音视频编解码、… 通信控制器IP Core:网络控制、协议转换、…
完成用户需求 可操作性好,易于使用 满足应用的实时性要求 高度的可靠性、安全性 良好的应用环境适应能力 设计周期短,价格便宜 体积、重量、功耗满足要求 一定的通用性和可扩展性
2020/7/24
33
1.2.2 系统设计步骤
可分为5个阶段:
• 需求分析:确定设计任务和 设计目标,得出规格说明书; • 体系结构设计(又称为总体设 计):硬、软件及执行装置的功 能划分,系统硬、软件选型; • 硬件/软件设计:硬件、软件 执 行 装 置 设 计 分头设计; • 系统集成(又称为系统联调): 硬件、软件、执行装置集成在 一起,发现并改进错误; • 系统测试:对系统进行测试 ,检验其是否达到规格说明书 的要求。

天津大学嵌入式课程设计报告材料

天津大学嵌入式课程设计报告材料

嵌入式课程(设计文档)题目:数字电子时钟设计学院专业学号年级姓名2011 年 12月 14 日数字电子时钟设计一实现功能1 基本的数字时钟计时功能2 时间设定功能3 闹钟功能二设计思路数字时钟在lcd上显示,分为三个部分:时钟,分钟和秒钟,为照顾整体美观性,时钟和分钟为统一大字体,在lcd上用矩形拼凑而成,秒钟为小字体,在lcd上用线画出。

秒钟满60自动分钟加一,秒钟重计。

分钟满60后时钟自动加一,分钟重计。

时钟满二十四后自动清零。

在初始时候可以从键盘中输入时钟的时和分进行时间的设定,数字时钟在lcd上显示此时间并以此为基础进行计时。

此时钟还有设定闹钟功能,按下开关键sw2由超级终端开始提示输入闹钟时间并亮起led4,由键盘输入设定时间后当时间到达此设定时间则响起闹钟铃声,关闭sw2,则闹钟停止。

三硬件支持实验设计由MX1下的lcd显示屏,led灯,键盘,开关,音频播放器以及RS232串口通信支持。

四源代码分析#include "INCLUDES.H"#include "mx1_aitc.h"#include "IRQ.h"#include "mx1_gpio.h"#include "mx1_uart.h"#include <string.h>#include "misc.h"#include "mx1_lcdc.h"#include "mx1_ssi.h"#include "wave.h"#include "switch.h"#include "led.h"extern void OSStartTimeTick( void );extern void OSTickISR( void );int sec_1=0,sec_2=0, min_1,min_2,hour_1,hour_2,i;/* 定义所需要的变量*//* 下面定义几个函数*/void Showtime_sec_1(int sec_1)/* 用于显示秒钟第一位的函数*/{MX1_LCDC_DrawRect( 240,0, 280,40, 50, 50, LS_SOLID, FS_SOLID );/* 刷新秒钟第一位的屏幕*/switch(sec_1){case(0):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 5,250, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(1):MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );break;case(2):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,250,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(3):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, LS_SOLID );MX1_LCDC_DrawLine( 270, 5,270, 35, 31, FS_SOLID );MX1_LCDC_DrawLine(250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(4):MX1_LCDC_DrawLine( 250, 5,250, 20, 31, LS_SOLID );MX1_LCDC_DrawLine( 250, 20,270, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );break;case(5):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 5,250, 25, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 20,270,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );}}void Showtime_sec_2(int sec_2)/* 用于显示秒钟第二位的函数*/{MX1_LCDC_DrawRect( 280,0, 320,40, 50, 50, LS_SOLID, FS_SOLID );/* 刷新秒钟第二位的屏幕*/switch(sec_2){case(0):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(1):MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(2):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 20,290,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(3):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(4):MX1_LCDC_DrawLine( 290, 5,290, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(5):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 25, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 20,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(6):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 20,310,35, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(7):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(8):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(9):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );}}void Showtime_min_1(int min_1)///* 用于显示分钟第一位的函数*/{MX1_LCDC_DrawRect( 170,40, 240,200, 50, 50, LS_SOLID, FS_SOLID );/* 刷新分钟第一位的屏幕*/switch( min_1){case(0):MX1_LCDC_DrawRect( 170, 40,230, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 215, 40,230, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 215, 40,230, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 40,230, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 112,185, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );break;case(3):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 40,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(215, 40,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 112,230,200, 31,31, LS_SOLID,FS_SOLID );}}void Showtime_min_2(int min_2)/* 用于显示分钟第二位的函数*/{MX1_LCDC_DrawRect( 240, 40, 320, 200, 50, 50, LS_SOLID,FS_SOLID );/* 刷新分钟第二位的屏幕*/switch(min_2){case(0):MX1_LCDC_DrawRect( 250, 40,310, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 40,265, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 250, 40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 112,265, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID,FS_SOLID );break;case(3):MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 250, 40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 112,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(6):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 112,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(7):MX1_LCDC_DrawRect( 250, 40,310, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(8):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(9):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );}}void Showtime_hour_1(int hour_1)/* 用于显示时钟第一位的函数*/{MX1_LCDC_DrawRect( 10, 40, 70, 200, 50, 50, LS_SOLID, FS_SOLID );/* 刷新时钟第一位的屏幕*/switch( hour_1){case(0):MX1_LCDC_DrawRect( 10, 40,70, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 55, 40,70, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 185,70, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 55, 40,70, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 10, 40,70,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(10,112,70,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(55, 40,70, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 112,25, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 185,70,200, 31,31, LS_SOLID, FS_SOLID );}}void Showtime_hour_2(int hour_2)/* 用于显示时钟第二位的函数*/{MX1_LCDC_DrawRect( 90, 40, 80, 150, 50, 50, LS_SOLID, FS_SOLID );/* 刷新时钟第一位的屏幕*/switch(hour_2){case(0):MX1_LCDC_DrawRect( 90, 40,150, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 40,105, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 112,105, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(3):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 112,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(6):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 112,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(7):MX1_LCDC_DrawRect( 90, 40,150, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(8):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90,112,150,127, 31,31, LS_SOLID, FS_SOLID);MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(9):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID);MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90,112,150,127, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );}}void change(char tmp)/* 将从键盘输入的字符转为整数的函数*/{switch(tmp){case('0'):i=0;break;case('1'):i=1;break;case('2'):i=2;break;case('3'):i=3;break;case('4'):i=4;break;case('5'):i=5;break;case('6'):i=6;break;case('7'):i=7;break;case('8'):i=8;break;case('9'):i=9;}}/* 下面定义两个任务*/#define STK_SIZE_TASK1 256 /* 分配给任务的堆栈大小 */#define STK_SIZE_TASK2 256#define PRIO_TASK1 3 /* 任务的优先级 */#define PRIO_TASK2 4OS_STK StkTask1[STK_SIZE_TASK1]; /* 为任务分配堆栈空间 */OS_STK StkTask2[STK_SIZE_TASK2];void YourTask1( void *pdata )/* 任务一用于显示从键盘输入时间和基本的时钟功能*/{char tmp1,tmp2,tmp3,tmp4;IRQ_Register( OSTickISR, TIMER1_INT ); /* 开启uC/OS-II的时钟中断(必须在第一个运行的任务里进行) */OSStartTimeTick();/* 在下面添加任务内容 */MX1_LCDC_DrawRect(0,0,320,240, 50,50, LS_SOLID, FS_SOLID);MX1_UART_Init( COM1 );MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp1 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp1 );change(tmp1);hour_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp2 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp2 );change(tmp2);hour_2=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp3 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp3 );change(tmp3);min_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp4 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp4 );change(tmp4);min_2=i;Showtime_min_1(min_1);Showtime_min_2(min_2);Showtime_hour_1(hour_1);Showtime_hour_2(hour_2);/* 显示从键盘的输入时间,实现功能一*/MX1_LCDC_DrawCircle(160, 100,5, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawCircle(160, 160,5, 31,31, LS_SOLID, FS_SOLID );while( 1 ){OSTimeDlyHMSM( 0, 0, 1, 0);/* 延时一秒后秒钟加一*//* 下面为实现时钟的逻辑*/sec_2++;if(sec_2>9){sec_1++;sec_2=0;}if(sec_1>5){min_2++;sec_1=0;}if(min_2>9){min_1++;min_2=0;}if(min_1>5){hour_2++;min_1=0;}if(hour_2>9){hour_1++;hour_2=0;}if(hour_1==2&&hour_2==4){hour_1=0;hour_2=0;}Showtime_sec_1(sec_1);Showtime_sec_2(sec_2);Showtime_min_1(min_1);Showtime_min_2(min_2);Showtime_hour_1(hour_1);Showtime_hour_2(hour_2);/* 实现基本时钟功能即功能二*/}}/* 任务二实现闹钟功能*/void YourTask2(void *pdata){int sethour_1,sethour_2,setmin_1,setmin_2;int j=1;char tmpl1,tmpl2,tmpl3,tmpl4;IRQ_Register( OSTickISR, TIMER1_INT ); /* 开启uC/OS-II的时钟中断 */OSStartTimeTick();MX1_UART_Init( COM1 );WAVE_Init( WAVE_BASE_DEFAULT );LED_Init( LED3 );SWITCH_Init( SW2 ); /* 初始化开关 */while(1){if( SWITCH_IS_ON( SW2 )&&j==1 )/* 如果开关二按下超级终端提示依次输入闹钟时间*/{ LED_On( LED4 );j++;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl1 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl1 );change(tmp1);sethour_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl2 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl2 );change(tmp2);sethour_2=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl3 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl3 );change(tmp3);setmin_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl4 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl4 );change(tmp4);setmin_2=i;}elseLED_Off( LED4 );if(hour_1==sethour_1&&hour_2==sethour_2&&min_1==sethour_1&&min_2==sethour_2 )/* 达到闹钟时间后开始放音乐*/{WAVE_Play( );OSTimeDlyHMSM( 0, 0, 0, 500);}}}/* 初始化后,从这里开始执行C代码 */int __main( void ){unsigned int palette[LCDC_CMRAM_SIZE];int i;MX1_AITC_Init(); /* 初始化中断控制器 */IRQ_Init(); /* 初始化中断管理 */OSInit(); /* 初始化uC/OS-II内核数据结构 */MX1_GPIO_Init( MX1_GPIO_PC );MX1_SSI_Init( MX1_SSI1 );//初始化LCDMX1_LCDC_Init(LCDC_PANEL_WIDTH, LCDC_PANEL_HEIGHT,LCDC_INIT_STARTX, LCDC_INIT_STARTY, LCDC_VPW, LCDC_PANEL_CONF, LCDC_BPP );// 初始化调色板for( i=0; i<16; i++ ){palette[i] = RGB( i, 0, 0 );palette[i+16] = RGB( 0, i, 0 );palette[i+32] = RGB( 0, 0, i );palette[i+48] = RGB( i, i, i );}MX1_LCDC_CMRAM_Set( palette );/* 建立一个任务 */OSTaskCreate( YourTask1, 0, &StkTask1[STK_SIZE_TASK1-1], PRIO_TASK1 );OSTaskCreate( YourTask2, 0, &StkTask2[STK_SIZE_TASK2-1], PRIO_TASK2 );OSStart(); /* 开始调度 */return 0;}五实验现象初始化后,超级终端显示提示时间设定,由键盘输入后,开始计时功能,屏幕上显示时,分,秒在计时阶段若打开开关sw2则提示输入设定闹钟值,输入后当时间到达闹钟值时音乐响起,关闭sw2,则闹钟停止。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 实时性
– 实时嵌入式操作系统
• 可抢占型实时操作系统 • 不可抢占型实时操作系统
– 非实时嵌入式操作系统
1.4 嵌入式操作系统的特点
• 可定制性
– 可添加或可裁剪内核
• 可移植性
– 支持多种微处理器
• 实时性
– 嵌入式系统环境的现实要求
• 低资源占有性
– 由系统资源少的特点决定
2. 嵌入式操作系统简史
1.2 嵌入式系统的特点
与通用计算机系统相比的特点:
• 面向特定应用; • 结合了计算机技术、半导体技术和电子技术
等技术; • 软件和硬件设计都要求高效率; • 软件、硬件和具体应用及行业特点有机地结
合在一起; • 软件一般都固化在存储器或单片机中。
1.3 嵌入式操作系统的概念
• 支持嵌入式系统应用的操作系统软件; • 嵌入式系统的重要组成部分; • 具有通用操作系统的基本特点; • 将硬件虚拟化,使开发人员从驱动程序
嵌入式Linux的特点
• 多任务、多用户支持 • 共享库支持 • POSIX 1003.1支持 • 内存保护模式 • 支持不同种类的文件系统 • TCP/IP、SLIP和PPP支持
嵌入式Linux的开发环境
• 基于Linux操作系统的应用开发环境一般是由 目标系统硬件开发板和宿主PC机所构成。
• 目标硬件开发板(基于ARM的系统板)用于运 行操作系统和系统应用软件,而目标板所用 到的操作系统的内核编译、应用程序的开发 和调试则需要通过宿主PC机来完成。双方之 间一般通过串口,并口或以太网接口建立连 接关系。
• 从开发角度来看
– 定制系统内核 – 开发驱动程序 – 导出SDK – 编写应用软件 – 源代码的共享
VxWorks的特点
• 高性能实时微内核 • POSIX兼容 • 自由配置能力 • 友好的开发调试环境 • 广泛的运行环境支持
VxWorks的组成
• 微内核 • I/O系统 • 文件系统 • 完全的TCP/IP协议栈(基于BSD4.4) • 板极支持包
(Board Support Package, BSP) • 目标代理(Target Agent)
移植和维护中解脱出来;
• 嵌入式系统通常包括:
– 与硬件相关的底层驱动软件; – 系统内核; – 设备驱动接口; – 通信协议; – 图形界面; – 标准化浏览器等。
嵌入式系统分类
• 应用角度来看
– 通用型
• Linux、VxWorks、Windows 等
– 专用型
• SmartPhone、PocketPC、Symbian等
– 统一的平台,兼容大量的APP – 限制硬件架构
• 可读,不贵
• Windows CE OS
– 可以集成到多种平台的组件集合 – 对于硬件有很大的灵活性,支持四种处理器架构
• X86 • SH4 • ARM • MIPS
4.3 功能简介
• 从操作系统角度来看
– 灵活的电源管理功能 – 良好的通信能力 – 出色的图形用户界面 – 多任务 – 内置多媒体功能
Palm Os的开发工具
• 开发工具很多 GNU C、Codewarrior以及 Pocket C
• 专业程序设计者可使用C/C++来开发,而一 般人则可使用程序产生器来完成
• Codewarrior是Palm程序设计领域中功能最 强大的开发工具
3.3 嵌入式Linux
Linux具有源代码开 放、模块化的结构、良 好的稳定性,为嵌入式 操作系统的主流。
• 第一阶段 以单芯片为核心的可编程控 制器系统;
• 第二阶段 嵌入式中央处理器,简单的 操作系统为核心的嵌入式系统;
• 第三阶段 以嵌入式操作系统为标志的 嵌入式系统;
• 第四阶段 以网络应用嵌入式操作系统 为标志的嵌入式系统。
3. 常见的嵌入式操作系统
• VxWorks
– 高性能的内核和友好的用户界面
4. Windows
• 广泛应用 • 与桌面操作系统的区别 • 功能简介 • 嵌入式设备与移动设备 • 资源
4.1 广泛应用
• 信息家电领域
– 网络冰箱、家庭网关、数字机顶盒等
• 移动计算领域
– 手机、掌上电脑、PDA等移动设备
• 工业控制领域
4.2 与桌面操作系统的区别
• Windows桌面平台
• PalmOs
– 省电以及系统资源消耗少
• 嵌入式Linux
– 开放源代码、软实时、多任务
• Windows
– 32位、多线程、多任务
3.1 VxWorks
VxWorks操作系统 是由美国 WindRiver 公司推出的一种嵌入 式实时操作系统。自 从20世纪80年代推出 以来,依靠该系统高 性能内核,友好的用 户开发环境获得了很 大的成功。
组成框图
VxWorks的开发环境Tornado
3.2 PalmOs
• Palm与计算机沟通 能力最容易的特点 使Palm在所有的 PDA中独树一帜, 迅速取得市场。
Palm Os的特点
• 处理速度快 • 耗电量低,使用时间长 • 具备执行低内存需求应用程序的能力 • 与PC间的数据交换容易 • 应用软件的开发性高
• 第七章 用户界面与图形子系统 • 第八章 应用程序设计 • 第九章 Windows CE 5.0简介 • 第十章 Platform Builder开发环境导航
嵌入式操作系统原理 ——Windows CE
第一章 嵌ቤተ መጻሕፍቲ ባይዱ式系统概述
内容提要
• 嵌入式系统和嵌入式操作系统 • 嵌入式系统发展简史 • 常见的几种嵌入式操作系统 • Windows
嵌入式操作系统原理 ——Windows CE
王金刚 天津大学电子信息工程学院
2019年8月
本课程内容设置
• 第一章 嵌入式系统概述 • 第二章 Windows 系统结构 • 第三章 模型、进程和线程 • 第四章 内存管理 • 第五章 存储管理 • 第六章 设备管理
1. 嵌入式系统和嵌入式操作系统
• 嵌入式微处理器 • 嵌入式系统的特点 • 嵌入式操作系统的概念和分类 • 嵌入式操作系统的特点
1.1 嵌入式微处理器
• 实时和多任务处理能力
– 限定时间内完成多个任务
• 集成度高
– 利于小型化
• 存储区保护功能强大
– 避免错误交叉作用
• 低功耗
– 功耗为mW甚至uW级
相关文档
最新文档