收藏 分销(赏)

嵌入式系统设计实例完全.ppt

上传人:天**** 文档编号:1927741 上传时间:2024-05-11 格式:PPT 页数:73 大小:1.20MB
下载 相关 举报
嵌入式系统设计实例完全.ppt_第1页
第1页 / 共73页
嵌入式系统设计实例完全.ppt_第2页
第2页 / 共73页
嵌入式系统设计实例完全.ppt_第3页
第3页 / 共73页
嵌入式系统设计实例完全.ppt_第4页
第4页 / 共73页
嵌入式系统设计实例完全.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

1、第15章 嵌入式系统设计实例本章重点嵌入式Linux下IC卡接口设计与驱动开发。嵌入式GPS导航系统的设计。嵌入式Linux系统中触摸屏控制的研究与实现。智能家居系统分析。数字视频监控终端在linux环境下的设计与实现。本章内容15.1 嵌入式Linux IC卡接口设计与驱动开发 15.2 嵌入式Linux GPS导航系统的设计15.3 嵌入式Linux触摸屏控制的研究与实现 15.4 嵌入式智能家居系统分析15.5 数字视频监控终端的设计与实现15.1 嵌入式Linux IC卡接口设计与驱动开发 Linux系统中,设备驱动程序提供了设备和上层应用空间的标准抽象接口,使得硬件响应这个标准的内部

2、编程接口;而用户则可以通过一组标准化的系统调用对硬件设备进行打开、关闭、读写参数、控制设置等特定的操作。本节首先介绍Linux下设备模块的概念和基本分类,然后介绍IC卡设备的硬件接口设计以及在Linux系统下如何应用字符设备开发I C卡设备驱动模块。15.1 嵌入式Linux IC卡接口设计与驱动开发引言随着现代工业社会逐步向信息社会的过渡,信息将扮演愈来愈重要的角色,成为现代经济生活中的成功要素。IC卡作为卡基应用系统中的一种卡型,是利用安装在卡中的集成电路(IC)来记录和传递信息的;具有存储量大、数据保密性好、抗干扰能力强、存储可靠、读写设备简单、操作速度快、脱机工作能力强等优点,其应用范

3、围极为广泛。我们基于公用电话IC卡的应用,开发了多媒体信息终端产品,在传统公用I C卡电话功能的基础上增加了上网、邮件、电子支付、信息浏览等各种多媒体功能,统一采用公用电话IC卡进行收费,目前设计的IC卡读写器和驱动软件,已经应用于多媒体终端产品中。15.1 嵌入式Linux IC卡接口设计与驱动开发1、嵌入式Linux下设备驱动模块简介Linux系统将设备分成三种类型,字符设备、块设备和网络接口。三种类型设备定义如下:字符设备 字符设备是指能够像字节流(比如文件)一样被访问的设备,如字符终端(/dev/console)和串口(/dev/ttyS0)以及类似设备。字符设备对应文件系统中的节点,

4、用户则通过此文件节点访问和控制设备。块设备 块设备和字符设备一样,可以通过文件系统节点来进行访问Linux,允许应用程序像字符设备那样读、写块设备。网络接口 任何网络设备都要经过一个网络接口,即一个能够和其它主机交换数据的设备。通常接口是个硬件设备,但也可能是个纯软件设备,比如回环(loopback)接口。Linux访问网络接口的方法是分配一个唯一的名字。15.1 嵌入式Linux IC卡接口设计与驱动开发Module是Linux内核的一大创新,其正规的叫法应该是Loadable Kernel Module,即可安装模块。可安装模块实现了Linux操作系统的可扩展性。模块运行在内核空间环境中,

5、它的程序运行函数库都是在内核空间定义,而不是在用户函数库空间。Linux模块的最方便之处为可加载和卸载,Linux操作系统提供了系统调用insmod和rmmod,可随时将自己开发的模块进行加载和卸载。根据Linux设备分类,设备驱动模块也可大致分为字符模块(char module)、块模块(block module)和网络模块(network module)三种。15.1 嵌入式Linux IC卡接口设计与驱动开发2、IC卡设备触点硬件电路介绍I C卡硬件触点接口及信号如图15.1所示。15.1 嵌入式Linux IC卡接口设计与驱动开发C1:VCC电源电压。C2:RST复位信号。C3:CLK

