基于uClinux的GPSOne GPS双定位信息接收
发布时间:2008/5/27 0:00:00 访问次数:416
gps是当前在导航系统中应用最广泛的定位技术之一,但gps也有其自身的不足。例如,当gps终端在建筑密集的地方或在高架桥底下等恶劣的地理位置时,定位信号比较容易丢失,往往难以获取有效的定位信息。由美国高通公司开发的gpsone定位模块,提供的定位信号是基于网络与蜂窝的定位技术。即使在卫星信号不好的情况下,只要存在联通的网络信号,利用蜂窝定位技术,就可以较容易地获得定位信号。此信号可作为gps信号丢失情况下的一种补偿信号。
gpsone是传统gps定位技术与cdma网络技术巧妙结合的混合型定位技术,即gpsone=a-gps+aflt+cell-id。它是第一种可以在室内稳定工作的基于gps技术的解决方案,是唯一商用的gps定位解决方案,同时也是目前世界上最经济有效的集成型无线gps解决方案。利用gpsone能够弥补gps自身不足的这一特点,本导航系统的定位信息获取模块采用gps和gpsone双定位方案,以实现更精确、可靠的定位。该定位信息获取模块的硬件架构是arm+gps+gpsone;cpu采用philips公司lp系列的lpc2210的arm7芯片,操作系统采用uclinux,本系统获取定位信息的关键,在于编写好串口通信程序,从而更好地实时接收和处理当前的位置信息。由于系统功能较为复杂,需要实现gui界面交互、定位、报警、数据库查询、语音提示等多项功能,故对串口数据的接收,利用i/o复用机制进行处理更利于系统实现和管理。
1 uclinux串口编程操作方法
在linux中,设备分为3类:字符设备、块设备和网络设备。uclinux用设备文件表示大部分i/o设备。文件系统提供了统一的接口来访问一般意义上的文件和设备文件。
系统串口com1与com2,分别对应uclinux系统的/dev/ttys0、/dev/ttys1两个串口设备文件。串口属于字符型设备,对串口的编程也就是对相应文件进行读/写、控制等操作。串口编程的基本步骤是:先打开串口,设置串口属性,然后进行收发数据,最后关闭串口。 (1)打开串口
通过使用标准的文件打开函数open,达到访问串口设备驱动的目的。例如,以读写的方式打开串口1,可用下面的方法实现:
|
fd=open("/dev/ttys0",o_rdwr);
(2)设置串口属性
主要是设定结构体termios各成员的值。基本设置包括:波特率、数据位、校验位、停止位、输入和输出模式等。一般在设置时,先获取系统已有的串口属性,并在它的基础上进行修改。另外,设置时要用到系统预定义的宏。 (结合实例的说明略。--编者注)
(3)收发数据
uclinux下串口发送和接收数据,通过使用文件操作中的read和write的方法来实现。例如:
write(fd,buffer,length);
read(fd,buffer,length);
(4)关闭串口
关闭串口只须关闭已打开的串口文件描述符,如close(fd);
2常用的几种i/o模型
通常在操作i/o时,会用到下面几种模型之一:阻塞型i/o、非阻塞型i/o和复用型i/o。下面以读取串口数据为例,简要说明它们的基本工作原理和特点。
2.1 阻塞型i/o
顾名思义,它以阻塞方式操作i/o,如图1所示。若一个进程以阻塞方式调用read函数读取串口数据,则该进程会一直睡眠在read系统调用上。此时系统内核会一直等待数据,直到串口有数据到达为止。当串口数据准备好后,内核就把数据从内核拷贝至用户空间;而当数据拷贝完成后,才唤醒串口读取进程,通知它读取数据报。
2.2非阻塞i/o
图2中,在非阻塞i/o模型下,i/o操作是即时完成的。当进程调用read函数时,设置了o_nonblock标志,那么即使串口没有数据可读,read函数也会立即返回。此时其返回值为-eagain,表明串口数据未就绪。如果串口有数据可读,则read函数会读取该数据,并返回所读数据的长度。通常轮询i/o的方法就是采用这种模型来读取串口数据的,此时进程必须通过反复调用来检测是否有数据可读。如果轮询频率过低,则容易丢失数据;轮询频率过高,则占用太多处理器的处理周期。
2.3 i/o复用
上述两种i/o模型,是最常用的两种操作i/o的方式;但在面向较复杂、需要处理多个i/o的系统时,这两种模型存在着不足之处。例如:在应用进程中需要对多个i/o设备进行监听,当某个设备可读或可写时,进程能马上得知,并进行相关处理。这时若采用阻塞方式操作i/o,则进
gps是当前在导航系统中应用最广泛的定位技术之一,但gps也有其自身的不足。例如,当gps终端在建筑密集的地方或在高架桥底下等恶劣的地理位置时,定位信号比较容易丢失,往往难以获取有效的定位信息。由美国高通公司开发的gpsone定位模块,提供的定位信号是基于网络与蜂窝的定位技术。即使在卫星信号不好的情况下,只要存在联通的网络信号,利用蜂窝定位技术,就可以较容易地获得定位信号。此信号可作为gps信号丢失情况下的一种补偿信号。
gpsone是传统gps定位技术与cdma网络技术巧妙结合的混合型定位技术,即gpsone=a-gps+aflt+cell-id。它是第一种可以在室内稳定工作的基于gps技术的解决方案,是唯一商用的gps定位解决方案,同时也是目前世界上最经济有效的集成型无线gps解决方案。利用gpsone能够弥补gps自身不足的这一特点,本导航系统的定位信息获取模块采用gps和gpsone双定位方案,以实现更精确、可靠的定位。该定位信息获取模块的硬件架构是arm+gps+gpsone;cpu采用philips公司lp系列的lpc2210的arm7芯片,操作系统采用uclinux,本系统获取定位信息的关键,在于编写好串口通信程序,从而更好地实时接收和处理当前的位置信息。由于系统功能较为复杂,需要实现gui界面交互、定位、报警、数据库查询、语音提示等多项功能,故对串口数据的接收,利用i/o复用机制进行处理更利于系统实现和管理。
1 uclinux串口编程操作方法
在linux中,设备分为3类:字符设备、块设备和网络设备。uclinux用设备文件表示大部分i/o设备。文件系统提供了统一的接口来访问一般意义上的文件和设备文件。
系统串口com1与com2,分别对应uclinux系统的/dev/ttys0、/dev/ttys1两个串口设备文件。串口属于字符型设备,对串口的编程也就是对相应文件进行读/写、控制等操作。串口编程的基本步骤是:先打开串口,设置串口属性,然后进行收发数据,最后关闭串口。 (1)打开串口
通过使用标准的文件打开函数open,达到访问串口设备驱动的目的。例如,以读写的方式打开串口1,可用下面的方法实现:
|
fd=open("/dev/ttys0",o_rdwr);
(2)设置串口属性
主要是设定结构体termios各成员的值。基本设置包括:波特率、数据位、校验位、停止位、输入和输出模式等。一般在设置时,先获取系统已有的串口属性,并在它的基础上进行修改。另外,设置时要用到系统预定义的宏。 (结合实例的说明略。--编者注)
(3)收发数据
uclinux下串口发送和接收数据,通过使用文件操作中的read和write的方法来实现。例如:
write(fd,buffer,length);
read(fd,buffer,length);
(4)关闭串口
关闭串口只须关闭已打开的串口文件描述符,如close(fd);
2常用的几种i/o模型
通常在操作i/o时,会用到下面几种模型之一:阻塞型i/o、非阻塞型i/o和复用型i/o。下面以读取串口数据为例,简要说明它们的基本工作原理和特点。
2.1 阻塞型i/o
顾名思义,它以阻塞方式操作i/o,如图1所示。若一个进程以阻塞方式调用read函数读取串口数据,则该进程会一直睡眠在read系统调用上。此时系统内核会一直等待数据,直到串口有数据到达为止。当串口数据准备好后,内核就把数据从内核拷贝至用户空间;而当数据拷贝完成后,才唤醒串口读取进程,通知它读取数据报。
2.2非阻塞i/o
图2中,在非阻塞i/o模型下,i/o操作是即时完成的。当进程调用read函数时,设置了o_nonblock标志,那么即使串口没有数据可读,read函数也会立即返回。此时其返回值为-eagain,表明串口数据未就绪。如果串口有数据可读,则read函数会读取该数据,并返回所读数据的长度。通常轮询i/o的方法就是采用这种模型来读取串口数据的,此时进程必须通过反复调用来检测是否有数据可读。如果轮询频率过低,则容易丢失数据;轮询频率过高,则占用太多处理器的处理周期。
2.3 i/o复用
上述两种i/o模型,是最常用的两种操作i/o的方式;但在面向较复杂、需要处理多个i/o的系统时,这两种模型存在着不足之处。例如:在应用进程中需要对多个i/o设备进行监听,当某个设备可读或可写时,进程能马上得知,并进行相关处理。这时若采用阻塞方式操作i/o,则进
热门点击
推荐技术资料
| |