欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    嵌入式Linux编程入门与开发实例-第11章.ppt

    • 资源ID:87338287       资源大小:1.19MB        全文页数:81页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式Linux编程入门与开发实例-第11章.ppt

    第第11 11章章 嵌入式车载终端的设计嵌入式车载终端的设计 随着社会的快速发展以及人民生活水平的提高,汽车及相关产业在整个国民经济中的地位变得越来越重要。数字信息技术以及网络技术的高速发展,使人民在追求驾驶舒适性、便利性的同时,汽车的自动化、智能化和网络化也相应地被提上了日程。车载终端是车辆导航、管理、监控和调度等ITS应用的基础,智能的车载终端为驾驶员提供了集通信,多媒体播放,导航,娱乐为一体的多种服务。车载移动多媒体系统的研制和产业化的实施,对发展车载移动多媒体应用信息产业,带动相关产业的共同发展具有十分重要的意义。第第11 11章章 嵌入式车载终端的设计嵌入式车载终端的设计 车载终端的硬件平台车载终端的硬件平台11.1嵌入式开发环境的建立嵌入式开发环境的建立11.2嵌入式车载终端软件的开发嵌入式车载终端软件的开发11.311.1 11.1 车载终端的硬件平台车载终端的硬件平台本设计选择的是SamSung的S3C2440A做为处理芯片,基于ARM920T内核,400MHz;S3C2440A的CPU内 核 采 用 的 是 ARM公 司 设 计 的 16/32位ARM920TRISC处 理 器。ARM920T实 现 了 MMU、AMBA总线和Harvard高速缓存体系结构,该结构具有独立的16KB指令Cache和16KB数据Cache。本设计的车载定位终端由GPRS模块、嵌入式微处理器和存储器、显示单元、电源与复位电路、存储器、JTAG等必需的外围电路等组成。嵌入式微处理器是整个车载定位终端的核心,负责控制整个系统。GPS模块接收卫星信号,车载定位终端通过GPRS模块和车辆监控中心进行双向的信息传输,将车辆的位置和状态信息传送到车辆监控中心,同时接收车辆监控中心的指令数据。车载终端的结构框图如图11-1所示。图11-1 车载终端的结构框图S3C2440A是是著著名名的的半半导导体体公公司司SAMSUNG推推出出的的一一款款16/32位位RISC微微处处理理器器,它它为为手手持持设设备备和和一一般般类类型型的的应应用用提提供供了了低低价价格格、低低功功耗耗、高高性性能能微微控控制制器器的的解解决决方方案案。S3C2440A采采用用了了ARM920T的的内内核核,0.13um的的CMOS标标准准宏宏单单元元和和存存储储器器单单元元。其其低低功功耗耗、简简单单、且且全全静静态态设设计计特特别别适适合合于于对对成成本本和和功功率率敏敏感感型型的的应应用用。它它采采用用了了新新的的总总线线架架构构AdvancedMicrocontrollerBusArchitecture(AMBA)。S3C2440A的的最最大大特特点点是是其其核核心心处处理理器器(CPU)是是一一个个由由AdvancedRISCMachines有有限限公公司司设设计计的的16/32位位ARM920T的的RISC处处理理器器。ARM920T实实现现了了MMU,AMBABUS和和Harvard高高速速缓缓冲冲体体系系结结构构。这这一一结结构构具具有有独独立立的的16KB指指令令Cache和和16KB数数据据Cache。每每个个都都是是由由具具有有8字字长长的的行行组组成成。通通过过提提供供一一套套完完整整的的通通用用系系统统外外设设,S3C2440A减少整体系统成本和无需配置额外的组件。减少整体系统成本和无需配置额外的组件。11.1.1 S3C2440A11.1.1 S3C2440A微处理器微处理器S3C2440A集成的以下片上功能主要包括:集成的以下片上功能主要包括:l1.2V内核供电,内核供电,1.8V/2.5V/3.3V存储器供电,存储器供电,3.3V外部外部I/O供电具备供电具备16KB的的I-Cache和和16KBDCache/MMU。l外部存储控制器外部存储控制器(SDRAM控制和片选逻辑控制和片选逻辑)。lLCD控制器(最大支持控制器(最大支持4K色色STN和和256K色色TFT)提供)提供1通道通道LCD专用专用DMA。l4通道通道DMA并有外部请求引脚。并有外部请求引脚。ll3通道通道UART(IrDA1.0,64字节字节TxFIFO,和和64字节字节RxFIFO)。l2通道通道SPI。l1通道通道IIC-BUS接口(多主支持)。接口(多主支持)。l1通道通道IIS-BUS音频编解码器接口。音频编解码器接口。lAC97解码器接口解码器接口l兼容兼容SD主接口协议主接口协议1.0版和版和MMC卡协议卡协议2.11兼容版。兼容版。l2端口端口USB主机主机/1端口端口USB设备(设备(1.1版)版)l4通道通道PWM定时器和定时器和1通道内部定时器通道内部定时器/看门狗定时器看门狗定时器l8通道通道10比特比特ADC和触摸屏接口和触摸屏接口l具有日历功能的具有日历功能的RTCl相机接口(最大相机接口(最大40964096像素的投入支持。像素的投入支持。20482048像素的投入,支持缩放)像素的投入,支持缩放)l130个通用个通用I/O口和口和24通道外部中断源。通道外部中断源。l具有普通,慢速,空闲和掉电模式。具有普通,慢速,空闲和掉电模式。l具有具有PLL片上时钟发生器。片上时钟发生器。车车辆辆监监控控系系统统是是在在全全球球卫卫星星定定位位系系统统(GPS)、公公共共移移动动通通信信网网(GPRS)、互互联联网网(Internet)和和地地理理信信息息系系统统(GIS)等等现现有有技技术术基基础础上上开开发发的的一一套套信信息息服服务务管管理理系系统统,以以用用于于各各种种移移动动目目标标、固固定定目目标标的的导导航航、定定位位和和监监控控。完完整整的的车车辆辆监监控控系系统统主主要要由由GPS车车载载终终端端、GPRS无无线线网网络络和和监监控控中中心心3部部分分构构成成。车车辆辆监监控控系系统统的的整整体体结结构构如如图图11-2所所示示。其其中中,车车载载终终端端包包括括ARM、GPS卫卫星星数数据据采采集集模模块块、GPRS无无线线通通信信模模块块以以及及各各种种辅辅助助扩扩展展电电路路等等,GPRS无无线线链链路路基基于于移移动动公公司司的的GPRS移移动动通通信信公公众众网网,包包括括MSC基基站站控控制制器器、SGSN业业务务支支撑撑节节点点、GGSN网网关支持节点等,监控中心包括信息服务器和关支持节点等,监控中心包括信息服务器和GIS数据库。数据库。11.1.2 11.1.2 车辆监控系统车辆监控系统图11-2 车载监控系统由由于于嵌嵌入入式式车车载载终终端端使使用用了了图图形形用用户户界界面面,应应用用程程序序在在运运行行时时需需要要使使用用较较多多的的内内存存,因因此此系系统统需需要要有有足足够够的的内内存存。此此外外,使使用用图图形形界界面面的的Linux文文件件系系统统体体积积较较大大,需需要要大大容容量量的的存存储储文文件件系系统统。在在设设计计中中为为嵌嵌入入式式车车载载终终端端配配置置了了64MB的的SDRAM用用于于代代码码的的执执行行,以以及及64MB的的NANDFlash用于保存代码和各种文件。用于保存代码和各种文件。11.1.3 11.1.3 存储单元存储单元LCD显示器是通过给不同的液晶单元供电,显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。控制其光线的通过与否,从而达到显示的目的。因此,因此,LCD的驱动控制归于对每个液晶单元通断的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对电的控制,每个液晶单元都对应着一个电极,对其通电,便可使光线通过其通电,便可使光线通过(也有刚好相反的,即不也有刚好相反的,即不通电时光线通过,通电时光线不通过通电时光线通过,通电时光线不通过)。光源的提。光源的提供方式有两种供方式有两种:透射式和反射式。笔记本电脑的透射式和反射式。笔记本电脑的LCD显示屏即为透射式,屏后面有一个光源,因显示屏即为透射式,屏后面有一个光源,因此外界环境可以不需要光源。而一般微控制器上此外界环境可以不需要光源。而一般微控制器上使用的使用的LCD为反射式,需要外界提供光源,靠反为反射式,需要外界提供光源,靠反射光来工作射光来工作1261。11.1.4 LCD11.1.4 LCD扫描器控制方式LCD显示屏没有驱动电路,需要与驱动电路配合使用。这种LCD体积小,但需要另外的驱动芯片。S3C2440AA的内置LCD控制器支持单色、每象素2位(4级灰度)、每象素4位16级灰度)的黑白屏,也支持每象素8位(256色)和每象素12位(4096色)的彩色LCD,并且也支持每象素16位和每象素24位的真彩显示。LCD控制器可以通过编程选择支持不同的LCD屏的要求,例如行和列象素,数据总线宽度,就口时序和刷新频率。LCD控制器的主要作用是将定位于系统存储器的显示缓冲区的LCD图像数据传送到外部LCD驱动器。数字音频接口是嵌入式车载终端的一数字音频接口是嵌入式车载终端的一个多媒体接口,主要用来实现多媒体播放个多媒体接口,主要用来实现多媒体播放和录音等功能。和录音等功能。对于播放多媒体文件,对于播放多媒体文件,S3C2440A先将先将音频数据通过软件解码,然后将解码后的音频数据通过软件解码,然后将解码后的数据通过数字音频接口传输给数字音频编数据通过数字音频接口传输给数字音频编解码芯片,数字音频编解码芯片将数据处解码芯片,数字音频编解码芯片将数据处理后,经过数模转换,最后通过模拟音频理后,经过数模转换,最后通过模拟音频接口将声音送到扬声器实现声音的输出。接口将声音送到扬声器实现声音的输出。11.1.5 11.1.5 数字音频接口数字音频接口11.2 11.2 嵌入式开发环境的建立嵌入式开发环境的建立 进行嵌入式应用程序开发时,一般应进行嵌入式应用程序开发时,一般应先在宿主机上编译调试通过后,再下载到先在宿主机上编译调试通过后,再下载到目标板上。若遇到问题时,可直接在目标目标板上。若遇到问题时,可直接在目标板上进行调试开发。这种直接在目标板开板上进行调试开发。这种直接在目标板开发模式下的开发流程将宿主机和目标机使发模式下的开发流程将宿主机和目标机使用交叉网线通过以太网连接,在用交叉网线通过以太网连接,在PC宿主宿主机上运行机上运行minicom作为目标板的显示终端,作为目标板的显示终端,在目标板上通过网络文件系统在目标板上通过网络文件系统(NFS)来挂来挂载载(mount)宿主机硬盘,让应用程序直接宿主机硬盘,让应用程序直接运行在目标板上进行调试。运行在目标板上进行调试。图11-3Linux系统开发流程图(l)宿主机软件安装当今Linux发行版本有很多,需要选择适合宿主机上的Linux开发版本。Linux的安装有两种方式,一是在PC上直接安装,这样PC上就有两种操作系统,在电脑启动的时候选择其中一个启动;另一种是在Windows中安装虚拟机Vmware,而Linux在虚拟机中安装,这样Linux的启动要先启动Windows,然后在虚拟机中启动,这种的优点是可以同时启动两个操作系统,而且两个系统就像两台直接连接的PC,可以互相通信。(2)安装交叉编译器交叉编译器是在宿主机上编译目标机程序的编译器,是嵌入式软件开发特有的编译器。(3)NFS方式挂载调试NFS(NetworkFileSystem)是由SunMierosystems公司开发的,NFS允许一个系统在网络上与其他人共享目录和文件。通过使用NFS,用户可以像访问本地文件一样访问远端系统上的文件。由于NFS的便利特性,使得在嵌入式开发过程中,往往在目标板上使用NFS挂在宿主机上的需要调试的文件来进行调试。(4)设置宿主机和目标机共享文件夹(5)连接交叉串口线配置串口由于嵌入式系统资源相对匾乏,缺少PC机上良好的开发环境和界面,故在调试过程中常常使用Minicom来进行调试,Minicom相当于一个人机交互的界面。可以把需要输出的调试信息通过串口输出到PC上。(6)网络配置在宿主机里开启一个终端后进入防火墙设置,接着进行系统设置,启动NFS服务,如果之前已经启动了NFS,此后还需要修改目标板的IP地址,使之与宿主机在一个局域网网段,然后在U-boot界面下输入配置文字设置开发板的启动方式。11.3 11.3 嵌入式车载终端软件的开发嵌入式车载终端软件的开发本节介绍嵌入式车载终端应用程序的设计,包括GPRS通信、温度调控系统,可视倒车功能、车载SIP电话、移动终端音视频文件播放器、嵌入式web服务器在车载终端的实现等。GPRS无无线线通通信信模模块块G20内内嵌嵌了了TCP/IP协协议议栈栈,处处理理器器使使用用AT指指令令集集,可可方方便便与与监监控控中中心心服服务务器器建建立立TCP/IP或或UDP/IP连连接接。因因此此,系系统统的的软软件件设设计计无无需需考考虑虑链链路路层层PPP控控制制脚脚本本程程序序和和网网络络层层TCP/UDP套套接接字字程程序序的的设设计计,进进而而降降低低了了系系统统软软件件设设计计的的复复杂杂度度,提提高高了了系系统统的可靠性。的可靠性。11.3.1 GPRS11.3.1 GPRS通信模块通信模块 为在车载终端和监控中心之间建立数据传输链路,为在车载终端和监控中心之间建立数据传输链路,G20 需要经历两个主要过程需要经历两个主要过程,具体如下:具体如下:1、初始化过程、初始化过程 图11-4描述了G20初始化的过程。上电后,G20首先进行硬件初始化设置,如配置数据的传输波特率,设置线路工作参数等。初始化完成之后G20将打开SIM卡,并进行校验SIM卡的操作,如判断SIM卡是否被更换等。这一切完成后,G20就进入就绪状态,开始登录网络,与监控中心进行“握手”应答。图11-4 G20 初始化过程2、“握手握手”过程过程 车载终端的G20登录GPRS网络成功并获到一个动态分配的IP地址后,开始准备接收监控中心发送的带监控中心服务器IP地址的短信。一旦得到服务器IP地址,先创建socket进行连接,连接成功后给监控中心发送带己方IP地址的短信,并开始等待接收启动命令标志头。如果在预定的等待时间内没有收到监控中心发送的启动命令,则说明监控中心此时没有收取到车载终端的IP地址,则发送第二条带终端IP地址的短信给服务端,重复以上过程三次后结束。“握手”应答成功以后,车载终端与监控中心的数据链路建立,即可进行数据的可靠传输。温度自动调节系统,是车载信息采集的一部温度自动调节系统,是车载信息采集的一部分,是对车内温度的实时监控。如果温度小于人分,是对车内温度的实时监控。如果温度小于人体的舒适值,会自动开启车内空调的取暖系统,体的舒适值,会自动开启车内空调的取暖系统,同理,如下大于人体舒适值,则会开启空调的制同理,如下大于人体舒适值,则会开启空调的制冷系统。冷系统。本设计采用一线制温度数据采集。一线制温本设计采用一线制温度数据采集。一线制温度网络的温度信号特点是数值不高,多在度网络的温度信号特点是数值不高,多在-1085范围内,温度信号变化较慢,实时性要范围内,温度信号变化较慢,实时性要求不高,精度要求不高。一线制的优点在于硬件求不高,精度要求不高。一线制的优点在于硬件接口少所有的通信都通过一线协议,而与被测的接口少所有的通信都通过一线协议,而与被测的具体量无关。具体量无关。11.3.2 11.3.2 温度自动调节系统温度自动调节系统DS18B20是美国DALLAS公司生产的单总线数字温度传感器,可把温度信号直接转换成串行数字信号供微机处理,在一条总线上可挂接多个DS18B20芯片。主机或从机通过一个漏极开路或三态端口连至该单总线,以允许设备在不发送数据时能够释放总线,而让其他设备使用总线。DS18B20数字温度传感器可提供912位温度读数。读取或写入DS18B20的信息仅需一根总线,总线本身可以向所有挂接的DS18B20芯片提供电源,而不需额外的电源。由于DS18B20这一特点,非常适合于多点温度检测系统,硬件结构简单。DS18B20具有以下功能特点:(1)适应宽的电压范围(3.0V5.5V)在寄生电源方式下可由数据线供电。(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要1条GPIO口线即可实现微处理器与DS18B20的双向通信。(3)温度范围适合车内应用可测量55+125,在-10+85时精度为0.5。DS18B20驱动程序DS18B20.c如下所示:#ifndef_KERNEL_#define_KERNEL_#endif#ifndefMODULE#defineMODULE#endif#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#defineMAJOR_NUM98/*主设备号*/#definedat_1820_hignGPGDAT|=17;GPGCON&=(314)#definedat_1820_lowGPGDAT&=(17);GPGCON=(GPGCON&(314)|(114)unsignedcharDS18B20_Reset(void)unsignedchardr=0;dat_1820_low;udelay(600);/delay600uSdat_1820_hign;udelay(80);/delay80uSif(!(GPGDAT&(17)dr=1;udelay(500);/delay400uSreturndr;voidDS18B20_Write(unsignedchardw)unsignedcharwr;for(wr=0;wr=1;udelay(3);udelay(5);unsignedcharDS18B20_Read(void)unsignedchardr,dr1=0;for(dr=0;dr=1;dat_1820_low;udelay(2);dat_1820_hign;udelay(10);if(GPGDAT&(17)dr1|=0 x80;udelay(60);returndr1;/*readthetemperature*/shortDS18B20_ReadTemp(void)floatdt3;shortdt;unsignedchardt1,dt2;DS18B20_Reset();DS18B20_Write(0 xcc);DS18B20_Write(0 x44);GPGDAT|=17;GPGCON=(GPGCON&(314)|(114);mdelay(1000);/*延时1s*/dat_1820_hign;DS18B20_Reset();DS18B20_Write(0 xcc);DS18B20_Write(0 xbe);dt1=DS18B20_Read();dt2=DS18B20_Read();dt=dt2*0 x100+dt1;DS18B20_Reset();if(dt&(115)dt=0 xffff-dt+1;dt3=dt*0.0625*10;dt=0 x8000+dt3;elsedt3=(float)dt*0.0625*10;dt=dt3;dt3=(float)dt)*0.0625;returndt;staticssize_tDS18B20_read(structfile*file,char*buff,size_tsize,loff_t*loff_t)shorttp;tp=DS18B20_ReadTemp();copy_to_user(buff,&tp,sizeof(short);returnsizeof(short);structfile_operationsDS18B20_fops=read:DS18B20_read,;staticint_initDS18B20_init(void)intret=0;shorttp=0;dat_1820_hign;GPGUP&=(1Videoforlinux,加载Video4Linux模块,为视频采集设备提供编程接口。l选择模块USBsupport-USBMultimediadevices-USBSPCA5XXSunplusVimicroSonixCameras。l编译内核,makedep;makezImage;makemodules,在/kernel/arch/arm/boot下生成内核映像zImage,将内核烧写到开发板中,并启动新内核。l通过编译后在/kernel/driver/usb/spca5xx下生成目标文件spca5xx.o、spcadecoder.o、spca_core.o,这就是所需要的驱动。l新内核启动,insmod三个.o文件(可以不用加载spcadecoder.o),摄像头就加载成功了。使用Video4Linux操作摄像头的流程如图11-6所示。图11-6 摄像头操作流程打开摄像头设备后,首先是获取摄像头的设备信息,包括备名称、支持的最大最小分辨率、信号源信息等。获得摄像头的信息后,对摄像头进行参数设置。根据系统使用的LCD显示器的特点,图像色彩模式设置为VIDEO_PALETTE_RGB565格式,图像分辨率设置为640*480,图像位深设置为16位。每采集一帧数据后调用ioct1(fd,DIDIOCSYNC,&frame)函数等待采集结束,然后根据需要继续采集下一帧图像或关闭摄像头。在程序设计中,与摄像头相关的操作和数据结构都被封装在VideoCapture类中。其成员函数通过Video4Linux提供的接口完成对摄像头的具体操作。VideoCapture类设计如下:classVideoCapturepublic:VideoCapture();VideoCapture();boolhasCamera()const;/*判断是否有可用的摄像头*/voidgetCameraImage(QImage&img);/*获取摄像头的图像数据*/QSizecaptureSize()const;/*返回摄像头的分辨率*/voidsetCapturesize(QSizesize);/*设置摄像头的分辨率*/intminimumFramePeriod()const;private;intfd;/*摄像头设备*/intwidth,height;/*摄像头摄像时使用的分辨率*/structvideo_capabilitycaps;/*摄像头信息的数据结构*/structvideo_mbufmbuf;/*进行内存映射的帧信息*/unsignedchar*frames;/*内存映射的帧地址*/intsetupCamera(QSizesize);/*摄像头初始化及参数设置*/voidshutdown();/*关闭摄像头*/;VideoCapture类的voidsetupCamera(QSizesize)成员函数用于初始化摄像头,其主要工作包括打开摄像头设备,获取摄像头基本信息,设置图像色彩模式,获取图像窗口参数,设置图像窗口参数,设置图像数据获取方式等。为了方便调整图像的输出分辨率,函数使用size参数传递图像分辨率,在初始化摄像头时将按照size参数设置图像输出分辨率。在设备的初始化过程中,要判断每次设备访问是否成功,如果失败必须进行错误处理。用Video4Linux接口获取图像数据有两种方式,一种是用系统调用read,另一种是用内存映射输入输出。第一种方式使用较为简单,但不是所有的设备都支持这种获取图像数据的方式,大多数设备支持的是用内存映射方式获取图像数据。视频采集关键步骤介绍如下:1.打开视频USB摄像头在系统中对应的设备文件为/dev/video0,采用系统调用函数open()实现。intv4l_open(char*dev,v4l_device*vd)if(!dev)dev=”/dev/video0”;if(vd-fd=open(dev,O_RDWR)fd,VIDIOCGCAP,&(vd-capability)fd,VIDIOCGPICT,&(vd-picture)picture.colour=65535;if(ioctl(vd-fd,VIDIOCSPICT,&(vd-picture)0)perror(VIDIOCSPICT);return-1;5.初始化channelintv4l_get_channels(v4l_device*vd)inti;for(i=0;icapability.channels;i+)vd-channeli.channel=i;if(ioctl(vd-fd,VIDIOCGCHAN,&(vd-channeli)0)perror(v4l_get_channel:);return-1;return0;通过映射得到视频驱动的数据缓冲,用mmap(内存映射)方式截取视频。mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以象访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。其过程包括:1设置picture的属性。2初始化video_mbuf,以得到所映射的buffer的信息。if(ioct1(fd,VIDIOCGMBUF,&vm)0)printf(VIDIOCGMBUFfailn);mmap_camera=0;elseprintf(currentcamerabuffersize%d,totalframes%dn,vm.size,vm.frames);/*内存映射*/buf=(_u8*)mmap(0,vm.size,PROT_READ,MAP_SHARED,fd,0);if(int)buf=-1)printf(mmapcamerafail!n);mmap_camera=0;elseputs(mmapcameraok.n);3修改video_mmap和帧状态的当前设置,例如重新设置图像帧的垂直及水平分辨率、彩色显示格式等,可利用如下语句:mmap.frames=0;mmap.height=256;mmap.width=256;mmap.format=VIDEO_PALETTE_JPEG;/*图像的调色板格式,JPEG*/4将mmap与video_mbuf绑定。系统调用void*mmap(void*addr,size_tlen,intprot,intflags,intfd,off_toffset)进行绑定。其中:len:映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起,offset是一个缓冲区的大小。prot:指定共享内存的访问权限,PROT_READ(可读),PROT_WRITE(可写),PROT_EXEC(可执行)。flags:MAP_SHARED和MAP_PRIVATE中必选一个,MAP_FIXED不推荐使用。addr:共内存享的起始地址,一般设0,表示由系统分配。mmap()返回值是系统实际分配的起始地址。5mmap方式下捕捉流程就是调用VIDIOCMCAPTURE做视频截取。fd_setrfds;FD_ZERO(&rfds);while(1)if(ioct1(fd,VIDIOCMCAPTURE,STILL_IMAGE)0)printf(VIDIOCMCAPTUREfailn);break;FD_SET(0,&rfds);FD_SET(fd,&rfds);tv.tv_sec=3;tv.tv_usec=0;select(fd+1,&rfds,NULL,NULL,&tv);if(FD_ISSEF(fd,&rfdf)if(mmap_camera)i=read(fd,buf,0);if(ifd,VIDIOCSYNC,&frame)0)perror(v4l_sync:VIDIOCSYNC);return-1;若成功,表明一帧截取已完成。可以开始做下一次VIDIOCMCAPTURE,frame是当前截取的帧的序号。视频截取的第二种方法:直接读设备,调用read()函数。buf=malloc(image_width*image_height*2);if(!buf)printf(failtoallocatememoryforcamera!n);close(fd);munmap(fb_buf,screensize);close(fbfd);return-1;i=read(fd,buf,image_width*image_height*2);if(ifd);/*关闭视频设备*/return0;图像数据的连续采集和显示是通过定时器实现的。QTimer类提供了定时器信号和单触发定时器。设置定时启动触发周期,每当定时器时间到就触发一个定时器事件,在事件中调用getCameraImage()函数完成对图像的采集并将图像显示到LCD上。11.3.4 11.3.4 车载语音电话车载语音电话1、串口通信、串口通信在Linux下对串口设备的操作和操作文件是相同的,使用标准的系统调用来打开、关闭和读写。串口的设置主要是通过设置structtermios结构体的各成员值来实现的。其中常用的关键设置是控制模式和本地模式的设置。structtermiounsignedshortc_iflag;/*输入模式标志*/unsignedshortc_oflag;/*输出模式标志*/unsignedshortc_cflag;/*控制模式标志*/unsignedshortc_lflag;/*本地模式标志*/unsignedcharc_line;/*行控制*/unsignedcharc_ccNCC;/*控制特征*/串口的控制模式设置是最基本的设置,包括波特率、校验位、停止位各项设置。本设计中MC35i使用的控制模式为波特率115200bps、8位数据位,1位停止位,无奇偶校验。语音合成芯片使用的控制模式波特率为9600bps。本地模式的设置使用默认设置。对于本地模式的设置,Linux下串行设备有三种不同的传输方式,可以根据实际应用中数据的传输特点选择合适的传输方式。下面对串行设备的三种传输方式进行介绍。(1)标准输入模式这是终端设备的标准处理模式。这种方式中,read会传回一整行完整的输入。一行的结束,默认是以NL文件结束符,或是一个行结束字符。默认设置中,CR(DOS/Windows中的默认行结束符)并不是行结束标志,可以通过设置自动将CR转换为NL。(2)非标准输入模式非标准输入处理可以用于需要每次读取固定数量字符的情况下,并允许使用字符接收时间定时器。这种模式可以用在每次读取固定长度字符串的程序中,或者所连接的设备会突然送出大量字符的情况下。(3)异步输入模式在异步模式下,read的状态会立即返回并送出一个信号到所调用的函数直到完成工作。这个信号可以由信号处理函数handler()来接收。对于无线通信模块MC35i,串口接收的数据格式与数量是不固定的,在读取消息时串口可能会接收大量字符。根据这种情况,与MC35i通信的串口设置为非标准输入模式,由程序来判断串口是否接收数据完毕。与MC35i的通信的串口初始化程序如下:intopentty()if(modemfd=open(COM1,O_RDWR)0)/*打开串口设备,失败返回*/printf(“cannotopenthedevicen”);returnfalse;tcdrain(modemfd);/*等待数据传输完毕*/tcflush(modemfd,TCIOFLUSH);/*清空输入输出缓冲区*/if(tcgetattr(modemfd,&tty)0/*获取原始串口设置参数*/printf(“Thephoneisbusy!n”);close(modemfd);modemfd=-1;returnflase;memset(&initial_tty,0,sizeof(initial_tty);/*保存原始串口设置参数*/initial_tty=tty;tty.c_ccVMIN=0;/*设计read函数立即返回*/tty.c_ccVTIME=0;tty.c_oflag=0;/*设置输出模式为原始模式*/tty.c_lflag=0;/*设置串口为非标准输入模式*/tty.c_cflag=CS8|CREAD|CLOCAL;/*设置控制模式*/tty.c_iflag=IGNBRK|IGNPAR;/*设置输入模式*/cfsetoispeed(&tty,modemSpeed);/*设置波特率*/cfsetispeed(&tty,modemSpeed);tcdrain(modemfd);if(tcsetattr(modemfd,TCSANOW,&tty)0)printf(“Themodemisbusy!n”);close(modemfd);modemfd=-1;returnfalse;printf(“Modemready”);returntrue;2、MC35i控制程序模块设计控制程序模块设计 MC35i控制程序模块主要负责把上层应用的请求转化为MC35i可以识别的控制指令,并把Mc35i返回的数据进行解析和处理后提供给上层应用。所有对MC35i模块的操作都是通过AT指令完成的。AT指令集是计算机和调制解调器之间进行通信的标准语言,用来控制调制解调器进行拨号、应答等操作。用户从终端设备向终端适配器发送AT指令,进行呼叫、短信、电话本、数据业务、传真等方面的控制。起初的AT指令并不完善,后来主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM研制了一整套AT指令,其中包括了对SMS的控制。AT指令在此基础上演化并被加入GSM07.05标准以及现在的GSM07.07标准。除了“A/”和“+”,所有的AT指令都必须加“AT”前缀,每条指令以回车符结束。通常在发出命令后会收到如下格式的响应:其中代表换行符,是具体的返回数据。根据车载电话所要实现的功能,本模块主要包括以下几部分:电话簿操作、短消息操作、读取系统信息、拨打电话等基本操作。(1)电话簿操作对电话簿的操作包括读取电话簿、添加和删除联系人。读取电话簿命令如下:AT+CPBR=,location1和location2分别是读取SIM卡存储区间的起始地址和结束地址。目前的SIM卡通常可以存储250条电话记录,因此要读出所有电话簿,应设置读取区间为1,250。发出读取电话簿指令后,MC35i模块会返回SIM卡中的电话簿记录,格式如下:+CPBR:,+CPBR:+CPBR:,location2,OK其中location为存储位置,number为电话号码,type为电话号码格式,text是联系人。程序收到MC35i模块反馈的数据后,解析每一条记录并用一个结构体保存记录信息供上层应用使用。添加和删除联系人使用的是同一条指令:AT+CPBW=location,text该指令的参数与读电话簿时返回的数据格式类似,当参数完整时在location所在位置添加一条记录,当参数只含有location时,删除该位置的记录。(2)短信息操作MC35i模块支持两种模式的短消息,文本模式和PDU(ProtocalDataUnit)模式。文本模式对中文的支持不是很好,国内使用的手机基本都不使用这种模式。PDU模式可以使用各种字符集,可以很好的支持中文,并且所有的手机都支持这种模式,是手机的默认短消息模式。程序中对短消息的操作包括读取、发送和删除。通过串口发送指令AT+CMGL=4可以读取SIM卡中所有的消息。该指令的返回数据格式如下:+CMGL:,+CMGL:,OK其中index是消息索引号,stat是状态标志,alpha是字符串类型,length是信息长度,pdu是PDU码串。程序发送短消息时,首先通过串口向MC35i模块发送AT+CMGS=命令,其中length参数为发送消息PDU码长度,然后通过串口发送PDU码以ctrl-Z为结束。删除短消息的操作相对简单,通过串口发送命令AT+CMGD=即可删除存储位置index的短消息。(3)电话呼叫电话呼叫包括从电话本呼叫、直接输入电话号

    注意事项

    本文(嵌入式Linux编程入门与开发实例-第11章.ppt)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开