6、时钟信号。C4:未用。C5:GND。C6:VPP编程电压。C7:I/O数据输入/输出口线。C8:未用。以上触点中,V P P编程电压触点是厂家生产卡时编程所用,用户卡读写时没有应用,所以准确地说,只有五个触点分别连接来自外部主控制器的五个控制信号,设备复位后的后续操作可包括卡的地址设定操作、读写操作、擦除操作。针对以上卡的各种操作,皆有严格的信号控制时序,详情可参照各种应用卡的DATASHEET。15.1 嵌入式Linux IC卡接口设计与驱动开发IC卡作为卡基应用系统中的一种卡型,是利用安装在卡中的集成电路(IC)来记录和传递信息的,所以IC卡皆有特定的存储位图。具体存储位图针对应用领域的不

7、同和标准的不同,具有不同的位图定义,详细情况请参见自己开发应用卡的DATASHEET资料。在驱动的开发过程中,也只有完全清楚这些位图定义后才能将所读取的数据按照位图定义协议进行译码而得到自己最终需要的各种数据。3、IC卡读卡电路简介IC卡读卡接口电路框图如图15.2所示,采用MPC823E作为主处理器,因为IC触点工作电压为5V,而主控制器的工作电压为3.3V,所以在读卡器中设计了中间电平转化驱动电路。同时增加了控制信号的驱动能力,为了实时检测插卡操作在插卡器电路中设置一开关电路,接主控制器的控制口线,用于检测是否插卡。15.1 嵌入式Linux IC卡接口设计与驱动开发4、IC卡设备驱动模块

8、的实现详解下面以采用的公用电话机通用的IC卡为例,通过已实现代码来说明整个IC卡设备驱动模块。(1)数据结构的确定编辑头文件ICDATA.H,确定在驱动模块程序中应用的公用数据结构。驱动模块的最终目的是读取和写入卡数据处理,所以规范整齐的数据结构是必须的。可以定义一个数据结构体来实现卡数据的存储区域、数据地址、索引控制标志位等如:struct ICDATAchar*readbuffstart;/读入数据缓冲区首指针char*readbuffend;/读入数据缓冲区末指针char*writebuffstart;/写入数据缓冲区首指针char*writebuffend;/写入数据缓冲区末指针int

9、 readcount;/读入数据量int writecount;/写入数据量15.1 嵌入式Linux IC卡接口设计与驱动开发char*readp;/读入数据当前指针int readnum;/已经读入量char*writep;/当前写入数据指针int writenum;/当前写入量int newstate;/卡当前状态0为无卡1为有卡int oldstate;/卡的旧状态int statechange;/卡状态变化标志;struct=open:icopenread:icreadwrite:icwritepoll:icpoll;15.1 嵌入式Linux IC卡接口设计与驱动开发这样在驱动模块

10、中,只需要struct ICDATA iccdata;一条语句便可定义全部的卡处理数据结构定义;而ic_fops则定义了设备操作映射函数结构,从这个数据结构看,我们实现了IC卡设备的打开、读、写和监控函数。(2)硬件接口控制线控制子函数这些函数用作进行卡复位、时钟等信号的控制。staticvoidsetclkout(void)#define PB_DR26(ushort)0 x0020)volatile immap_t*immap=(immap_t*)IMAP_ADDR;(void)immap;immap-im_cpm.cp_pbpar&=(PB_DR26);immap-im_cpm.cp_p

11、bdir|=PB_DR26;以上是以我们开发的硬件系统平台为例的硬件控制接口操作函数之一,用于控制I C卡的复位信号置 15.1 嵌入式Linux IC卡接口设计与驱动开发针对不同硬件平台函数,内部操作方法不尽相同。类似的其它操作函数还有:staticvoidsetrstout(void)staticvoidclearrst(void)staticvoidsetclk(void)staticvoidsetrst(void)staticvoidclearclk(void)staticvoidsetsda(void)staticvoidclearsda(void)staticvoidsetsdai

