![]() |
![]() |
![]() |
![]() ![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
ISPRO下载型编程器 |
ByteBlaster II Cable |
ISPRO下载型编程器 支持S51/AVR/PIC |
超级51开发板套件 前卫实用超值 |
||||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
51单片机升级STM32 火爆销售中 |
MPLAB-ICD2 火爆销售中 |
LED51开发板 玩具又名图文显示棒 |
面板模块/开发板 |
![]() |
![]() |
![]() |
![]() |
SMS短信模块 工业级/全自动 |
您当前位置:电子技术资料 -> STM32 -> STM32调试 -> |
![]() ![]() |
在stm32上移植Lua
类别:技术文章 来源:未知 作者:未知 关键字:Lua 加入日期:2013-6-2 在stm32上移植Lua不用做任何裁剪。 下载Lua源码,(我用的是5.1.4,很新的版本),把c文件添加到工程(lua.c,luac.c两个文件不用加),然后编译即可通过,无需修改一个字符。(选择lib为full), 接下来,就可以开始享受stm32上的Lua之旅! Lua全编译也只有48k字节左右,所以不裁剪都是可以的。本身的Ram需求则在26K字节左右,Stm32应该是可以承受的。 在main 里面,或者其他函数里面: L = lua_open(); luaopen_base(L); //buf里面就是lua脚本了 ,自己写好; luaL_dostring(L, buf); 就可以了。就这么简单! Lua可以和c无缝集成,c结合Lua后,则是如虎添翼。不要仅仅是把Lua当做是一门新的语言,这个世界优秀的语言已经很多了,不差Lua一个,虽然Lua语言也极其优秀。 Lua是一种新的开发方式,它带来的改变甚至是革_命性的!它可以让整个应用的逻辑以Lua脚本和原生语言的方式进行混合实现,而且比例任意切分。它可以让产品中相对不变的硬件代码和变化不定的用户业务逻辑充分结合起来。它可以让产品随时更新功能而无需重新编译!它甚至可以让用户和你一起来分工实现一个应用代码,同时又很好的保护了你的核心技术。 Java高调提倡的一次编写,到处运行的思想,在单片机里是行不通的, 而Lua则悄无声息的实现了,而且是那么易如反掌!而且是这么彻底,不受限于一次编写,还可以随时改写。 所以Lua才真正是做到了一次编写,到处运行,并可随意再次改写,所以她横跨了PC,服务器,苹果,安卓,PSP,以及单片机! 她横跨了windows,linux,ios,ucos,以及裸奔的单片机代码! 感谢Lua的开创者,感谢他们为这个世界创造了如此美妙的Lua ! ------------- 对,不用print,用自己的串口输出函数就可以。 至于Lua在哪方面提高单片机的威力。这个要看自己如何运用了。 最简单的用法: 实现配置参数,比如我们原来的产品要有些参数来控制产品运行方式,一般要实现一个参数配置协议,然后呢,还要提供一个参数配置软件等。用Lua脚本就直接搞定(para1=... ; para2=...., para3=.... ),c里面很容易就得到脚本里面的值(tonumber,tosring),而且一目了然,可以让用户直接修改脚本,就实现了参数修改了。是不是比ini,xml文件更简单,更方便?用户现场他想改就改。 更深入点的用法: 我们的产品,有个计算公式,是根据用户的应用变化的,并且鬼知道用户想用个什么公式来计算,那么很简单,把这个公式用lua脚本实现一个公式计算函数,就可以了,我们的c可以调用lua里面定义的函数,这个公式可以有多复杂?想想愤怒的小鸟里面那么精确的重力抛物线计算都可以实现,就知道了。并且可以得到函数返回值。用户现场他想改就改。 更深入点的用法: 我们的产品,有个控制过程,是根据用户的应用变化的,并且鬼知道用户想用个什么过程来控制,那么很简单,把这个公司用lua脚本实现一个过程函数,就可以了,我们的c可以调用lua里面定义的过程函数。实现用户希望的过程控制,用户现场他想改就改。 更深入的用法: 我们的用户很牛X,他想控制连整个运行方式,那么好,我们提供c api,提供后台任务,用户前台控制任务他自己用Lua去编写.用户现场他想改就改。 更深入的用法: 我们的一些用户更牛X,他想直接控制整个硬件,只是自己不实现硬件,那么好,我们提供c api,把单片机的AD, DA ,PWM,Timer,中断全部都注_册成lua函数,他想怎么玩就怎么玩。 参见:elua, www.eluaproject.net 更深入的用法: 除了这些,lua提供文件系统,提供web server,提供socket,提供线程.....,提供shell,提供操作系统的很多东东,但又不是操作系统。参见:elua, www.eluaproject.net ---------------- 实际上我开始移植也遇到了fprintf, stdin stdout等,本来以为要动刀改写,但是查了查资料,fprintf,stdin等都是ansi c标准,按道理编译器都应该支持,于是想了一下,可能是IAR库不全,结果果然是这个原因: 选择 Options->General Options->Library Configuration : Full 就可以了。 去掉lua.c ,luac.c ,这是shell,我们不需要。 保证一次编译通过,呵呵。 无需openlibs这句函数 KEIL中不选Use MicroLIB IAR里面General Options->Libray Configuration->Full ----------------- 当然你得想个办法把Lua脚本文件内容下载到stm32中去。 就是你的代码得支持通过串口下载Lua脚本到Flash或EEprom里面保存,以及通过串口可以读出。 LUA是编译成Bin了,但Lua脚本完全不用编译成bin啊。 现场修改当然得在你实现了串口下载Lua脚本之后了,呵呵。当然如果你的板子支持SD卡,用SD卡拷贝脚本就更简单了。 --------------------- 从官网上下载的啊。 http://www.lua.org/download.html ------------------------- http://www.eluaproject.net/ 这里有很不错的一个lua移植。连驱动都做好了。 ---------------------- lua确实不错,wavecom的q26系列就支持了 ---------------------- //#pragma import(__use_no_semihosting) 解决了,谢谢楼主和luozhongchao。 ----------------------- 在stm32上,对比了一下速度,纯粹的Lua脚本函数运算的速度,大致是编译的C函数的10分之一~~~30分之一之间。 您可能还会关注的相关技术资料: 暂无 |
中国电子网 |
www.EC66.com |
QQ:34740080 EMAIL:iloveaoe@163.com |
最佳浏览:1024*768 |
Copyright (C) 2001-2010 EC66.COM All Rights Reserved |
Aoe/帝国 制作维护 |
粤ICP备18061901号 |
![]() |