车载信息系统的软件设计
发布时间:2008/12/31 0:00:00 访问次数:498
本文介绍车载信息系统的软件设计,主要包括两个方面的内容:一是基于linux的驱动程序设计;二是应用软件程序设计。
1 相关驱动说明
车载信息系统的操作系统linux内核通过设备驱动程序与外围设备进行交互,设备驱动程序是一组数据结构和函数,它们通 过定义的接口控制一个或多个设备。对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供一致的接 口,通常是把设备映射为一个特殊的设备文件。
(1)lcd驱动程序设计
帧缓冲是linux为显示设备提供的一个接口,是把显存抽象后的一种设备。帧缓冲设备属于字符设备,采用“文件层-驱动 层”的接口方式。在文件层次上,linux为其定义了file-perations结构:
帧缓冲驱动设计步骤如下:
①编写初始化函数:初始化函数首先初始化lcd控制器,设置显示模式和显示颜色数,然后分配lcd显示缓冲区。在linux下 可通过kmallo函数分配一片连续的空间。本系统采用的lcd显示方式为640*480,16位彩色。需要分配的显示缓冲区大小为 640*480*2个字节,缓冲区通常分配在片外sdram中,起始地址保存在lcd控制器寄存器中。最后初始化一个fb_info结构, 填充其中的成员变量,并调用函数register_framebuffer()将fb_info登记入内核。
②编写结构fb_info中函数指针fb_ops对应的成员函数:对于嵌入式系统,只需要以下3个函数:
驱动程序编写完成后,可将其编译为动态加载模块,或者静态地编译入内核中。
(2)can总线驱动程序设计
can驱动的功能是处理所有总线上的报文发送和接收。报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中 ,通过读取相应的寄存器可以检查通信状态和错误。任何can总线上检测到的报文都会进行错误检测,然后与用户定义的滤 波器进行匹配,以确定是否将其转移到接收缓冲器中。
can总线驱动程序完成的报文发送、接收等任务都是围绕can总线控制器展开的,因此驱动程序主要是对控制器内部寄存器 进行操作。在linux多任务操作系统中,can总线通信程序的设计可分为发送数据、接收数据和中断处理3个模块来实现。can 驱动程序软件结构图如图1所示。
图1 can驱动程序软件结构图
2 模块程序设计
(1)gps模块设计思路
gps模块主要完成车辆位置信息的采集、处理与存储,因此本节的软件设计也就基于这几个方面进行。该模块软件设计的基 本思想为:首先接收完整的nmea0183语旬,然后提取相关的数据,如时间、经纬度、速度等,再将这些数据显示或者发送出 去,并且保存方便以后查询。
模块的软件由主程序、数据接收和处理子程序、按键中断服务子程序构成,主程序流程图如图2所示,数据接收和处理子程 序完成数据的接收和截取有用数据。
(2)gps数据格式
gps25-lvc输出的数据是以美国国家海洋电子协会nmea0183 ascii码接口协议为基础的,该标准的全部定义在《nmea0183 version3.0》中有说明。本车载信息系统中选用gps25-lvc串口1输出的nmea0183语句。nmea0183输出语旬多达十余种,任 意一种定位语旬都包含一定的定位数据,由于以“$gprmc”开头的语句包含了本系统所需要的所有定位信息,所以需要研 究该类型。该类型定位数据的各个符号位的定义如下所示:
$gprmc,<1>,2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,*hh,<cr><lf>,
上面各部分的具体含义如下:
·$gprmc:定位语句起始标志;
·<1>:协调世界时utc(hhmmss);
·<2>:gps定位状态指示,a为有效定位,v为无效定位;
·<3>: 纬度 (ddmm.mmmm);
·<4>:纬度标志,n为北纬,s为南纬;
·<5>: 经度 (dddmm.mmmm);
·<6>:经度标志,e为东经,w为西经;
·<7>:相对于地面的速度(000.0~999.9),单位为海里;
·<8>:轨道相对于地面的夹角(000.o°~359.9°);
·<9>: utc h 48(ddmmyy);
·<10>:磁偏方向,e为东偏,w为西偏;
·*hh:总校验和标志; 图2 gps模块主程序流程图
·<cr><lf>:语旬中止符。
每一条完整的信息都通过串口接口,程序设计中,对串口1的操作包括:
·串口
本文介绍车载信息系统的软件设计,主要包括两个方面的内容:一是基于linux的驱动程序设计;二是应用软件程序设计。
1 相关驱动说明
车载信息系统的操作系统linux内核通过设备驱动程序与外围设备进行交互,设备驱动程序是一组数据结构和函数,它们通 过定义的接口控制一个或多个设备。对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供一致的接 口,通常是把设备映射为一个特殊的设备文件。
(1)lcd驱动程序设计
帧缓冲是linux为显示设备提供的一个接口,是把显存抽象后的一种设备。帧缓冲设备属于字符设备,采用“文件层-驱动 层”的接口方式。在文件层次上,linux为其定义了file-perations结构:
帧缓冲驱动设计步骤如下:
①编写初始化函数:初始化函数首先初始化lcd控制器,设置显示模式和显示颜色数,然后分配lcd显示缓冲区。在linux下 可通过kmallo函数分配一片连续的空间。本系统采用的lcd显示方式为640*480,16位彩色。需要分配的显示缓冲区大小为 640*480*2个字节,缓冲区通常分配在片外sdram中,起始地址保存在lcd控制器寄存器中。最后初始化一个fb_info结构, 填充其中的成员变量,并调用函数register_framebuffer()将fb_info登记入内核。
②编写结构fb_info中函数指针fb_ops对应的成员函数:对于嵌入式系统,只需要以下3个函数:
驱动程序编写完成后,可将其编译为动态加载模块,或者静态地编译入内核中。
(2)can总线驱动程序设计
can驱动的功能是处理所有总线上的报文发送和接收。报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中 ,通过读取相应的寄存器可以检查通信状态和错误。任何can总线上检测到的报文都会进行错误检测,然后与用户定义的滤 波器进行匹配,以确定是否将其转移到接收缓冲器中。
can总线驱动程序完成的报文发送、接收等任务都是围绕can总线控制器展开的,因此驱动程序主要是对控制器内部寄存器 进行操作。在linux多任务操作系统中,can总线通信程序的设计可分为发送数据、接收数据和中断处理3个模块来实现。can 驱动程序软件结构图如图1所示。
图1 can驱动程序软件结构图
2 模块程序设计
(1)gps模块设计思路
gps模块主要完成车辆位置信息的采集、处理与存储,因此本节的软件设计也就基于这几个方面进行。该模块软件设计的基 本思想为:首先接收完整的nmea0183语旬,然后提取相关的数据,如时间、经纬度、速度等,再将这些数据显示或者发送出 去,并且保存方便以后查询。
模块的软件由主程序、数据接收和处理子程序、按键中断服务子程序构成,主程序流程图如图2所示,数据接收和处理子程 序完成数据的接收和截取有用数据。
(2)gps数据格式
gps25-lvc输出的数据是以美国国家海洋电子协会nmea0183 ascii码接口协议为基础的,该标准的全部定义在《nmea0183 version3.0》中有说明。本车载信息系统中选用gps25-lvc串口1输出的nmea0183语句。nmea0183输出语旬多达十余种,任 意一种定位语旬都包含一定的定位数据,由于以“$gprmc”开头的语句包含了本系统所需要的所有定位信息,所以需要研 究该类型。该类型定位数据的各个符号位的定义如下所示:
$gprmc,<1>,2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,*hh,<cr><lf>,
上面各部分的具体含义如下:
·$gprmc:定位语句起始标志;
·<1>:协调世界时utc(hhmmss);
·<2>:gps定位状态指示,a为有效定位,v为无效定位;
·<3>: 纬度 (ddmm.mmmm);
·<4>:纬度标志,n为北纬,s为南纬;
·<5>: 经度 (dddmm.mmmm);
·<6>:经度标志,e为东经,w为西经;
·<7>:相对于地面的速度(000.0~999.9),单位为海里;
·<8>:轨道相对于地面的夹角(000.o°~359.9°);
·<9>: utc h 48(ddmmyy);
·<10>:磁偏方向,e为东偏,w为西偏;
·*hh:总校验和标志; 图2 gps模块主程序流程图
·<cr><lf>:语旬中止符。
每一条完整的信息都通过串口接口,程序设计中,对串口1的操作包括:
·串口
上一篇:串口调试程序代码
上一篇:车载信息的硬件电路设计