12、n(void)staticvoidsetsdaout(void)(3)模块初始化函数的实现static int _init init_ic(void)initicdata(&icdata);init_waitqueue_head(&icdev.readq);15.1 嵌入式Linux IC卡接口设计与驱动开发init_waitqueue_head(&icdev.writeq);timer_task.routine=(void(*)(void*)timer_do_tasklet;timer_task.data=(void*)&icdata;m8xx_timer_setup();m8xx_time

13、r_start();result=register_chrdev(major1 IC&ic_fops);return0;模块初始化函数是模块开发过程中必不可少的处理函数,用于实现设备的初始化、中断初始化及处理、设备注册等,在上面函数中首先应用initicdata(&icdata)实现了卡数据的初始化,然后定义了队列数据,再进行了中断处理函数的绑定、中断申请以及中断初始化。最后实现了IC卡字符设备的申请,设备名为IC。15.1 嵌入式Linux IC卡接口设计与驱动开发(4)中断处理模块采用了MPC823E的定时器中断,在每个定时器中断发生时对插卡状况进行检测。如果检测到插卡则进行读卡操作,如果

14、检测到拔卡操作则进行卡数据的清零和卡状态数据的更新。程序中的中断处理采用了timer_task任务队列来实现中断的后续处理,其处理函数为timer_do_tasklet。M8xx_timer_setup()函数首先进行MPC823E定时器的初始化和参数设定。然后应用语句cpm_install_handler(CPMVEC_TIMER4 m8xx_timer_interrupt(void*)0)实现了中断处理的资源申请和中断处理函数m8xx_timer_interrupt()的绑定,中断处理函数中采用语句queue_task(&timer_task&tq_immediate);mark_bh(I

15、MMEDIATE_BH);实现了任务队列timer_task加入内核tq_immediate的任务,队列处理内核在合适的时间会自动调用timer_task的例行处理函数timer_do_tasklet()进行中断的后续处理。15.1 嵌入式Linux IC卡接口设计与驱动开发在timer_do_tasklet()处理函数中有一条语句wake_up_interruptible(&icdev.writeq)与ic_poll函数中的poll_wait(flip&icdev.writeq wait)相对应,当中断发生时将等待时间队列icdev.writeq激活,而poll_wait函数则针对此队列进行

16、监控,一旦被激活则可以传递给用户插卡操作信息,在用户应用软件中可立即调用读函数进行读卡操作,这样就实现了对卡的实时操作监控。(5)模块注销函数的实现static void _exit remove_ic(void)m8xx_timer_stop();cpm_free_handler(CPMVEC_TIMER1);unregister_chrdev(major1 IC);这个函数也是模块驱动开发中必不可少的函数之一,用于模块卸载时进行资源的释放,并注销此模块。如上函数所示,首先进行了中断的停止、释放中断资源,同时进行了字符设备的注销。15.1 嵌入式Linux IC卡接口设计与驱动开发(6)设备

17、读写监控等子函数用来实现对卡的操作,主要是通过实现卡的各种操作时序。也即在ic_fops结构体中定义的4个操作函数:icopen用于打开卡设备进行一些数据的初始化操作;icread()用于插卡操作时读取卡数据;icwrite()用于写卡;icpoll()用于实现卡的实时监控。综上所述,卡驱动模块的基本实现原理是:申请中断资源,当有插卡操作发生时引发中断进行读卡操作。在拔卡操作时也能引发中断,同时进行相应数据处理,同时提供poll()函数接口,用户可采用此函数对设备进行监控,从而实现有卡操作发生时,马上进行卡数据的更新。注:驱动程序源码可在网站下载。15.1 嵌入式Linux IC卡接口设计与驱

18、动开发5、驱动模块开发的编译调试以开发平台和编译器为例编写简单的makefile文件为:CC=ppc_8xx-gccDD=-nostdinc-DMODULE-D_KERNEL_-I/mykernel/include-Wall-Wstrict-prototypes-Wno-trigraphs-O2-fomit-frame-pointer-fno-strict-aliasing-fno-common-I/mykernel/arch/ppc-fsigned-char-msoft-float-pipe-ffixed-r2-Wno-uninitialized-mmultiple-mstring-fno-

19、builtin-I/opt/hardhat/devkit/ppc/8xx/target/usr/lib/gcc-lib/powerpc-hardhat-linux/3.2.1/include ic.o:ic.c$(CC)$(DD)-cic.cinstall:makeic.oclean:rm*.o15.1 嵌入式Linux IC卡接口设计与驱动开发执行命令make install便可以实现驱动模块的动态编译,内核提供了两个应用程序insmod和rmmod,来实现内核模块的动态加载和去除,在模块编译当前目录下执行命令:mknod /dev/charmodule c 254 0建立与此设备模块对应的

20、设备文件节点。c表示为字符设备254表示主设备号0表示子设备号,执行命令insmod ic.o可实现模块动态加载,而命令rmmod ic可实现模块的动态去除。6、驱动模块的静态编译进内核将模块驱动源文件拷贝进/drivers/char/目录下,修改/drivers/char/Makefile文件,添加:obj-$(CONFIG_MYMODULE)+=ic.o在/drivers/char/config.in文件中添加config CONFIG_MYMODULEbool IC CONFIG_MYMODULE15.1 嵌入式Linux IC卡接口设计与驱动开发进入编译内核目录执行make menuc

21、onfig在character devices目录下即可见到IC选项选择,然后执行编译命令即可编入内核或仅编译模块:make mrpropermake menuconfigmake CROSS_COMPILE=ppc_8xx-gccmake modules CROSS_COMPILE=ppc_8xx-gcc即可只编译内核在源文件目录下可见到ic.o7、总结用基本的字符设备实现I C卡设备的驱动模块开发。内核驱动模块的开发是与硬件直接接触的。针对硬件的不同,其内部处理方法也千变万化,对于内核模块开发最有效的学习途径和最好的学习文档,就是Linux的内核源代码。同时,加入一些Linux的邮件开发组

22、也将获益非浅。15.2 嵌入式GPS导航系统的设计15.2.1 与GPS相关的一些概念1、GPSGPS全称是GlobalPositionSystem,中文意思是全球定位系统。通过GPS的定位功能可知道当前处于地球上的具体位置,该具体位置用一组经纬度和海拔高度数据信息来表现出来。GPS是美国国防部陆海空三军联合研制的第二代卫星导航定位系统,自1973年到1993年,GPS全球定位系统的建立经历了近20年,耗资过百亿美元;整个定位系统主要是通过围绕在地球表面的24颗人造卫星来实现全天候、全球性和高精度的连续定位的,这24颗卫星分六条轨道围绕在地球表面,每条轨道上有四颗卫星。15.2 嵌入式GPS导

23、航系统的设计2、导航、导航导航就是指通过借助GPS全球定位功能及车载电子地图,然后在输入了要去的目的地后导航系统就会在行驶过程中自动在电子地图上规划出到达目的地的最佳行车路线,并配有专业导航语言及文字导航信息来引导正确航行至目的地。要实现导航功能必须满足两个基本条件:第一是有GPS全球定位系统的终端设备,即能接收和处理卫星信号;第二就是要有电子地图。3、坐标、坐标(coordinate)有2维、3维两种坐标表示,当GPS能够收到4颗及以上卫星的信号时,它能计算出本地的3微坐标:经度、纬度、高度,若只能收到3颗卫星的信号,它只能计算出2维坐标:精度和纬度,这时它可能还会显示高度数据,但这数据是无

24、效的。大部分GPS不仅能以经/纬度(Lat/Long)的方式,显示坐标,而且还可以用UTM(UniversalTransverseMercator)等坐标系统显示坐标但我们一般还是使用LAT/LONG系统,这主要是由你所使用的地图的坐标系统决定的。坐标的精度在SelectiveAvailability(美国防部为减小GPS精确度而实施的一种措施)打开时,GPS的水平精度在100-50米之间,视接受到卫星信号的多少和强弱而定。15.2 嵌入式GPS导航系统的设计4、路标路标(LandmarkorWaypoint)GPS内存中保存的一个点的坐标值。在有GPS信号时,按一下”MARK”键,就会把当前

25、点记成一个路标,它有个默认的一般是象”LMK04”之类的名字,你可以修改成一个易认的名字(字母用上下箭头输入),还可以给它选定一个图标。路标是GPS数据核心,它是构成”路线”的基础。标记路标是GPS主要功能之一,但是你也可以从地图上读出一个地点的坐标,手工或通过计算机接口输入GPS,成为一个路标。一个路标可以将来用于GOTO功能的目标,也可以选一条路线Route作为一个支点。一般GPS能记录500个或以上的路标。5、路线、路线(ROUTE)路线是GPS内存中存储的一组数据,包括一个起点和一个终点的坐标,还可以包括若干中间点的坐标,每两个坐标点之间的线段叫一条”腿”(leg)。常见GPS能存储2

26、0条线路,每条线路30条”腿”。各坐标点可以从现有路标中选择,或是手工/计算机输入数值,输入的路点同时做为一个路标(Waypoint/Landmark)保存。实际上一条路线的所有点都是对某个路标的引用,比如你在路标菜单下改变一个路标的名字或坐标,如果某条路线使用了它,你会发现这条线路也发生了同样的变化。可以有一条路线是”活跃”(Activity)的。”活跃”路线的路点是导向(见5)功能的目标。15.2 嵌入式GPS导航系统的设计6、前进方向、前进方向(HeADIng)GPS只有在移动时才能知道自己的运动方向。GPS每隔一秒更新一次当前地点信息,每一点的坐标和上一点的坐标作比较,就可以知道前进的

27、方向。不同GPS关于前进方向的算法是不同的,基本上是最近若干秒的前进方向,所以除非你已经走了一段并仍然在走直线,否则前进方向是不准确的,尤其是在拐弯的时候你会看到数值在变个不停。方向的是以多少度显示的,这个度数是手表表盘朝上,12点指向北方,顺时针转的角度。有很多GPS还可以用指向罗盘和标尺的方式来显示这个角度。一般同时还显示前进平均速度,也是根据最近一段的位移和时间计算的。15.2 嵌入式GPS导航系统的设计7、导向、导向(Bearing)导向功能在以下条件下起作用:1)设定”走向”(GOTO)目标。”走向”目标的设定可以按”GOTO”键,然后从列表中选择一个路标。以后”导向”功能将导向此路

