Lua 5.1.4 在DSP上的移植
2011年04月12日
Lua 是 1993年由Waldemar、Luiz和Robero开始开发的一门轻量级的嵌入式语言。相比于其它脚本语言,Lua小巧精致,没有庞大的功能库,有的只是几个最基本的标准库以及唯一的一个数据结构table,然而基于这些基本的特性,我们可以很方便的实现面向对象,函数式编程等特点。不记得是什么时候第一次听说Lua,但是刚开始有印象好像是在玩Angry Birds的时候发现这个游戏的场景文件的扩展名为.lua。曾经一直在猜测魔兽世界的插件是用什么写的,看见Angry Birds应用了Lua,并且听说Lua在游戏行业很受欢迎后,我猜测魔兽世界的插件应该也是用Lua写的,后来证实果然如此。我用了一段时间的Linux了,但是对Linux的命令,Shell脚本编程知之甚少,于是下定决心好好学习Linux,学习脚本编程。我起初瞄准了Perl,因为这门语言的强大的文字处理能力,可以很方便的用于Linux的系统管理。但是Perl很难像SHELL一样交互式的运行,因此我又改为学习Python。Python是一门很优美的语言,我之前也尝试学习过。当时是在windows平台,想学习一些网络编程的知识,不过由于我很懒,没学会什么。比较喜欢Python的matplotlib以及pynum等库,感觉这些库加起来姑且可以代替MATLAB完成一些绘图的任务。但是第一次是用Python的时候,对Python还没有任何的概念。当时是初次接触Linux,喜欢玩弄各种有意思的小程序,当时发现screenlets里的一个花盆的小插件里的花长得实在是太慢了,经过折腾我发现可以看这个插件的源码,当时真的还不知道Python,以为是JavaScript什么的,反正不管怎样,我发现能够看懂这些代码是什么意思,并且我成功的修改了几个参数使的花生长的很快了。这足见Python语言的强悍之处,不用会Python也能够读懂并且修改他的代码,这个"只写"语言Perl就不敢想象了。说了这么多还是没有扯到Lua上,只是交代一下我与脚本语言纠结的短暂的历史。话说在研究Syslinux,想自己做一个U盘mini Linux系统,(至于为什么选择Syslinux而不是Grub2是因为我发现OpenSUSE的GOME3 LiveCD的启动画面很漂亮,后来发现好像是用Syslinux与Gfxboot技术实现的),下载了Syslinux的源码发现里面有Lua模块,这时意识到Lua的小巧与精致。当然我可不会用Lua。之后感兴趣的简单学习了一下Lua,本以为这门语言这么小,应该能够很好学。。。
言归正传,话说Lua是一门嵌入式语言,具有优良的可移植性。与其它语言、项目的可移植性不同的是Lua不是通过条件编译来指定不同的平台的,Lua是基于ANSI C 层面的可移植。也就是说整个Lua都是是用ANSI C写的,所有提供ANSI C运行时环境的平台都可以编译Lua。(当然Lua中确实有些平台相关的东西,我还不会,暂且不提)。由于最近在实验室学习DSP,而TI公司为DSP提供了近乎整个的C运行时环境,所以好奇的我就这么把风马牛不相及的Lua编程语言与DSP联系起来了,(其实我还打算 Lua on AVR 来着)。
我的最基本目的就是把Lua放到DSP上跑起来,哪怕只是简单的交互一下(下一步打算真真正正的开发一些底层的库来供Lua调用,使用Lua胶水语言的特性来开发DSP程序,但是目前还没有开始)。在CCS中新建一个工程,写一个cmd文件,并且添加Lua源码目录src下的全部.c文件到工程中,编译。。。基本上所有的文件都能编译过去,但是还是有错误说找不到,好吧,其实我觉得这些应该没什么用。很奇怪的是TI的TMS320C6000 Optimizing Compiler v 6.1 User's Guide上说支持整个的C标准库,于是乎我下载了一个较心的cgtools,这回的确就好使了。之后没有出现过编译错误。只是最后在连接的时候说找不到_system,这就怪了,明明支持整个的C标准库,并且头文件中真的就有system的声明,怎么就没有了_system呢? 这时由于对Lua还只是Hello World的认识,我也不知道如何的修改Lua的源码。于是乎回图书馆借了本Lua的书,在电子工艺实习的时候偷摸看了看,发现OS等都是Lua的库,这个就应该可以选择性的取出,于是乎继续回到实验室,将loslib从工程中移除,并且修改了启动时加载模块的顺序,将loslib移除,于是乎一切编译成功,运行之。。。虽然是可以运行了,但是打印了一行出错信息说是Block too big 云云。。 借助CCS的调试功能以及source insight(好吧,到这我得声明虽然在寝室自己的电脑上是用Ubuntu,但是在实验室还是要用windows的),很快发现出错的原因是在DSP环境下,main函数的参数argc=0,argv=0x00000000,而Lua千算万算没有算到当移植到DSP上的时候会出现argc<0的BUG。。Lua的代码中为了确定参数的数量handle_script..getargs,特意使用了 int argc = 0; while (argv[argc]) argc++; 就这个。。无语,DSP中主函数的参数argv相当于指向NULL:0x00000000,并没有赋值,于是乎以上代码的结果变得不可预期,在我的实际情况中argc编程一个很大的数,因此出现了block too big的问题。。好吧,既然系统没有给我argc,以及argv那我就自己伪造一个吧, int margc=1; char *margv[]={"Lua",NULL}; ... s.argc = margc; s.argv = margv; ... 这回Lua真的可以运行了,得到上面的截图。因为CCS中的C lib的I/O函数都是映射到PC机端的,况且我的DSP开发板还没有键盘,姑且使用这个来验证Lua的极具为威力的可移植性吧。。。
之后我将继续研究如何真正的是用Lua来开发DSP程序。。
发表评论
-
库的学习(先前发过一次,后来不小心删了)
2012-01-20 09:44 726库的学习(先前发过一次,后来不小心删了) 2010年06月2 ... -
使用 cURL 和 libcurl 通过 Internet 进行对话
2012-01-20 09:44 638使用 cURL 和 libcurl 通过 Internet 进 ... -
Ogre 的相关工具和库
2012-01-20 09:44 702Ogre 的相关工具和库 2011年04月14日 学无止 ... -
LibSVM学习 all
2012-01-20 09:44 1565LibSVM学习 all 2010年07月2 ... -
从事无限极事业该怎样制定目标和计划(下集)
2012-01-19 14:48 1053从事无限极事业该怎样 ... -
执一不二 跬步千里-王子密码2011年11月份心得(十)
2012-01-19 14:48 823执一不二 跬步千里-王 ... -
haha
2012-01-19 14:48 641haha 2011年07月09日 您的位置:首页-> ... -
2011年不给自己留下任何遗憾
2012-01-19 14:48 5572011年不给自己留下任何遗憾 2011年12月17日 ... -
7位模式服务体系
2012-01-19 14:48 6187位模式服务体系 2011年 ... -
WinCE驱动开发问题精华集锦
2012-01-17 04:32 830WinCE驱动开发问题精华 ... -
C#面试题集锦(你值得拥有!)
2012-01-17 04:32 627C#面试题集锦(你值得拥有!) 2011年04月22日 ... -
Grub4dos命令索引
2012-01-17 04:32 647Grub4dos命令索引 2010年07月22日 Gru ... -
字节流与结构、类之间的转换
2012-01-17 04:32 629字节流与结构、类之间的转换 2011年04月26日 1. ... -
Linux System and Performance Monitoring(I/O篇)
2012-01-17 04:32 673Linux System and Performance Mo ... -
潮阳“陈”姓源流
2012-01-16 03:24 907潮阳“陈”姓源流 2010 ... -
东方犹太人
2012-01-16 03:24 605东方犹太人 2010年10月07日 潮商是中国传统的 ...
相关推荐
lua 5.1.4最新版中文手册 是中国lua程序员开发必备的手册
翻译] Lua v5.1.4手册网上很难找的
编译好的lua5.1.4版本 exe和dll形式
Lua 编译辅助工具 1.0 for lua 5.1.4 程序为各位lua开发、学习者,对lua代码编译为二进制码提供了一个便利的解决方案。 1.支持方便地添加单个文件以及多个件的编译。 2.使用表达式得到输出路径。 3.文件搜索。 ...
lua5.1.4类库和tolua++1.0.93类库及工具打包 使用CodeBlocks 8.02 gcc 3.4.5编译的 lua 5.1.4 tolua++ 1.0.93 文件列表 liblua.a,libtolua++.a,lua51.dll,lua.exe,luac.exe,tolua++.exe
Lib.rar 根据Lua 5.1.4 生成的库 平台基于Visual Studio 2008
Lua 5.1.4 reference manual,英文原版参考资料的chm版本,和官方网上的一致,欢迎享用
Lua 5.1.4 Release 1 绿色英文版 轻量级的动态脚本语言
lua 5.1.4 以及安装 要用的 vcredist-x86,附带一份 lfs luaXml的使用
离线安装包,亲测可用
中文版lua api手册 需要的可以下载,中文版lua api手册 需要的可以下载
Windows 版 Lua 5.1.4 版本可执行文件。 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
将Lua 5.1.4和LuaSDL移植到Android JNI 历史: 2015-08-15:在Android上成功运行,仅通过内存(jni的内容)测试加载脚本init .lua。 2015年8月8日:内置VC6和NDK,仅在VC6上运行。 参考: Lua 5.1.4 LuaSDL ...
在stm32f407开发板上移植lua脚本,实现一些基本功能
LuaForWindows_v5.1.4-46 lua-SciTE 安装包
Lua for Windows 5.1.4-45 Lua for Windows 5.1.4-45 Lua for Windows 5.1.4-45
网上那个所谓的中文版实在不敢恭维,既然翻译的不行,那还是直接看英文的吧。这个是直接官方手册转换出来的,没有改动一个字,带标签,清晰。
Binary Package lua-devel-5.1.4-4.1.el6.x86_64.rpm Source Package lua-5.1.4-4.1.el6.src.rpm Install HowtoInstall the lua-devel rpm package: ..
linux下编译通过的lua库_5.1.4,下面的lib和include中有你需要的库和头文件
lua-5.1.4 源码编译VS2012环境配置,在VS2012上可直接编译运行。