转眼在坛子里逛了大半年了,接触Lego的目的很简单也很单纯,儿子喜欢。为了让儿子觉得他老爸还是很棒的,所以就开始了Lego之旅。其实坛子里抱有我这样目的的人还有很多。从论坛里得到过很多热心人的帮助,也跟很多人讨论过技术,这个过程让人很愉悦。刚接触时,对EV3G很不习惯,幸亏了论坛老大们翻译的编程艺术艺术,让我在儿子的面前树立了高大的形象,辅导他写出了贪食蛇。但作为一个专业的程序员(现在程序写的越来越少了),还是想更深层次的了解EV3。好在EV3的系统是开源的,研究过一阵之后,因为工作时间的原因一度放弃,到现在还欠下ntwuhui老兄的一篇如何编译自己的固件的文章,不是不想写,而是太耗时间,因为工作原因目前很难成行。并且自己愿意尝试,但想事后再整理出来确实很难,借此向ntwuhui说声抱歉,也谢谢您曾经的帮助。
在论坛里,很多人对用C或者C++来写EV3程序很感兴趣,但是苦于没有好的工具来实现。BricxCC停止开发了,RobotC需要购买(因为工作关系,我很少使用盗版软件)。EV3使用的是linux系统,所以只要是C写的程序理论上都可以运行,但问题是EV3的程序运行在自己的虚拟机上,目前我们看到的Smallbasic扩展,EV3G都是将自己的程序翻译成Bytecodes,然后编译运行的。现在的问题转变为如何写一个Lego-VM程序,通过该程序来运行我们的C程序。通过查阅资料发现,Lego-VM可以通过SYSTEM函数来调用外部程序。
所以我们可以写如下的代码,来生成一个rbf程序,通过该程序来调用c生成的elf程序:
vmthread MAIN
{
DATA32 Timer
DATA32 Status
SYSTEM("/home/root/lms2012/prjs/BrkProg_SAVE/Test.elf",Status)
TIMER_WAIT(10000,Timer)
TIMER_READY(Timer)
}
为自己找到的方法兴奋不已,编译通过,可以执行(因为编译过自己的固件,所以把这段代码直接放到编译固件的makefile里,很快得到我想要的结果。),但是有没有更加简单的方法呢?通过在网上查找,发现了原来老外已经实现了一个工具,原来我苦苦探索的方法,人家已经有实现了。啰嗦了半天,下面才进入正式的主题。
C4ev3-基于Eclipse的免费C/C++程序开发包,可从如下地址下载(http://c4ev3.github.io/)。在该页面有两个下载包,一个是带GCC的windows安装包,一个是不带GCC的,个人建议下载带GCC的,省得你再去下载CodeSourcery Lite。
|