28、标。2)目前有活跃路线(Activityroute)。活跃路线一般在设置-路线菜单下设定。如果目前有活动路线,那么”导向”的点是路线中第一个路点,每到达一个路点后,自动指到下一个路点。在”导向”页面上部都会标有当前导向路点名称(“ROUTE”里的点也是有名称的)。它根据当前位置,计算出导向目标对你的方向角,以与”前进方向”相同的角度值显示。同时显示离目标的距离等信息。读出导向方向,按此方向前进即可走到目的地。有些GPS把前进方向和导向功能结合起来,只要用GPS的头指向前进方向,就会有一个指针箭头指向前进方向和目标方向的偏角,跟着这个箭头就能找到目标。15.2 嵌入式GPS导航系统的设计8、足迹

29、线、足迹线(Plottrail)GPS每秒更新一次坐标信息,所以可以记载自己的运动轨迹。一般GPS能记录1024个以上足迹点,在一个专用页面上,以可调比例尺显示移动轨迹。足迹点的采样有自动和定时两种方式自动采样由GPS自动决定足迹点的采样方式,一般是只记录方向转折点,长距离直线行走时不记点;定时采样可以规定采样时间间隔,比如30秒、一分钟、5分钟或其他时间,每隔这么长时间记一个足迹点。在足迹线页面上可以清楚地看到自己足迹的水平投影。你可以开始记录、停止记录、设置方式或清空足迹线。”足迹”线上的点都没有名字,不能单独引用,查看其坐标,主要用来画路线图(计算机下载路线?)和”回溯”功能。很多GPS

