导读
在软件开发过程中,调试是必不可少的环节,嵌入式操作系统的调试与桌面操作系统的调试相比有很大差异,嵌入式零碎的可视化调试能力比桌面操作系统要弱一点。对于导航这种业务场景比较复杂的程序开发,可视化调试环境能让咱们业务场景开发事倍功半,也能疾速定位导航业务与车机中其余模块交互呈现的问题,进步开发过程中的调试效率。
近程调试是真机调试中最便捷的一种,开发者只需借用在PC端弱小的调试器就能实现业务场景的调试。
背景
Thrift是一种接口描述语言和二进制通信协定,它被用来定义和创立跨语言的服务,是一种RPC(近程过程调用)通信框架,由Facebook为“大规模跨语言服务开发”。在车机系统中,各模块之间也能够应用Thrift通信框架进行通信。导航作为一个独自的为过程提供服务的模块,只提供导航相干的业务以及地图渲染的能力,导航的HMI界面是车机系统中对立的操作界面,零碎HMI界面与导航之间的交互接口则是通过曾经定义好的接口描述语言(IDL),应用自动化工具生成本地可调用的接口,而后应用Thrift框架传输实现零碎HMI与导航之间的通信。
调试伎俩
为了开发过程中调试不便,咱们在PC上做了一套模拟器,能在PC上进行地图渲染。还实现了一套在PC上应用的零碎HMI模仿命令发送工具,模仿工具是作为客户端连贯导航提供的服务,这样能在PC端模仿发送命令,帮忙导航简略业务的开发,但这种形式存在着以下弊病:
- 模仿命令工具,只能模仿简略的业务场景,有多个交互的场景无奈模仿。
- 无奈操作地图HMI,也看不到HMI界面显示以及过程中的反馈。
- 无奈滚动地图,前面接了Win32下面的鼠标事件,能用鼠标实现滚动,但这种形式与车机中滚动流程不统一。
- PC端无奈应用车机中的设施,如导航过程中没有导航音,无奈应用USB等。
- PC端拿不到车机中的数据,比方车身数据、GPS信号等。
调试计划优化
针对以后调试伎俩存在的以上问题。咱们对调试计划进行了优化,咱们能够借助车机中零碎HMI来与导航进行交互。实现了应用车机环境中的信号对PC端导航业务场景进行调试。次要有以下几点性能:
1.PC端模拟器接管车机发来的信号
在该我的项目中,导航的相干业务都是作为服务端向车机中其余模块提供服务,在车机系统中,零碎HMI连贯导航服务的地址是固定的,咱们在车机中开发了一个代理--Sandwich,次要作用是启动导航服务,这个导航服务并不实现真正的导航业务,而是启动了一个空服务,让车机中其余模块能胜利建设连贯,同时Sandwich作为客户端连贯PC端模拟器提供的导航服务,PC端的导航服务真正实现导航业务,Sandwich负责接管车机发送过去的业务申请,并将申请转发给PC端模拟器,这样PC端模拟器就能接管到车机中的信号,收到的业务申请并做解决再将处理结果通过Thrift反馈到车机端。
这个流程咱们买通了车机中信号发送到PC端模拟器,并能够将解决完的数据反馈给车机端。
2.PC端模拟器向车机发送信号
导航也须要连贯车机中其余模块提供的服务,如,获取车身数据、获取GPS定位信号,将导航语音数据发送到车机语音播放模块等。
PC端模拟器须要作为客户端来连贯车机中的服务,真正连贯的是车机中Sandwich提供的服务,Sandwich作为客户端连贯车机中其余模块的服务,比方Sandwich连贯Sound模块,GPS模块,CarData模块等。PC端模拟器须要应用车机设备播放导航音,须要将播放内容发送给Sandwich,Sandwich收到播放内容后,再发送给车机中的Sound模块,导航音就能播放了。PC端连贯车机中其余模块的工作原理也是一样。
3. 将PC端模拟器中显示的地图投射到车机端显示
实现了以上两步,一个应用车机信号调试PC端导航程序的环境根本实现了。曾经能实现车机信号与PC进行双向接管,然而此时导航的渲染能力还是停留在PC端,车机中还只是显示了一个零碎HMI界面,无奈看到导航地图展示的成果,这样就会带来一个问题,一些须要强依赖地图的操作可能就无奈精准操作,比方点击地图上某个POI等。此时须要将PC端的展示同步到车机侧。
要实现这一目标,个别咱们有两种办法:
- 车机与PC同步渲染
车机中的导航失常运行,当导航接管到零碎模块业务申请时,先是车机导航进行解决,处理完毕后将信号转发到PC端解决,这种计划两端导航业务逻辑并行运行,简单的业务场景下,两端会同时跟车机进行交互,此时可能会产生互斥,会有两端逻辑不同步的场景,达不到预期成果。
- 将车机中渲染的数据投射到车机端
在这里咱们能够将PC上程序每渲染一帧地图则将后果传到车机端,由车机端Sandwich负责接管,当Sandwich接管到一帧地图像素数据后,负责将此帧数据渲染到车机屏幕上,此时车机中出现的成果跟PC端统一。在该我的项目中咱们采纳了这一计划,这种计划中,真正的导航业务逻辑是来自PC端,车机中只是一个转发过程,所以不会存在第一种计划中的问题。
但在某些特定的环境下,导航描绘会很频繁,发送给车机的数据也会很多,频繁的数据发送可能会带来肯定的性能开销,体现上可能会呈现提早。这里能够应用升高图像品质来缩小图像数据,例如,能够应用16位或者8位BMP来传输,还能够压缩传输,这样1920*720分辨率图像传输大小能管制在30-50k左右。
小结
基于车机系统中Thrift通信框架,实现的这套近程调试计划,本质是在车机中应用Sandwich程序接管车机系统中与导航有交互的全副接口解决,通过RPC通信转发,实现了应用实在车机信号调试导航的目标。有了这套调试环境,咱们甚至能够间接在真车上边路测边调试,跟以前的路测拿Log回来剖析、重现相比,整个调试过程,简略,便捷,直观。大大提高了开发效率。
基于RPC通信的个性,咱们还能够对调试计划再进一步优化,能够退出多客户端调试性能,应用同一台车机环境,不同的模块负责人能够同时进行简单业务场景的联结调试。