用VC6开发嵌入式LINUX程序

黄山松 (Tom Huang) 发表于博客园http://www.cnblogs.com/tomview/

    首先说明一下,VC6自然不能直接开发LINUX程序,主要使用的是它的编辑环境而已,但是作为一个一直在WINDOWS上使用VC6的开发者,不以VC6作为开发的核心是多么地不习惯啊。

    还要说明的是,自己对linux是门外汉,提到的linux的事情都是门外汉的看法,仅供参考。

    2015年突然有点雄心壮志,准备把自己的车牌识别系列软件移植到LINUX系统中,这样可以固化在摄像头里面,也可以做成嵌入式的硬件。经过简单的考察,选择了INTEL公司的EDISON平台。优点是(1)体积小,自带wifi模块;(2)速度快于同期的树莓派;(3)x86体系,原来算法里面的特殊指令优化(如MMX指令)可以继续有效;(4)有官方论坛和技术支持;缺点也是很明显,价格高,Edison模块+Braekout底板的价格至少是树莓派的2倍。但由于是在LINUX下开发,所以更换平台应该比较容易。

爱迪生模块和Breakout底板

    下面的链接是Intel的Edison主页:

http://www.intel.com/content/www/us/en/do-it-yourself/edison.html

     对于一直在WIN下一直用VC6集成环境开发的人来说,搞清楚linux编程的make就是一个挑战,找对整个工具链并能够正确配置也有难度,特别对于没有积累,没有老师,完全靠网络资源的情况下。

    刚开始使用爱迪生开发的标准工具链,使用Eclipse,配合爱迪生的交叉编译器,实现爱迪生的开发。但发现很多不习惯的地方,一个是Eclipse运行慢,绝不像Vc6那样行云流水;另外一个是Eclipse必须使用intel的插件,但是收费的(因为Intel编译器有一个 --sysroot 选项,标准的Eclipse里面好像无法处理;不过现在好像有个Eclipse的Intel专版)。

    后来决定用VC6的集成环境来编写程序,具体采用了如下的措施:

(1)每个程序建立一个VC的工程,管理并编辑修改源文件和头文件;

VC6的linux工程

(2)程序要在win32先编译成功,并能正确运行。在这一步之后再用交叉编译器编译为linux下的程序。为了实现这一点,要(1)尽量用纯C的库函数,保证大部分代码在两个平台通用;(2)尽量减少平台相关的代码;(3)确实需要的平台相关的代码,封装一下,通过条件编译调用不同的代码;(4)所有通讯尽量都用网络通讯,封装统一的SOCKET通讯模块;

    由于是嵌入式程序,因此上面对于代码实现的这些要求容易实现。

(3)自己做了一个调用intel交叉编译器的工具,自动读取vc6工程的文件列表,进行编译连接;并把编译信息和错误显示在VC6的输出窗口里面。下图是我的编译工具的参数设置界面。

交叉编译工具

    我的编译工具把Intel交叉编译器的编译消息也输出到VC6的编译输出窗口里面,如下图:

image

      工具程序自动修改intel编译器的输出消息里面的源文件名和行号的格式,可以实现在VC6编译信息输出窗口里面双击编译错误消息自动跳到对应的源代码。

image

(4)在编译完成之后自动通过网络发布到爱迪生板子上

image

(5)下面就是最重要的部分了,在线调试程序

    实现在线调试还是很复杂的,没有打算自己实现,目前在win下先实现功能,并进行测试,然后再到linux下运行验证;此外程序尽量多输出调试信息。如果非要在线单步调试,那要按照标准的linux远程调试方法来操作了。

    顺便提一下,这个项目已经取消了,因为突然就厌倦了编程……

posted @ 2016-05-18 19:21  shansong.huang  阅读(1869)  评论(0编辑  收藏  举报