30、有一种叫做”回溯”(Traceback)的功能,使用此功能时,它会把足迹线转化为一条”路线”(ROUTE),路点的选择是由GPS内部程序完成的一般是选用足迹线上大的转折点。车载定位导航系统(VehicleLocationandNavigationSystem,VLNS)是集中应用了自动车辆定位技术、地理信息系统与数据库技术、计算机技术、多媒体技术、无线通信技术的高科技综合系统,为车辆驾驶员提供以下重要功能:自动车辆定位、行车路线设计、路径引导服务、综合信息服务、无线通信功能。15.2 嵌入式GPS导航系统的设计15.2.3 嵌入式GPS导航系统GPS系统包括三大部分:空间部分GPS卫星星座;地

31、面控制部分地面监控系统;用户设备部分GPS信号接收机。GPS的用户设备主要由接收机硬件和处理软件组成。用户通过用户设备接收GPS卫星信号,经信号处理而获得用户位置、速度等信息,最终实现利用GPS进行导航和定位的目的。15.2 嵌入式GPS导航系统的设计15.2.4嵌入式GPS导航系统的硬件设计车载终端系统的硬件体系构成如图15.4所示。由于使用环境的特殊性,作为系统核心的导航计算机必须体积小、集成度高、功耗低、处理能力强、操作简单便捷。目前导航计算机较多的使用嵌入式操作系统,如WindowsCE和嵌入式Linux等。根据车辆使用的频繁性及道路复杂性的要求,其可靠性必须高,且扩展性和兼容性要好。

