77范文网 - 专业文章范例文档资料分享平台

车载卫星定位导航系统设计 - 图文(10)

来源:网络收集 时间:2020-02-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

浙江工业大学本科毕业设计论文

hardware/libhardware_legacy/include/hardware_legacy/gps.h

通过查看文件,发现源码包里面 hardware/libhardware_legacy 目录里面没 GPS 文件夹。所以需要在 hardware/libhardware/modules/ 下创建一个 GPS 文件夹, 在 hardware/libhardware_legacy/ 这下面也同样,同时修改 Android.mk 就可以了。

修改 hardware/libhardware/ 下的 Android.mk 文件

include $(addsuffix /Android.mk, $(addprefix $(LOCAL_PATH)/, \\ modules/gralloc \\ modules/gps \\ tests \\ ))

把GPS文件夹包含的编译文件里面。由于 android 模拟器有模拟 GPS 的源码。把gps_qemu.c 文件 COPY 到 刚刚创建的 GPS 文件夹内。同时创建一个Android.mk文件。 Android.mk 文件如下: LOCAL_PATH := $(call my-dir)

# HAL module implemenation, not prelinked and stored in

# hw/..so include $(CLEAR_VARS)

LOCAL_PRELINK_MODULE := false LOCAL_MODULE_TAGS := eng

LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware LOCAL_SRC_FILES := \\ gps_qemu.c

LOCAL_MODULE := gps.default

#LOCAL_CFLAGS:= -DLOG_TAG=\\\ifeq ($(BOARD_NO_PAGE_FLIPPING),true) LOCAL_CFLAGS += -DNO_PAGE_FLIPPING

39

浙江工业大学本科毕业设计论文

endif

include $(BUILD_SHARED_LIBRARY)

下一步就是 gps_qemu.c 的修改,首先是gps_state_init 打开串口设备: state->fd = open(gps_Serial_Name, O_RDONLY );这里打开串口,gps_Serial_Name 这根据已有设备查找对应串口的设备节点,这里的设备节点是‖/dev/s3c2410_serial1‖。 设置串口事件:

// disable echo on serial lines if ( isatty( state->fd ) ) { struct termios ios; tcgetattr( state->fd, &ios );

ios.c_lflag = 0; /* disable ECHO, ICANON, etc... */

ios.c_oflag &= (~ONLCR); /* Stop \\n -> \\r\\n translation on output */

ios.c_iflag &= (~(ICRNL | INLCR)); /* Stop \\r -> \\n & \\n -> \\r translation on input */

ios.c_iflag |= (IGNCR | IXOFF); /* Ignore \\r & XON/XOFF on input */ cfsetispeed(&ios, B9600); cfsetospeed(&ios, B9600);

tcsetattr( state->fd, TCSANOW, &ios ); }

这一步非常重要,如果没有这一步,那么在 GPS HAL 线程里面不会接收串口数据。同时要在gps_qemu.c中增加设置串口所需要的头文件,否则会编译出错。这样 Android 的 HAL 层于串口就接通了。接下来就是解析串口数据,由于模拟器里面已经有解析 RMC 的GPS结构。所以直接测试就可以了。直接测试后发现当有 GPS 数据调用 CALLBACK 函数。 if (r->callback) {

r->callback( &r->fix ); r->fix.flags = 0;

40

浙江工业大学本科毕业设计论文

}

但是此时 android 重启了,查询网上资料后发现主要是创建线程的问题。 把创建线程的函数换一下就可以了。 /*

if ( pthread_create( &state->thread, NULL, gps_state_thread, state ) != 0 ) { LOGE(\ goto Fail; } */

state->thread = state->callbacks.create_thread_cb(\ gps_state_thread, state);

但是这样改完之后生成so文件导入开发板,发现一直重启。经过调试发现:在2.2时 static void gps_state_init( gpsState* state )函数中gps_qemu.c有 if ( pthread_create( &state->thread, NULL, gps_state_thread, state ) != 0 ) { LOGE(\ goto Fail; }

由于2.3系统不会轮询查看是否创建线程,因此会导致JNIEnv* env = AndroidRuntime::getJNIEnv();这句回去获取创建线程,不用回调函数把线程传上去,上层不知道有这个线程,JNIEnv* env == NULL ,所以这是把数据传上去时就出问题了,可能会遇到的现象是系统不断重启,所以要修改。 首先:

static int qemu_gps_init(gpsCallbacks* callbacks) {

gpsState* s = _gps_state; s->callbacks = *callbacks; if (!s->init)

gps_state_init(s); return 0;

41

浙江工业大学本科毕业设计论文

}

把那 s->callbacks = *callbacks;放到gps_state_init(s);前面去,要先给接口在用回调函数上传线程。将改完的gps_qume.c用Android.mk编译生成gps.default.so,放入开发板的/system/lib/hw下,重启开发板之后就可以了。

6.3 串口及GPS应用程序运行结果

6.3.1 android上的串口测试程序

测试使用的api是android-serialport-api,可以android的官网下载源码,在

6410开发板提供的android源码中编译后放入开发板既能运行。

下面是在串口1中接上GPS模块之后收到的数据信息图:

图6-3 串口设置

42

浙江工业大学本科毕业设计论文

图6-4 串口收到的数据

从上图可以看出,GPS模块运行正常,串口正常。

6.3.2 自编简单GPS应用程序演示

程序代码见附录。

这是一个简单的自编android测试程序,经过多次调试后终于能在开发板上跑了,虽然不是很完善,但还是能作为简单演示。 在6410开发板android系统上运行结果:

图6-5 GPS经纬度接受测试

43

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库车载卫星定位导航系统设计 - 图文(10)在线全文阅读。

车载卫星定位导航系统设计 - 图文(10).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/772921.html(转载请注明文章来源)
上一篇:网络题库
下一篇:客房部安全试题
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: