导读
在软件开发过程中,调试是必不可少的环节,嵌入式操作系统的调试与桌面操作系统的调试相比有很大差异,嵌入式零碎的可视化调试能力比桌面操作系统要弱一点。对于导航这种业务场景比较复杂的程序开发,可视化调试环境能让咱们业务场景开发事倍功半,也能疾速定位导航业务与车机中其余模块交互呈现的问题,进步开发过程中的调试效率。
近程调试是真机调试中最便捷的一种,开发者只需借用在 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 通信的个性,咱们还能够对调试计划再进一步优化,能够退出多客户端调试性能,应用同一台车机环境,不同的模块负责人能够同时进行简单业务场景的联结调试。