32、导航计算机是核心部分,除定位和通信外,系统的其他功能模块都以导航计算机为硬件平台,通过应用软件来实现。在性能指标上,由于必须负担地图的显示和刷新,行驶指令计算、定位数据的处理与转换等具有较高实时性要求的任务和路径规划这样的大计算量任务,因此导航计算机不需具备足够的运算能力。从功能上看,导航计算机应具备几本的多媒体功能、强大的控制和通信能力以及良好的扩展性。从车载环境的要求看,导航计算机还需要具备良好的抗震性能,其外形尺寸和功耗也要受到严格限制。15.2 嵌入式GPS导航系统的设计为实现上述设计目标在系统中采用了嵌入式导航计算机系统设计方案,如图15.5所示 15.2 嵌入式GPS导航系统的设计

33、中央处理器选用IntelSA111O精简指令(RISC)芯片他具有每周期一条指令、寄存器到寄存器的操作、简单的寻址方式、简单的指令格式等,而且具有体积小、功耗低低成本而高性能等特点,其强大的计算能力和控制能力很适合导航系统的需求。系统使用的存储设备有2种SDRAM用于在系统工作时加载和运行应用程序FLASH用于保存程序和数据。为加强图形显示功能,系统配有专门的LCD控制电路,同时在LCD显示屏上装有触摸面板。另外,系统配备了串行通信端口、红外数据端口、SD卡插槽、通用串行总线接口。电子地图数据存放在存储卡中,更换起来非常方便。为了加强对功耗的控制系统中设计了电源管理模块。15.2 嵌入式GPS

34、导航系统的设计15.2.5 嵌入式GPS导航系统的软件设计车载GPS系统的应用程序在功能上可以分为7个功能模块,即初始化模块,控制模块,GPS数据获取模块,上行数据转换模块,用户界面模块,通信模块和下行数据处理模块。初始化模块主要实现对串口的初始化及把所有的标志位置零;控制模块主要是根据上位机的命令来执行相应的操作,比如采集GPS数据,发送当前行车状态等;用户界面模块主要功能就是把GPS数据,状态数据等在触摸屏上显示出来,同时还要可以响应触摸屏上的中断,以便实现通过触摸屏操作车载。GPS数据获取模块的主要功能就是通过与串口相连接的GPS模块获取当前的GPS信息;在本程序中用的是GPRMC定位语

35、句,将忽略其它信息。提取GPRMC语句的思路是设置一个数据缓冲区,把接收到的GPS数据都放入这个缓冲区,当缓冲区满了的时候就在缓冲区中查找是否接受到GPRMC定位语句,如果没有接收到则重新接收GPS数据。如果找到了GPRMC定位语句则还要判断该语句在缓冲区中的位置离缓冲区的最大字节数是否大于62个字节,因为本程序中需要的GPRMC定位语句所包含的字节数为62。15.2 嵌入式GPS导航系统的设计上行数据转换模块的主要功能是把接收到的GPS数据或是相关的状态信息转换成约定好的数据格式以便同监控中心的通信。该模块会判断需要转换的数据是GPS数据信息还是相关状态信息或是两者都有,然后选择相应的转换程

36、序。由上面的介绍可以知道接受到的GPS数据都是顺序存放在数据缓冲区当中的,需要什么数据就到缓冲区中相应的位置提取就可以了。数据都是以字符形式存放的,所以实际要用的时候必须先转换成整形数据。下行数据转换模块的功能与上行数据转化模块的功能相反,它将监控中心发送的命令进行识别后发送给车载终端,并送用户界面模块显示。15.2 嵌入式GPS导航系统的设计通信模块的主要任务是完成车载终端与监控中心的通信,它既可以通过GPRS网络实现与监控中心的无线通信,也可以通过网口与笔记本电脑连接进行通信。如果车载终端与上位机的距离隔的很远可以直接通过GPRS网络与监控中心进行连接,而且通过GR47模块连接GPRS网络

37、与监控中心连接也非常方便,只用往GPRS模块发送几条AT命令就可以了,但是监控中心必须有能上因特网的固定IP。启动车载终端的同时GR47模块也会被启动,这是模块会自动连接上GPRS网络进入命令模式。拨号成功以后就连接上了GPRS网络了,然后对于GR47模块连接的串口进行读写操作就可以实现与监控中心的无线通信了。通过网口进行通信则比较简单,直接采用Linux下的socket编程就可以实现。15.2 嵌入式GPS导航系统的设计15.2.6 嵌入式GPS导航系统的应用GPS最初就是为军方提供精确定位而建立的,至今它仍然由美国军方控制。军用GPS产品主要用来确定并跟踪在野外行进中的士兵和装备的坐标,给

