第一篇:嵌入式报告
题目:嵌入式系统学习心得
班级:学号:姓名:
1.嵌入式的发展 A.简单操作系统阶段
20世纪80年代,随着微电子工艺水平的提高,IC制造商开始把嵌入式应用中所需要的微处理器、I/O接口、串行接口以及RAM、ROM等部件统统集成到一片VLSI中,制造出面向I/O设计的微控制器,并一举成为嵌入式系统领域中异军突起的新秀。与此同时,嵌入式系统的程序员也开始基于一些简单的“操作系统”开发嵌入式应用软件,大大缩短了开发周期、提高了开发效率。
这一阶段嵌入式系统的主要特点是:出现了大量高可靠、低功耗的嵌入式CPU(如Power PC等),各种简单的嵌入式操作系统开始出现并得到迅速发展。此时的嵌入式操作系统虽然还比较简单,但已经初步具有了一定的兼容性和扩展性,内核精巧且效率高,主要用来控制系统负载以及监控应用程序的运行。
B.实时操作系统阶段
20世纪90年代,在分布控制、柔性制造、数字化通信和信息家电等巨大需求的牵引下,嵌入式系统进一步飞速发展,而面向实时信号处理算法的DSP产品则向着高速度、高精度、低功耗的方向发展。随着硬件实时性要求的提高,嵌入式系统的软件规模也不断扩大,逐渐形成了实时多任务操作系统(RTOS),并开始成为嵌入式系统的主流。
这一阶段嵌入式系统的主要特点是:操作系统的实时性得到了很大改善,已经能够运行在各种不同类型的微处理器上,具有高度的模块化和扩展性。此时的嵌入式操作系统已经具备了文件和目录管理、设备管理、多任务、网络、图形用户界面(GUI)等功能,并提供了大量的应用程序接口(API),从而使得应用软件的开发变得更加简单。
C.面向Internet阶段
21世纪无疑将是一个网络的时代,将嵌入式系统应用到各种网络环境中去的呼声自然也越来越高。目前大多数嵌入式系统还孤立于Internet之外,随着Internet的进一步发展,以及Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合才是嵌入式技术的真正未来。
信息时代和数字时代的到来,为嵌入式系统的发展带来了巨大的机遇,同时也对嵌入式系统厂商提出了新的挑战。目前,嵌入式技术与Internet技术的结合正在推动着嵌入式技术的飞速发展,嵌入式系统的研究和应用产生了如下新的显著变化:
新的微处理器层出不穷,嵌入式操作系统自身结构的设计更加便于移植,能够在短时间内支持更多的微处理器。
嵌入式系统的开发成了一项系统工程,开发厂商不仅要提供嵌入式软硬件系统本身,同时还要提供强大的硬件开发工具和软件支持包。
通用计算机上使用的新技术、新观念开始逐步移植到嵌入式系统中,如嵌入式数据库、移动代理、实时CORBA等,嵌入式软件平台得到进一步完善。
各类嵌入式Linux操作系统迅速发展,由于具有源代码开放、系统内核小、执行效率高、网络结构完整等特点,很适合信息家电等嵌入式系统的需要,目前已经形成了能与Windows CE、Palm OS等嵌入式操作系统进行有力竞争的局面。网络化、信息化的要求随着Internet技术的成熟和带宽的提高而日益突出,以往功能单一的设备如电话、手机、冰箱、微波炉等功能不再单一,结构变得更加复杂,网络互联成为必然趋势。
2.嵌入式的应用
嵌入式系统主要用于各种信号处理与控制,目前已在国防、国民经济及社会生活各领域普遍采用,可用于企业、军队、办公室、实验室以及个人家庭等各种场所。同时,嵌入式系统作为数字化电子信息产品的核心,嵌入式计算机断层成像系统已出口日本。
军用
各种武器控制(火炮控制、导弹控制、智能炸弹制导引爆装置)、坦克、舰艇、轰炸机等陆海空各种军用电子装备,雷达、电子对抗军事通信装备,野战指挥作战用各种专用设备等。
家用
各种信息家电产品,如数字电视机,机顶盒,数码相机,VCD、DVD 音响设备,可视电话,家庭网络设备,洗衣机,电冰箱,智能玩具等。
工业用
各种智能测量仪表、数控装置、可编程控制器、控制机、分布式控制系统、现场总线仪表及控制系统、工业机器人、机电一体化机械设备、汽车电子设备等。商用
各类收款机、POS 系统、电子秤、条形码阅读机、商用终端、银行点钞机、IC 卡输入设备、取款机、自动柜员机、自动服务终端、防盗系统、各种银行专业外围设备。
办公用
复印机、打印机、传真机、扫描仪、激光照排系统、安全监控设备、手机、寻呼机、个人数字助理(PDA)、变频空调设备、通信终端、程控交换机、网络设备、录音录像及电视会议设备、数字音频广播系统等。
医用电子设备
各种医疗电子仪器,X 光机、超声诊断仪、计算机断层成像系统、心脏起搏器、监护仪、辅助诊断系统、专家系统等。
3.嵌入式的特点
嵌入式处理器的应用软件是实现嵌入式系统功能的关键,对嵌入式处理器系统软件和应用软件的要求也和通用计算机有所不同,主要有以下几点:
(1)软件要求固态化存储为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或嵌入式微控制器本身中,而不是存贮于磁盘等载体中。
(2)软件代码要求高质量、高可靠性尽管半导体技术的发展使处理器速度不断提高、片上存储器容量不断增加,但在大多数应用中,存储空间仍然是宝贵的,还 存在实时性的要求。为此要求程序编写和编译工具的质量要高,以减小程序二进制代码长度、提高执行速度。
(3)系统软件(OS)的高实时性是基本要求在多任务嵌入式系统中,对重要性各不
相同的任务进行统筹兼顾的合理调度是保证每个任务及时执行的关键,单纯通 过提高处理器速度是无法完成和没有效率的,这种任务调度只能由优化编写的系统软件来完成,因此系统软件的高实时性是基本要求。
(4)多任务操作系统是知识集成的平台和走向工业化标准化道路的基础,嵌入式系统开发需要开发工具和环境嵌入式系统本身不具备开发能力,即使设计完成 以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。
(5)嵌入式系统软件需要实时多任务操作系统开发平台(RTOS)通用计算机具有完善的操作系统和应用程序接口,是计算机基本组成不可分离的一部分,应用程序的开发以及完成后的软件都在Os平台上面运行,但一般不是实时的。嵌入式系统则不同,应用程序可以没有操作系统直接在芯片上运行:但是为了合理地调度多任务、利用系统资源,用户必须自行选配RTOS开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。
(6)在嵌入式系统的软件开发过程中,采用C语言将是最佳和最终的选择由于汇编语言是一种非结构化的语言,对于大型的结构化程序设计已经不能完全胜任了。这就要求我们采用更高级的C语言去完成这一工作。
4.实训内容简介
A.实训内容
1)嵌入式系统及AM软件介绍
2)Metrowerks CodeWarrior集成开发环境介绍
3)TESTI寄存器相加
4)GPIO 模 块
5)向量中断控制器(VIC)模块
6)定 时 器 s
7)L C D显示
8)实时操作系统简介
B.具体实例简介
a、b、实验内容:LCD 实验步骤:
1).启动ADS1.2,使用ARM7 Executable Image for lpc2210工程模板建立一个工程LCD_Disphoto;
2).建立源文件lcddrive.c、lcddrive.h,编写液晶模块的驱动程序,然后将lcddrive.c添加的工程的user组中;
3).建立源文件test.c,编写实验程序,然后添加到工程的user组中;
4).修改config.h,增加包含LCDDRIVE.H头文件;#include“LCDDRIVE.H”
5.心得体会
通过本次实验,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们 对此的记忆
第二篇:嵌入式报告
嵌入式实训报告
姓名:张龙班级:电气803学号:08010270
嵌入式系统学习体会
一、嵌入式发展前景
嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。
嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。
一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board SupportPackage(像PC的BIOS一样,往下驱动硬件,往上支持操作系统),最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入式操作系统原理和复杂应用软件等)。
另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。如果我们学软件的人对硬件原理和接口有较好的掌握,我们完全也可写BSP和硬件驱动程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了,嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作(目前有很多公司将硬件设计包给了专门的硬件公司,稍复杂的硬件都交给***或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发软件,因为公司都知道,嵌入式产品的差异很大程度在软件上,在软件方面是最有“花头“可做的),所以我们搞软件的人完全不用担心我们在嵌入式市场上的用武之地,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。
二、嵌入式系统应用前景
随着计算机软件和集成电路技术的发展,嵌入式系统产品日益完善,在航天、航空、交通、网络、电子、通讯、金融、智能电器、智能建筑、仪器仪表、工业自动控制、数控机床、掌上型电脑、各种智能IC卡、第二代身份证验证、公共交通收费系统、医药系统以及军事等领域得到广泛应用,已成为我国信息化带动工业化,工业化促进信息化 发展的国民经济新的增长点在我国2006 年嵌入式软件产品占全年全部软件产值的23%还多.据调查显示,目前嵌入式系统涉及的领域中,PDA占30%,手机占18%,数字信息家电占21%,工业控制5%,服务行业占2%,交通系统占2%,其他占22%.目前最值得关注的嵌入式产品市场主要有如下几类:
1.信息家电
后PC时代,家用电器将向数字化和网络化发展,电视机、微波炉、数字电话等都将嵌入微处理器并通过家庭网关与Internet连接,构成家庭信息网络.届时, 人们可以远程控制家里的电器设备,可以实现远程医疗、远程教育, 可以视频点播,实现交互式电视,还可以提供各种网上服务等.一般可认为,那些低单价、操作简单、可通过因特网发送或获取信息, 将逐步分割或替代PC 的某些功能,并能
与其它信息产品交换资料或信息的产品可统称为信息家电.信息家电可以提供安全防范、消费电子产品的智能控制、交互式智能控制、家庭信息服务、自动维护、家庭医疗保健等服务.而这些服务中的各类数字融合产品,都离不开嵌入式系统的支持,可以说,嵌入式系统是家庭信息网络、IT 融合的重要技术基础.具有丰富功能、高度集成的智能数字终端将是未来的发展方向.智能数字终端和各类数字融合产品具有十分广阔的市场前景.2.移动计算设备
移动计算设备包括手机、PDA、掌上电脑等各种移动设备.中国拥有最大的手机用户,市场巨大,而掌上电脑或PDA 由于易于使用、携带方便、价格便宜,近几年在我国得到了快速地发展.PDA 与手机也已呈现融合趋势, 智能手机正在成为今后的发展趋势方向, 智能手机就是一台嵌入式系统.智能手机要存放更多的软件和各种大容量的多媒体文件,必定要有操作系统, 目前智能手机操作系统主要有开源的Linux、微软公司的Windows CE系统和 Symbain 公司的 SymbainOs 系统.智能手机的功能越来越异常强大,为智能手机开发的各种功能程序已经在互联网上盛行.通过安装这些软件,可大大扩展手机的功能.3.网络设备
各种网络设备包括路由器交换机、Web Server、网络接入网关等, 都是一类嵌入式系统.随着下一代Internet 的研发成功和投入使用,必然会有更多更强的嵌入式网络设备和产品面世,这意味着巨大的嵌入式网络设备和产品市场需求.嵌入式系统也在向无线网络发展,无线网络已开发集成了802.11 芯片组.无线嵌入式网络有望部署到住宅及商用建筑自动化、工业设备监测以及其他无线传感和控制应用中.ZigBee 联盟已经为低成本、低功率的无线嵌入式网络制定了标准.这项标准定义了在IEEE 802.15.4 标准媒体接入控制层和物理层上的网络及支持的应用服务.这项标准很适合照明、供暖、冷却控制、工业建筑、自动化以及医疗设备监测等方方面面的应用.ZigBee联盟的长期目标是能够建立基于互操作平台和配置文件的可伸缩、低成本的嵌入式基础架构.4.自动化与测控仪器仪表
测控仪器仪表种类繁多,我国每年光进口的医疗设备就上亿, 每个医疗设备就是一套嵌入式系统.测控仪器仪表更是遍及大中小企业,新型的测控仪器仪表无一不是嵌入式系统.在工控和仿真领域,嵌入式设备也早已得到广泛应用.嵌入式系统在自动化行业已有很多成功应用案例,如数控机床控制系统、面向啤酒行业控制系统、水厂控制系统、缝纫机控制系统、可燃性气体报警系统、智能建筑安防系统、自动生产线分布式控制系统、变电站自动化系统、自动生产线检测系统等.我国的工业生产需要完成智能化、数字化改造,智能控制设备、智能仪表、自动控制等为嵌入式系统提供了巨大的市场.工控、仿真、数据采集、军用等领域一般都要求实时操作系统支持.在金融业、电力系统和服务业,嵌入式也在发挥着越来越重要的作用.5.嵌入式技术在交通管理、环境监测中的应用
在交通系统,嵌入式的作用也日益重要.汽车智能驾驶设备、汽车模拟驾驶器、汽车喷油泵调试台、轮船智能驾驶设备等都面临更新换代.这类新型设备也都离不开嵌入式系统.我国汽车业的发展必然为汽车电子的嵌入式系统应用带来良好商机.嵌入式系统在交通指挥系统、高速公路收费监控、汽车自导航、GPS车载终端、电子警察、加油站和汽车检测中的应用都是非常广泛的,有良好的市场前景.在环境监测(包括水文资料实时监测, 防洪体系及水土质量监测,堤坝安全,地震监测网,实时气象信息网,水源和空气污染监测)中,嵌入式产品同样有着广泛的市场前景.三、嵌入式系统的组成 1.底层(硬件层)
需要你自己对于硬件相当的了解,能够独立绘制PCB并进行焊接,之后调试板子,做好电路板。比如sc2410,你需要绘制至少四层PCB电路板,其中ARM核心板是最难掌握的部分,外围电路要注意各种走线技巧等等。绘制完PCB之后就需要你的焊接功夫。将元器件焊接在PCB上。最后调试电路板,这是这一层设计中的收尾工作,也是最具有挑战性的工作。调试电路需要大量的经验,对于初学者来说,需要很强的电路知识,对于硬件的性能以及应用要非常了解才行。
2.中间层(驱动层)
电路板已经有现成的。你需要编程使一个死的板子,活起来,就是把程序下载进去,能叫板子跑起来。这里需要你对于ARM芯片的结构有很好的掌握,要会读芯片资料(datasheet)通常都是英文的。了解其内部资源我们就可以进行驱动编程了。我们平时所使用单片机,一般都是写好的程序,各个管脚在什么时序下输出什么信号(1或0),来操作实现相应借口的外围设备,比如液晶屏、LED灯等。单片机也可以叫做简单的嵌入式。原理相同。ARM也可以向单片机一样使用,但我们更多的是要对ARM加入操作系统的,这才是我们最常说的嵌入式。加入操作系统了以后,芯片对于个个资源的调度有了更系统的统筹规划,可以更充分的利用ARM芯片的系统资源,提高性能,使资源合理分配。而通常的驱动是在操作系统下工作的。比如基于LINUX或WINCE等等下的驱动程序。驱动程序是链接硬件平台和操作系统的纽带,当然编写驱动要同时兼顾操作系统特点和硬件接口的特点。做驱动的开发,需要对于软硬件都要有所了解,其中更偏重操作系统的理解。这部分工作也是最难做的。
3. 上层(应用层):
应用层,即我们所说的软件编程了。就相我们手机里QQ和飞信一样,我们需要根据我们手机的操作系统来编写应用程序。对于各个开发板,我们同样需要根据它里边的系统进行应用开发。这部分,应该是几乎脱离硬件了,我们只需简单的了解硬件即可。我们只需深刻理解操作系统的中各个系统函数和接口函数,即可进行开发。需要很强的C++水平。
四、嵌入式系统的设计特点
嵌入式系统的开发通常采用“宿主机/目标机”方式。
宿主机(Host)是一台通用的计算机,一般是PC机。它通过串口或网络连接与目标机进行通信。
目标机(Target)常用在嵌入式系统的开发过程期间。目标机可以是嵌入式系统的实际运行环境,也可以是能替代实际环境的仿真系统。
首先,利用宿主机上丰富的设备资源以及良好的开发环境来开发和仿真调试目标机上的软件。
然后,通过UART接口或Ethernet接口将交叉编译生成的目标代码传输并下载到目标机上,并用交叉调试器在实时内核/操作系统或监控程序的支持下进行实时分析和调试。
最后,目标机在特定的环境下运行
五、体会
通过学习嵌入式的课程使我了解了什么是嵌入式,所谓嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通过实训课的训练不仅使我知道了嵌入式系统的组成及应用,而且拓展了自己的知识和动手能力也对自己今后的发展有很大的的帮助。
第三篇:嵌入式报告
目录
引言...............................................................................................................................2 1.ARM概述.................................................................................................................2 2.芯片介绍..................................................................................................................2
2.1............................................................................................................................2 3.显示方式选择方案与论证......................................................................................3 4.硬件设计..................................................................................................................4
4.1............................................................................................................................4 4.2 电路原理图.....................................................................................................4 5.软件设计..................................................................................................................5 6.心得体会..................................................................................................................6 参考文献.......................................................................................................................7 引言
随着信息技术和网络技术的高速发展,嵌入式产品日益广泛地渗透到各个行业和领域。嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本,体积、功耗严格要求的专用计算机系统。嵌入式系统通常包括硬件和操作系统两部分,硬件是构成软件的基本运行环境。
到目前为止,ARM微处理器及技术的应用几乎已经深入到各个领域,如工业控制领域,无线通讯领域,网络应用,消费类电子产品。此外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。
1.ARM概述
ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。
ARM 微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM 技术的微处理器应已经渗入到我们生活的各个方面。
2.芯片介绍
2.1LPC2132简介
芯片概述:
LPC2131/2132/2138是基于一个支持实时仿真和嵌入式跟踪的32/16 位ARM7TDMI-STM CPU 的微控制器,并带有32kB、64kB、512 kB 的嵌入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。
LPC2132G功能方框图如图2-1所示
图2-1 LPC2132G功能方框图
本设计使用2块4位共阴LED数码管作为显示模块。
3.显示方式选择方案与论证
采用LED数码管动态扫描显示方法,是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,当动态扫描频率加大到一定范围时可以既保证亮度,又保证显示。动态显示对IO的利用率相对教高。
4.硬件设计
4.1 电路设计原理
RSPI是一种高速的、全双工、同步的通信总线,且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。
SPI总线工作的四种方式如图4-1所示,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):
图4-1 SPI总线四种工作方式
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性对传输协议没有重大的影响:CPOL=0时串行同步时钟的空闲状态为低电平; CPOL=1,串行同步时钟的空闲状态为高电平;
时钟相位能够配置用于选择两种不同的传输协议之一进行数据传输:CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样; CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI主模块和与之通信的外设备时钟相位和极性应该一致。4.2 电路原理图
P1.24-P1.31口作为数码管数据输出口,外接上拉电阻后分别连接到两个数码管的段选端上。P0.0-P1.7口作为数码管位选控制口,分别接到2个4位共阴数码管的共8个位选端上。另外,LPC2138的1-4、6、8、10、12脚接+3.3V电源。14、16、18、20脚接+5V电源。5、7、9、11、13、15、17、19、37-40脚接GND。电路原理图如图4-2所示。
图4-2 总电路原理图
5.软件设计
程序流程图如图5-1所示
图5-1 程序流程图
6.心得体会
本次嵌入式系统设计有学生自主命题,开放性大,范围广但是这同时对于每一个同学来说都是一个不小的挑战。
此次设计为基于嵌入式ARM的电子秒表的设计,在设计中以LPC2132为核心的核心板来设计电子秒表。在设计中为解决问题需自己查阅资料,是自己更多更深入的去了解和使用嵌入式系统来完成设计,加深了对嵌入式系统的认识,也激起了自己对嵌入式系统的兴趣。
本次设计的难点关键在于对于ARM系统人士的不足,对于嵌入式系统的不了解,以及对于各种芯片的使用方法不能灵活运用使得设计中问题不断。
参考文献
[1] 崔更申,孙安青.ARM嵌入式系统开发与实践[M].北京:中国电力出版社,2008 [2] 张绮文.ARM 嵌入式常用模块与综合系统设计实例精讲[M].北京:电子工业出版社,[3] 刘同法,肖志刚.ARM Cortex-M3内核微控制器快带入门与应用.北京:北京航空航天大学出版社,2009 [4] 三恒星科技.ARM 7易学通[M].北京:人民邮电出版社,2006 [5] Steve Furber著;田泽等译.ARM SoC体系结构[M].北京:北京航空航天大学出版社,2002 [6] 滕英岩.嵌入式系统开发基础——基于ARM位处理器和Linux操作系统[M].北京:电子工业出版社,2008 [7] http://baike.baidu.com/view/11200.htm
[9] http://wenku.baidu.com/view/ef0be52b7375a417866f8f46.html
第四篇:报告嵌入式心得
专题课学习至今,学到了很多东西。而找工作时,各种笔试面试中,深刻地体会到“嵌入式系统”的重要性。这让我更坚定了学好嵌入式系统的想法。
嵌入式系统这门课和C语言颇有关联,这也重新夯实了我的C语言基础。而良好的C语言能力,也是学习嵌入式的必备基础。我决定在学好基础后,在对嵌入式进行扩展学习。
据了解嵌入式学习主要有两方面:软件和硬件。嵌入式软件的比较多,而做硬件不多,但多是高手。嵌入式的软件又有好多种,主要是针对不同CPU的,但是基本都是用C语言的,还有极少的汇编,主要在BOOT启动、初始代码中。目前来说,嵌入式Linux比较流行,安卓就是基于linux内核的。wince、Vxworks什么的貌似不多,特别是vxworks。
我也对嵌入式系统的应用方面进行了了解。现在在市场还是蛮吃香的,可从事的就业方向还是蛮多的比如:消费类电子(手机、PDA、游戏机)、数字 多媒体(网络点播、机顶盒)、汽车电子(导航仪)、医疗电子、工业控制等行业。
嵌入式系统是二十一世纪科技领域的重大创新,必将推进全球经济社会高速发展,实现人类发展史上的重大突破。科学在发展,人类在进步,随着一代又一代IT精英们的不断努力,未来的嵌入式系统一定会是更加方便人们的工作、学习、生活的好伴侣。
据了解,嵌入式市场有非常大的机会,预计到2012年将有30亿台嵌入式设备交货。这样一个“爆炸性”的增长主要是由于终端用户越来越基于连接性的用户体验及应用程序来购买具有智能、连接性、服务导向的设备。
附
嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置(”devices used to control, monitor, or assist the operation of equipment, machinery or plants)。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专业计算机系统。
本文从嵌入式系统的 等方面来概要性地介绍嵌入式系统。
1.嵌入式系统的概念
1.1嵌入式系统的定义
根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专业计算机系统。
1.2 嵌入式系统的特点
1.系统内核小。由于嵌入式系统一般是应用于小型电子装置的,系统的资源相对有限,所以内核较之传统的操作系统要小得多。
2.专用性强。嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全两个概念。
3.系统精简。嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。
4.高实时性的系统软件(OS)是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。
5.嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。嵌入式系统的应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS(Real-Time Operating System)开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。
6.嵌入式系统开发需要开发工具和环境。由于其本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。
1.3几个关键概念的解释
1、嵌入式处理器
嵌入式系统的核心,是控制、辅助系统运行的硬件单元。范围极其广阔,从最初的4位处理器,目前仍在大规模应用的8位单片机,到最新的受到广泛青睐的32位,64位嵌入式CPU。
2、实时操作系统
实时操作系统(RTOS-Real Time Operating System):
嵌入式系统目前最主要的组成部分。根据操作系统的工作特性,实时是指物理进程的真实时间。实时操作系统具有实时性,能从硬件方面支持实时控制系统工作的操作系统。其中实时性是第一要求,需要调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。
3、分时操作系统
对于分时操作系统,软件的执行在时间上的要求,并不严格,时间上的错误,一般不会造成灾难性的后果。目前分时系统的强项在于多任务的管理,而实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等的情况能做出精确的估计。
4、多任务操作系统
系统支持多任务管理和任务间的同步和通信,传统的单片机系统和DOS系统等对多任务支持的功能很弱,而目前的Windows是典型的多任务操作系统。在嵌入式应用领域中,多任务是一个普遍的要求。
5、实时操作系统中的重要概念
系统响应时间(System response time):系统发出处理要求到系统给出应答信号的时间。
任务换道时间(Context-switching time):任务之间切换而使用的时间。
中断延迟(Interrupt latency):机器接收到中断信号到操作系统作出响应,并完成换道转入中断程序的时间。
6、实时操作系统的工作状态
实时系统中的任务有四种状态:运行(Executing),就绪(Ready),挂起(Suspended),冬眠(Dormant)。
运行:获得CPU控制权。
就绪:进入任务等待队列,通过调度转为运行状态。
挂起:任务发生阻塞,移出任务等待队列,等待系统实时事件的发生而唤醒,从而转为就绪或运行。
冬眠:任务完成或错误等原因被清除的任务,也可以认为是系统中不存在的任务。
任何时刻系统中只能有一个任务在运行状态,各任务按级别通过时间片分别获得对CPU的访问权。
2.嵌入式系统的组成
有关嵌入式系统的组成非常多,限于篇幅,本文只介绍其中机电最关键概念。嵌入式系统的组成
1)嵌入式系统硬件层。一般包括有:嵌入式处理器、存储器、I/O系统和外设 2)嵌入式系统的软件系统。包括:操作系统、应用软件
嵌入式系统的开发工具(1)硬件开发工具包括:仿真器等;其它(示波器等)(2)软件开发工具包括:编译、连接、定位软件,通常使用C语言;调试软件。
3)中间层。它将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。4)应用层
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,如图1-1所示,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。
2.1硬件层
硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。
2.1.1、嵌入式微处理器
嵌入式系统硬件层的核心是嵌入式微处理器,嵌入式微处理器与通用CPU最大的不同在于嵌入式微处理器大多工作在为特定用户群所专用设计的系统中,它将通用CPU许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。
嵌入式微处理器的体系结构可以采用冯诺依曼体系或哈佛体系结构;指令系统可以选用精简指令系统(Reduced Instruction Set Computer,RISC)和复杂指令系统CISC(Complex Instruction Set Computer,CISC)。RISC计算机在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,从而提高了执行效率并使CPU硬件结构设计变得更为简单。
嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线狂度,或集成了不同的外设和接口。据不完全统计,目前全世界嵌入式微处理器已经超过1000多种,体系结构有30多个系列,其中主流的体系有ARM、MIPS、PowerPC、X86和SH等。但与全球PC市场不同的是,没有一种嵌入式微处理器可以主导市场,仅以32位的产品而言,就有100种以上的嵌入式微处理器。嵌入式微处理器的选择是根据具体的应用而决定的。
2.1.2、存储器
嵌入式系统需要存储器来存放和执行代码。嵌入式系统的存储器包含Cache、主存和辅助存储器。
1.Cache
Cache是一种容量小、速度快的存储器阵列它位于主存和嵌入式微处理器内核之间,存放的是最近一段时间微处理器使用最多的程序代码和数据。
在嵌入式系统中Cache全部集成在嵌入式微处理器内,可分为数据Cache、指令Cache或混合Cache,Cache的大小依不同处理器而定。一般中高档的嵌入式微处理器才会把Cache集成进去。
2.主存
主存是嵌入式微处理器能直接访问的寄存器,用来存放系统和用户的程序及数据。它可以位于微处理器的内部或外部,其容量为256KB~1GB,根据具体的应用而定,一般片内存储器容量小,速度快,片外存储器容量大。
常用作主存的存储器有:
ROM类 NOR Flash、EPROM和PROM等。
RAM类 SRAM、DRAM和SDRAM等。
其中NOR Flash 凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。
3.辅助存储器
辅助存储器用来存放大数据量的程序代码或信息,它的容量大、但读取速度与主存相比就慢的很多,用来长期保存用户的信息。
2.1.3、通用设备接口和I/O接口
嵌入式系统和外界交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过和片外其他设备的或传感器的连接来实现微处理器的输入/输出功能。
2.2软件系统
系统软件层由实施多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。
嵌入式实时操作系统:
实时多任务操作系统(RTOS)是嵌入式应用软件的基础和开发平台。RTOS是一段嵌入在目标代码中的程序,系统复位后首先执行,相当于用户的主程序,其他程序都建立在RTOS之上。
2.3中间层
硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。
BSP具有以下两个特点:
硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。
操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。
3.嵌入式系统的开发
3.1嵌入式两种开发
硬件,主要使用语言是C语言和汇编,例如做dsp开发,做驱动开发,这类的开发对硬件要求比较高,短期内比较难掌握,除非是专业人士,另外,这类开发的就业机会比较少,因为国内的硬件设计力量很弱,稍复杂的硬件都交给国外公司设计,所以大学生找这样的工作很难,这也是为什么很多这类的毕业生都转行去做应用层的软件开发或者做网络维护之类的工作了。
软件,主要基于嵌入式操作系统,例如Symbian、Linux、Windows mobile、Android等等,开发人员主要从事嵌入式操作系统和应用软件的开发。特点是:比较容易上手学习,就业机会多,因为嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作。越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势,所以需要大量的研发人员,而且就业前景也非常的看好。
3.2嵌入式系统开发生命周期
硬件与软件将同时进行开发。理解硬件与软件功能相互之间的关系及界限有助于确保设计要求得到完整正确的理解和实现。
早在设计要求的定义与分析阶段,就必须分配系统仿真、原型设计和行为建模结果、一旦分配结束,就可以立即着手具体的设计和实现。实时系统开发中软硬件的并行设计会使用到各种分析技术,包括:
1.硬件与软件仿真;
2.硬件/软件协同仿真;
3.可调度的建模技术,如速率恒定分析;
4.原型设计和渐进式开发。
低层仿真可以用来为总线宽度和数据流程建模,这对性能评估是非常有用的。高层仿真可以满足功能的交互,并促成硬件/软件权衡研究及有效性设计。
4.嵌入式系统的现状与发展
发展现状:
随着信息化,智能化,网络化的发展,嵌入式系统技术也将获得广阔的发展空间。
硬件方面,不仅有各大公司的微处理器芯片,还有用于学习和研发的各种配套开发包。目前低层系统和硬件平台经过若干年的研究,已经相对比较成熟,实现各种功能的芯片应有尽有。而且巨大的市场需求给我们提供了学习研发的资金和技术力量。
从软件方面讲,也有相当部分的成熟软件系统。国外商品化的嵌入式实时操作系统,已进入我国市场的有WindRiver、Microsoft、QNX和Nuclear等产品。
发展趋势:
信息时代,数字时代使得嵌入式产品获得了巨大的发展契机,为嵌入式市场展现了美好的前景,同时也对嵌入式生产厂商提出了新的挑战,从中我们可以看出未来嵌入式系统的几大发展趋势:。
1.嵌入式开发是一项系统工程,因此要求嵌入式系统厂商不仅要提供嵌入式软硬件系统本身,同时还需要提供强大的硬件开发工具和数据库支持。
目前很多厂商已经充分考虑到这一点,在主推系统的同时,将开发环境也作为重点推广。2.网络互联成为必然趋势。
未来的嵌入式设备为了适应网络发展的要求,必然要求硬件上提供各种通信接口。传统的单片机对于网络支持不足,而新一代的嵌入式处理器已经开始内嵌网络接口,支持更多协议。
3.精简系统内核、算法,降低功耗和软硬件成本。
未来的嵌入式产品是软硬件紧密结合的设备,为了减低功耗和成本,需要设计者尽量精简系统内核,只保留和系统功能紧密相关的软硬件。
第五篇:嵌入式课程设计报告
福建工程学院
《嵌入式系统》课程设计
报告书
题目:
基于S3C2440设备驱动及其界面设计
班级:
姓名:
学号:
指导老师:
陈靖,张平均,李光炀
目录
一、设计课题...............................................................................................................................4
二、设计目的...............................................................................................................................4
三、设计任务及要求...................................................................................................................4
四、设计内容...............................................................................................................................5
五、操作界面的生成...................................................................................................................7
六、操作界面调试.......................................................................................................................9
七、设计总结.............................................................................................................................10
八、设计参考书.........................................................................................................................12
九、附件(程序).....................................................................................................................13
一、设计课题
基于S3C2440的设备驱动及其界面设计
二、设计目的:
1.进一步巩固嵌入式系统的基本知识; 2.掌握嵌入式应用系统的基本结构; 3.掌握嵌入式系统开发环境建立和使用;
4.掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法; 5.学会查阅有关专业资料及设计手册; 6.MiniGUI界面编程。
三、设计任务及要求:
1.掌握嵌入式系统开发环境建立和使用;
2.掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法;
3、MiniGUI在PC上的安装、移植
4、Linux基本输入输出驱动程序设计编译与移植
5、基于MiniGUI的基本输入输出应用编程编译与移植
6、编写设计说明书(方案的确定、设计环节的考虑及必要说明等)及设备的使用说明;
7、绘制有关图纸.四、设计内容:
1、基础知识准备
1)讲解设计任务;2)熟悉ubuntu的使用;3)熟悉TQ2440试验系统的使用;4)掌握嵌入式系统开发环境建立和使用;
5)掌握嵌入式系统基本驱动、应用程序的设计调试和编译移植方法.2、界面设计环境构建:MiniGUI在PC上的安装、移植
2.1、MiniGUI在pc机上安装和运行
建立工作目录:mkdir /minigui-free
cd /minigui-free mkdir /src 复制源文件包到工作目录:cp /mnt/hgfs/D/src/* /minigui-free 解压文件到/minigui-free:
tar zxvf libminigui-1.6.10.tar.gz tar zxvf minigui-res-1.6.10.tar.gz tar zxvf mg-samples-1.6.10.tar.gz
2.2、MiniGUI库安装
(2)将libcross.sh考到minigui的lib库的解压文件夹中(3)将rescross.sh 考到minigui的res资源解压文件夹中(4)将samplecorss.sh 考到sample例子解压文件夹中(5)依次运行libcross.sh,rescross.sh,samplecorss.sh(6)到nfsroot的,目录下,将libreduce.sh考到这个目录下,运行libreduce.sh 2.3、安装qvfb(1)解压qvfb1.1.tar.gz(2)./configure(3)make(4)make install 2.4、配置MiniGUI.cfg vi /etc/MiniGUI.cfg 修改如下部分为 [system] # GAL engine and default options gal_engine=fbcon
defaultmode=800x480-16bpp # IAL engine ial_engine=fbcon mdev=/dev/mouse mtype=IMPS2 [fbcon] 6
defaultmode=800x480-16bpp [qvfb] defaultmode=800x480-16bpp display=0 1.5运行MiniGUI例子程序(1)打开qvfb:qvfb &(2)运行helloword:
五、操作界面的生成
1、操作界面面执行文件的生成
1).在/minigui-free/mg-samples-1.6.10/src/修改源文件treeview.c 2).再次运行samplecorss.sh,生成执行文件treeview
2、利用nfs进行挂载
1).将本地PC机的网络方式设置成为桥接
2).查看/etc/exports下可以挂载的目录
3).启动服务/etc/init.d/nfs-kernel-server restart 4).查看本机和ARM上的IP地址,设置在同一网段,然后ping,使其能够互通。5).在超级终端上,进行操作
Mount-o nolock,rsize=1024,wsize=1024 本机IP:/ /mnt
将虚拟机和ARM进行挂载,可以查看到虚拟机根目录下的文件。
3、在超级终端上将需要的文件从虚拟机上复制到ARM机上
1).重新烧写文件系统镜像文件
2).挂载成功后,将/mnt/minigui-free/nfsroot/lib/*复制到/usr/lib/ 3).将/mnt/minigui-free/nfsroot/usr/local/lib/*复制到/usr/local/lib/ 4).将/mnt/etc/MiniGUI.cfg复制到/etc/ 8
5).将/mnt/minigui-free/mg-samples-1.6.10/src/*复制到/usr/minigui/
4、在超级终端上运行执行文件
1).进入/usr/minigui/运行treeview文件 2).可以再操作界面上现实我们所设计的界面
六、操作界面调试
1、点击LED1LED2LED3LED4,分别控制四盏led灯的亮暗,调试界面如下:
2、输入频率值,点击START键控制四盏led灯闪烁,调试界面如下:
七、设计总结
1、设计过程中遇到的问题
错误1:
InitGUI: Can not initialize colors of window element!InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.解决方法:正确配置MiniGUI.cfg文件 错误2:
Permission denied 解决方法:权限不够,使用root用户登录。错误3:
编译出错未找到jpeg,png等
解决方法:安装zlib,png,jpeg库。
错误4:
出现符号未找到等编译错误 解决方法:make clean 后在make 错误5:
在minigui创建和移植的过程中,出现lib库编译不成功的现象,这是由于minigui是基于qt3的,因此需要添加qt3所在路径至配置文件。错误:6 在开发板上添加鼠标设备后,提示视频采集失败,这是因为/etc下的配置文件MiniGUI.cfg中对外设控制范围的控制过大,银将其修改为与界面统一大小800*480.错误:7 在执行led灯控制程序之前应该首先停止开发板上原有的流水灯进程led-player。错误:8 运行执行程序treeview后界面上出现两个光标,此时应该在/etc/init.d下的rcS文件中停用qt3的光标。
2、心得体会
本学期为期两周的嵌入式课程设计在不知不觉中结束了,虽说这次课程设计时间不是很长,但是感觉自己收获颇丰,不仅学习到了一些新知识,回顾了以前的一些快要遗忘的知识点,而且使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的趣味,更加清楚地认识到了自己在软件开发及学习上的一些不足之处。
两周的课程设计,在计算机这个博大深奥的领域我感觉自己还有好多东西要学,还有好多的东西不懂!嵌入式软件开发应用广泛而且前景很好,目前正处于人才紧缺的关口,嵌入式技术在未来能够得到更加广泛的应用。学好嵌入式,C语言很重要,所以感觉自己有必要在学习、积累一下这方面的知识。很多东西的学习不是一帆风顺也是比较耗时的,嵌入式也不例外,要想学好还必须下大力气,还必须坚持。这次的课程设计让我明确了一点:嵌入式开发对于提升我们的系统知识有很大的帮助,尤其是操作系统的知识。嵌入式
系统开发对于我们的知识面要求非常的广,且要有一定的深度。这次的课程设计因为是一个有针对性的训练,所以记的会非常牢固。跟平时上课不太一样,平时上完理论课很少有时间上机进行时间或者隔几天才上机练习,等到上机时一些东西可能遗忘了,比较耗费时间。在课上,有老师在前面演示我们感觉看得懂或感觉没问题,可轮到我们独立完成的时候,因为实际操作的少,其中的问题就来了!我很感谢学校特别是学院老师有实训这样的安排,把我们这一学期学的东西系统的集中的进行训练,让我们深刻明确的体验了一下软件开发的流程!还要感谢给我们实训的楚老师,感觉楚老师能力很强,也很有耐心,即使老师讲了很多遍的问题,我们不会,老师还是会走进我们给我们耐心的指导,还给我们讲一些学习计算机的方法,一些软件开发需要注意的细节,让我们知道自己在哪方面不足,需要加强,也让我们了解到哪些需要认真的学习,那些是重点,不是没有方向的乱学一通,什么也学不好!经过这次的实训,我真真确确的感受到了计算机在我们生活中工作中的运用,这些软件、程序能让我们提高工作的效率,更直观更便捷的切入主题。当然,在学习的过程中并不是一帆风顺的,在这之中,因为要操作的东西很多,有时错一步,后面的结果就无法显示,而自己的计算机水平还有待提高,根本检查不出来是哪里出了错!这时候,老师都会耐心的过来帮助我!在平时我们就需要好好的查阅书籍或者上网搜集相关资料去解决问题。
短短两周的课程设计很快结束了,我发现我对计算机这个专业、对嵌入式技术、对Linux都有了新的认识。通过这次的实训,我了解到,要真真正正的掌握计算机程序还不是一件简单容易的事儿,但真正掌握后,它带给我们的将是无穷的便捷与科技,我喜欢高端便捷的生活。我希望我能做计算机这个万能机器人的主人而不是奴隶,我会努力加油的!感谢学校,感谢老师给我的帮助,让我的思想、技能又上了一个台阶!感谢!加油!
八、设计参考书
1、《嵌入式系统接口设计与Linux驱动程序开发》
2、《ARM9嵌入式LINUX系统构建与应用》
4、MiniGUI编程手册
5、Linux应用程序编程
九、附件(程序)
#include
#include
/*包括 MiniGUI 常用的宏以及数据类型的定义*/ #include
/*包含了
MiniGUI
绘图函数的接口定义*/ #include
/*包含了
libminigui 中所有内建控件的接口定义*/ #include
/*包含了许多UNIX系统服务的函数原型*/ #include
/*提供对I/O控制的函数*/
#define ID_LED1 101
/*定义各个控件与定时器的ID号*/ #define ID_LED2 102 #define ID_LED3 103 #define ID_LED4 104 #define ID_TEXT1 105 #define ID_TEXT2 106 #define ID_START 107 #define ID_STOP 108 #define ID_COMBOBOX 109 #define ID_TIMER 110
static int a,b,c,d=0;
/*定义LED灯的初始值*/ static int fd_led;
/*定义文件描述符*/
HWND hMainWnd;
/*定义主窗口句柄*/
static void draw_circular(HWND hdig,int x,int y,int r,int which)
/*自定义一个画圆函数,x、y、r、which分别表示圆心坐标、半径、颜色*/ {
HDC hdc;
/*定义设备上下文句柄*/ int color;color=((which==0)?PIXEL_green:PIXEL_red);
hdc=BeginPaint(hdig);
/*获得设备上下文句柄*/ SetBrushColor(hdc,color);
/*设置画刷颜色*/ FillCircle(hdc,x,y,r);
/*调用园填充函数*/ EndPaint(hdig,hdc);
/*释放设备上下文句柄*/ }
static DLGTEMPLATE DlgInitProgress=
/*定义对话框模板.用static类型数据,使该数据的定义只在所在文件中有效,以免因为名字空间污染造成潜在的编译或连接错误*/ {
WS_BORDER|WS_CAPTION,/*对话框风格,WS_BORDER创建有边框的窗口 ,WS_CAPTION创建含标题栏的主窗口*/
WS_EX_NONE,/*对话框扩展风格,WS_EX_NONE表示无扩展风格*/
0,0,800,480,/*对话框位置,左上角坐标(0,0),800、480分别为宽和高*/
“MY_LED_CONTROL”,/*对话框标题*/
0,/*对话框图标*/
0,/*对话框菜单*/
9,/*对话框中控件个数。这个必须要匹配*/
NULL,/*pointer to control array*/
0
/*附加值*/ };
static CTRLDATA CtrlInitData[]=
/*控件数组*/ {
{
“static”,/*控件类型*/
WS_VISIBLE|SS_SIMPLE,/*控件风格,WS_VISIBLE创建初始可见的窗口,SS_SIMPLE显示单行文本*/
100,270,150,40,/*控件位置*/
ID_TEXT1,/*控件ID*/
“Please input frequency”,/*控件内容*/
0,/*附加值*/
WS_EX_NONE
/*控件扩展风格*/
}, { “static”, WS_VISIBLE|SS_SIMPLE, 605,270,150,40, ID_TEXT2, “HZ”, 0, WS_EX_NONE
}, {
“button”, WS_VISIBLE|WS_TABSTOP, 135,160,80,60, ID_LED1, “LED1”, 0, WS_EX_NONE
}, {
“button”, WS_VISIBLE|WS_TABSTOP, 285,160,80,60, ID_LED2, “LED2”, 0, WS_EX_NONE
}, {
“button”, WS_VISIBLE|WS_TABSTOP, 435,160,80,60, ID_LED3, “LED3”, 0,/*WS_TABSTOP支持Tab键*/
WS_EX_NONE
}, {
“button”,WS_VISIBLE|WS_TABSTOP,585,160,80,60,ID_LED4,“LED4”,0,WS_EX_NONE
}, {
“button”,WS_VISIBLE|WS_TABSTOP,285,360,80,60,ID_START,“START”,0,WS_EX_NONE
}, {
“button”,WS_VISIBLE|WS_TABSTOP,435,360,80,60,ID_STOP,“STOP”,0,WS_EX_NONE
}, {
CTRL_COMBOBOX,WS_VISIBLE|WS_TABSTOP|CBS_AUTOSPIN|CBS_AUTOLOOP,/*CBS_AUTOSPIN创建旋钮数字框,CBS_AUTOLOOP框中的数字将自动循 环显示*/
435,270,80,40,ID_COMBOBOX,“0”,/*旋钮数字框初始值*/
0,WS_EX_NONE
} };
static int DialogBoxProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)/*对话框过程函数,用来接收和处理所有发送到该窗口的消息*/ {
int number;
/*用来存从旋钮数字框获得的数值*/
static int t=0;
int num;
/*存放定时时间*/
switch(message)
{
case MSG_INITDIALOG:
/*用户在定义自己的对话框回调函数时,需要处理
MSG_INITDIALOG消息,该消息是在MiniGUI根据对话框模板建立对话框以及 控件之后,发送到对话框回调函数的。*/
SendDlgItemMessage(hWnd, ID_COMBOBOX, CB_SETSPINRANGE, 0, 10000);
/*设置旋钮数字框的最大小值*/
return 1;
case MSG_PAINT:/*重绘消息*/
draw_circular(hWnd,175,90,30,1);
draw_circular(hWnd,325,90,30,1);
draw_circular(hWnd,475,90,30,1);
draw_circular(hWnd,625,90,30,1);
printf(“*************************init draw_circular******************************n”);
case MSG_TIMER:t++;
/*定时器消息,这里完成LED灯的闪烁*/
if(t%2!=0)
{
ioctl(fd_led, 0,0);
ioctl(fd_led, 0, 1);
ioctl(fd_led, 0, 2);
ioctl(fd_led, 0, 3);printf(“*************************time red******************************n”);
draw_circular(hWnd,175,90,30,1);
draw_circular(hWnd,325,90,30,1);
draw_circular(hWnd,475,90,30,1);
draw_circular(hWnd,625,90,30,1);
break;
}
else
{
ioctl(fd_led, 1,0);
ioctl(fd_led, 1, 1);
ioctl(fd_led, 1, 2);
ioctl(fd_led, 1, 3);printf(“*************************time green******************************n”);
draw_circular(hWnd,175,90,30,0);
draw_circular(hWnd,325,90,30,0);
draw_circular(hWnd,475,90,30,0);
draw_circular(hWnd,625,90,30,0);
break;
}
case MSG_COMMAND: /*击键消息*/
switch(wParam)
{
case ID_LED1:a++;
/*控制LED灯亮暗*/
if(a%2!=0)
{
ioctl(fd_led,0,0);
draw_circular(hWnd,175,90,30,1);
}
else
{ /
ioctl(fd_led,1,0);
draw_circular(hWnd,175,90,30,0);
}
printf(“******************led1********************************n”);
break;
case ID_LED2:b++;
if(b%2!=0)
{
ioctl(fd_led,0,1);
draw_circular(hWnd,325,90,30,1);
}
else
{
ioctl(fd_led,1,1);
draw_circular(hWnd,325,90,30,0);
}
printf(“*******************led2********************************n”);
break;
case ID_LED3:c++;
if(c%2!=0)
{
ioctl(fd_led,0,2);
draw_circular(hWnd,475,90,30,1);
}
else
{
ioctl(fd_led,1,2);
draw_circular(hWnd,475,90,30,0);
}
printf(“*******************led3********************************n”);
break;
case ID_LED4:d++;
if(d%2!=0)
{
ioctl(fd_led,0,3);
draw_circular(hWnd,625,90,30,1);
printf(“*******************led33********************************n”);
}
else
{
ioctl(fd_led,1,3);
draw_circular(hWnd,625,90,30,0);
}
printf(“*******************led4********************************n”);
break;
case ID_START:printf(“*******************start1*********************n”);
number=SendMessage(GetDlgItem(hWnd,ID_COMBOBOX), CB_GETSPINVALUE, 0, 0);/*获取旋钮数字框的数值*/
printf(“**********%d*******************n”,number);
printf(“*******************start2*********************n”);
if(number!=0)
{
printf(“*******************start3*********************n”);
num=(int)(1000*(1.0/number));
/*将频率转换为时间*/
printf(“*******************start4*********************n”);
}
else
{
printf(“*******************start5*********************n”);
num=1000;
}
printf(“*******************start6*********************n”);
printf(“*******************start7*********************n”);
printf(“*******************start8*********************n”);
SetTimer(hWnd,ID_TIMER,num);/*创建定时器,时间为num*10ms*/ printf(“*************************SetTimer OK******************************n”);
SendMessage(hWnd,BM_CLICK,0,0);
/*发送点击信息*/ printf(“*************************SendMessage OK******************************n”);
//for(i=0;i++;i<10000)
/*当初用for循环时无法进入循环,也许是因为消息本身有循环机制,用for循环太多也许冲突,所以后来用了定时器*/
//{
//
printf(“********%d**********n,i”);
//
ioctl(fd_led, 1,0);//
ioctl(fd_led, 1, 1);//
ioctl(fd_led, 1, 2);//
ioctl(fd_led, 1, 3);
//
draw_circular(hWnd,175,90,30,0);
//
draw_circular(hWnd,325,90,30,0);
//
draw_circular(hWnd,475,90,30,0);
//
draw_circular(hWnd,625,90,30,0);
printf(“*******************start9*********************n”);
// usleep(number);
//usleep(num);
//
ioctl(fd_led, 0,0);//
ioctl(fd_led, 0, 1);//
ioctl(fd_led,0, 2);//
ioctl(fd_led, 0, 3);
// draw_circular(hWnd,175,90,30,1);
// draw_circular(hWnd,325,90,30,1);
// draw_circular(hWnd,475,90,30,1);
// draw_circular(hWnd,625,90,30,1);
// printf(“*******************start10*********************n”);
//usleep(number);
//usleep(num);
// }
printf(“*******************start********************************n”);
break;
case ID_STOP:
KillTimer(hWnd,ID_TIMER);/*关闭定时器。下面的表示灯灭*/
ioctl(fd_led, 0,0);
ioctl(fd_led, 0, 1);
ioctl(fd_led, 0, 2);
ioctl(fd_led, 0, 3);
draw_circular(hWnd,175,90,30,1);
draw_circular(hWnd,325,90,30,1);
draw_circular(hWnd,475,90,30,1);
draw_circular(hWnd,625,90,30,1);
printf(“**************stop******************n”);
break;
}
}
return(DefaultDialogProc(hWnd,message,wParam,lParam));
/*对话框的缺省消息处理由 DefaultDialogProc 函数完成*/ }
static void InitDialogBox(HWND hWnd){ DlgInitProgress.controls=CtrlInitData;
/*将对话框模板结构和控件结构数组关联起来*/ DialogBoxIndirectParam(&DlgInitProgress,hWnd,DialogBoxProc,0L);/*创建对话框*/
printf(“*************create dialog**********************n”);}
/*****************************************************************
主窗口的过程函数
static int LedWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam){
HDC hdc;
switch(message)
{
case MSG_PAINT:
hdc = BeginPaint(hWnd);
TextOut(hdc, 60, 60, “My leds control!”);
EndPaint(hWnd, hdc);
return 0;
case MSG_CLOSE:
DestroyMainWindow(hWnd);
PostQuitMessage(hWnd);
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
*********************************************************************/ int MiniGUIMain(int argc, const char* argv[])
{
// MSG Msg;
// MAINWINCREATE CreateInfo;/*描述主窗口的属性*/
#ifdef _MGRM_PROCESSES
JoinLayer(NAME_DEF_LAYER , “led” , 0 , 0);
/*选择PROCESSES模式*/
#endif
printf(“****************into main*********************n”);
fd_led=open(“/dev/GPIO-Control”,0);
/*打开驱动设备*/
if(fd_led < 0)
{
perror(“open device led”);
exit(1);
}
ioctl(fd_led, 0, 0);
/*初始灯灭*/
ioctl(fd_led, 0, 1);
ioctl(fd_led, 0, 2);
ioctl(fd_led, 0, 3);
InitDialogBox(HWND_DESKTOP);
close(fd_led);/*********************************************************** CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;/窗口风格/
CreateInfo.dwExStyle=WS_EX_NONE;
/窗口扩展风格/
CreateInfo.spCaption=“MY_LED_CONTROL_WIN”;
/窗口标题/
CreateInfo.hMenu=0;
/菜单/
CreateInfo.hCursor= GetSystemCursor(0);
/光标/
CreateInfo.hIcon=0;
/图标/
CreateInfo.MainWindowProc=LedWinProc;
/设置主窗口的窗口函数,所用发往该窗口的消息由该函数处理/
CreateInfo.lx=0;
/窗口位置/
CreateInfo.ty = 0;
CreateInfo.rx = 240;
CreateInfo.by = 180;
CreateInfo.iBkColor=COLOR_lightwhite;
/设置背景颜色/
CreateInfo.dwAddData=0;
/附加数值/
CreateInfo.hHosting=HWND_DESKTOP;
/设置窗口的托管窗口为桌面窗口/
hMainWnd = CreateMainWindow(&CreateInfo);
/创建主窗口,返回创建窗口的句柄/
if(hMainWnd == HWND_INVALID)
return-1;
ShowWindow(hMainWnd,SW_SHOWNORMAL);
/显示窗口的显示方式/
while(GetMessage(&Msg, hMainWnd))/获取主窗口的句柄,指向MSG结构指针/
{
TranslateMessage(&Msg);
/将击键消息转换为MSG_CHAR消息,然后直接发送到窗口的过程函数/
DispatchMessage(&Msg);
/获取消息的目标窗口的窗口过程,然后直接调用 该窗口过程函数对消息进行处理/
}
MainWindowThreadCleanup(hMainWnd);/清除主窗口所使用消息队列的系统资源/ *****************************************************************************/
return 0;
}
#ifndef _MGRM_PROCESSES #include