38、海中的军舰导航,为军用飞机提供位置和导航信息等。GPS的应用领域,上至航空航天器,下至捕鱼、导游和农业生产,已经无所不在了目前,GPS系统的应用也将十分广泛,我们可以应用GPS信号可以进行海、空和陆地的导航,导弹的制导,大地测量和工程测量的精密定位,时间的传递和速度的测量等。对于测绘领域,GPS卫星定位技术已经用于建立高精度的全国性的大地测量控制网,测定全球性的地球动态参数;用于建立陆地海洋大地测量基准,进行高精度的海岛陆地联测以及海洋测绘;用于监测地球板块运动状态和地壳形变;用于工程测量,成为建立城市与工程控制网的主要手段。用于测定航空航天摄影瞬间的相机位置,实现仅有少量地面控制或无地面控制

39、的航测快速成图,导致地理信息系统、全球环境遥感监测的技术革命。15.2 嵌入式GPS导航系统的设计许多商业和政府机构也使用GPS设备来跟踪他们的车辆位置,这一般需要借助无线通信技术。一些GPS接收器集成了收音机、无线电话和移动数据终端来适应车队管理的需要。GPS的应用领域,上至航空航天器,下至捕鱼、导游和农业生产,已经无所不在了。15.2 嵌入式GPS导航系统的设计15.3 嵌入式嵌入式Linux系统中触摸屏控制的研究与实现系统中触摸屏控制的研究与实现本文主要讨论了基于嵌入式Linux操作系统的研究与开发。文章首先对嵌入式系统进行了简单介绍,在详细分析了系统特点的基础上,结合Linux自身的优

40、点,提出了基于嵌入式Linux操作系统对触摸屏驱动的开发方案。并详细介绍了驱动程序及测试应用程序的设计。目前,流行的商用嵌入式操作系统主要有Windows CE、Vxworks、PSOS、QNX等。这些专用操作系统均属于商业化产品,价格昂贵,且源代码不公开,使得每个系统上的应用软件和其它系统都不一样。嵌入式Linux的出现打破了这一僵局。它是可以进行裁剪、修改使之能在嵌入式计算机系统上运行的一种操作系统。既继承了Internet上无限的开放源代码的资源,又具有嵌入式操作系统的特性。它具有稳定性和安全性、良好的硬件支持、标准兼容性和资源丰富等功能。触摸屏是一种方便、快捷的输入设备,附着在显示器的

41、表面,与显示器配合使用。在工业控制场合的到了广泛的应用。本文根据实际的基于嵌入式Linux的电力机车受电弓检测仪的人机接口,论述了在这一系统中如何对触摸屏的控制。15.2 嵌入式GPS导航系统的设计1、Linux下的设备驱动Linux将设备分为最基本的两大类,字符设备和块设备。字符设备是以单个字节为单位进行顺序读写操作,通常不使用缓冲技术,如鼠标等。驱动程序实现比较简单,而块设备则是以固定大小的数据块进行存储和读写的,如硬盘,软盘等。为提高效率,系统对于块设备的读写提供了缓存机制,由干涉及缓冲区管理,调度,同步等问题,实现起来比字符设备复杂得多。Linux的设备管理是和文件系统解密结合的,各种

42、设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开,关闭,读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘主设备号是3。Linux为所有文件,包括设备文件提供了统一的操作函数接口。但是对于不同的外设,其操作方式各不相同。在本系统中触摸屏所完成的功能是将感测触点坐标,将坐标值A/D转换后传给CPU。驱动程序需要控制设备的采集并且把数据送往上层的应用程序。以后的处理由应用程序

43、来完成。15.2 嵌入式GPS导航系统的设计设备驱动程序要为设备提供通用的系统调用,如open、read、write、close等。2、嵌入式Linux系统下的驱动程序Linux是自由的多任务操作系统,它需要PC桌面系统作为运行平台。而本文所讨论的嵌入式Linux是指经过小型化裁剪、能够烧录入容量只有几百KB或几MB的闪存(Flash Memory)内,不需要硬盘作为存储介质,也不需要键盘、鼠标之类的外设,适用于8位/16位/32位MCU,应用于各种特定嵌入式场合的专用Linux操作系统。嵌入式Linux设备驱动程序中有一个很重要的数据结构。它是驱动程序与应用程序的接口,使编写驱动程序的工作变

44、得简单而规律。在该触摸屏驱动程序中定义了一个数据结构为的变量touch_fops,并进行了如下的赋值:15.2 嵌入式GPS导航系统的设计static struct touch_fops=read :touch_read,write:touch_write,open:touch_open,release:touch_release,poll:touch_poll,;(1)touch_open函数touch_open()这个函数在中的原型是open()函数。它的主要功能就是打开设备并初始化设备准备进行操作。下面一段程序介绍了touch_open()函数的实现过程。15.2 嵌入式GPS导航系统的

45、设计if(ret=request_irq(IRQ_touchRX,touch_rx,”touch_rx”,dev_idtouch)printk(“touch_rx_init:failed to register IRQ_touchRX n”);free_irq(IRQ_touchRX,dev_idtouch);return ret;在这个if语句中出现了3个函数。printk是内核提供的函数,功能近似标准C函数库中提的printf函数。在Linux操作系统中,因为驱动程序是在内核空间运行的,所以必须使用内核提供的函数,printf不能在内核空间运行。request_irq 是申请中断的函数,其

46、中参数IRQ_touchRX是所申请的中断号,touch_rx是所安装的中断处理函数,第三个参数是用于中断管理的一些常量,这里的值为0,表示可以进行中断的共享,参数touch_rx是发送中断的设备名称,dev_idtouch是用来共享的中断号。如果成功申请中断的话则返回0给ret变量,当返回了一个非0的值给ret变量的时候,则说明有另外一个驱动程序已经占用了要申请的中断信号线。当申请中断失败后,就必须进行中断信号线的释放,使用的是free_irq()中断信号线释放函数。15.2 嵌入式GPS导航系统的设计(2)touch_read函数touch_read()函数的原型是read()函数。它的作

47、用就是从触摸屏设备中读取数据。当在结构中用NULL来表示此函数的话,则说明这个设备是不允许进行读操作的,如果对其进行调用的话,内核将会返回一个错误。下面来对这个touch_read()函数进行一下分析。while(rx_user_count0)if(USAT0&HCQ_RX_EMPTY_BIT)=0 x40)touch_rx_bufrx_buf_count=*URXBUF0;rx_buf_count+;elseinterruptible_sleep_on_timeout(&rx_queue,TIME_OUT);这个循环语句的作用是开辟一个缓冲区用来存放从触摸屏设备中传来的数据。其中interr

48、uptible_sleep_on_timeout()是延时函数,具体是用定时器来进行延时。延时的原因是由于触摸屏设备把数据传入缓冲区需要一定的时间,而CPU必须等数据进入了缓冲区后才能进行数据的读取。15.2 嵌入式GPS导航系统的设计(3)touch_write 函数touch_write()函数的原型是write()函数,它的主要作用是向触摸屏设备发送数据和命令。原理与touch_read()函数类似,只是数据传输的方向不同。(4)touch_release函数touch_release 函数的原型是release()函数。用来关闭触摸屏设备的。如果用NULL代替,则表示设备永远是关闭的。

49、这个函数实现起来比较简单,先调用free_irq()释放触摸屏设备占用的中断控制线,接着使设备的引用计数为0,这样就完成了对触摸屏设备的关闭工作。15.2 嵌入式GPS导航系统的设计3、触摸屏的应用程序Linux操作系统中应用程序工作在用户区。触摸屏应用程序通过已加载到内核模块中的驱动程序控制触摸屏。应用程序可以通过触摸屏实际使用情况来编写。在我们实际的测控系统中触摸屏做为输入设备,与液晶显示屏配合使用达到完成相应的按钮指令的功能。下面是测试触摸屏能否正常工作的应用程序。#include#include#include#include#includeFILE*fp;int main()char

50、 read_buf2;char write_buf2=GetX,GetY;int fd,qr;15.2 嵌入式GPS导航系统的设计fd=open(“/dev/touch”,O_RDWR);/以可读写方式打开前面加载的触摸屏驱动模块if(fd0)GetLocation();15.2 嵌入式GPS导航系统的设计void GetLocation()fp=fopen(“/home/touch.txt”,”w+”);write(fd,write_buf,1);fwrite(read(fd,read_buf,1),1,1,fp);write(fd,&write_buf1,1);fwrite(read(fd

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服