12回答

3收藏

lua 成功运行在STM32F103ZE上(LCD弹出式多级菜单+Lua贪吃蛇)

 

STMCU STMCU 16210 人阅读 | 12 人回复 | 2015-12-08

本帖最后由 勇往直前2 于 2015-12-19 14:07 编辑

   前些日子在论坛看到一篇很好的帖子“[原创] 打算做块STM32F4的板,用来跑LUA,做你想做的事 ”,
当我看到这几句话时就很感兴趣了。
“因为有了LUA,您可以动态加载您的应用程序,可以像WINDOWS那样在桌面生成您应用程序的图标,点击图标就可以执行您的程序。
还可以用LUA解释XML,这样你就可以在PC机上布局你的界面,生成XML,让LUA去帮您完成剩下的工作。让界面设计变得如此简单。”
    于是我上周六决定自己也玩玩,下载了进度帖中的工程文件开始自己改程序。本人没学过Lua,在调试的时候完全摸不着头脑,后来捣鼓了一天才实现了dio.mode(dio.OUTPUT,0);的IO操作。这两天总结了一些经验,想分享给没接触过Lua的小伙伴们。用的工程是原子哥的 FATFS实验(库函数版)
1.需要修改堆栈设置:startup_stm32f10x_hd.s Stack_Size      EQU     0x00001000   4kb
Heap_Size       EQU     0x00002c00   11kb
2.屏蔽串口中的Printf ---把 39行的"if 1"改成 if 0
//LED0翻转 -需注册到Lua
static int SetLED0(lua_State *L)
{
  LED0=!LED0;

  delay_ms(300);
}

char Testbuf[100] = {"while 1 do LED0(L); end"}; //需要定义一个BUF来填写lua语法的程序
lua_State *L ;   
L   = lua_open();
luaopen_base(L);

lua_register(L, "LED0", SetLED0);//"Lua程序中可调用的名字",需注册的函数
luaL_dostring(L,
Testbuf);//调用脚本 类似于运行了buf中的字符串
while(1);
以上是一个简单写法。
如果想运行SD卡的程序,就只需更改Testbuf中的字符串即可。
怎么做到呢,这点在我说的那个帖子中已经解决了,需要申明和注册以下这个函数
static int do_file_script(char *filename)//读取SD中的指定文件名
但是这个函数在我的工程中需小改一下,把操作LUA的语句都屏蔽掉,换成我以上的程序,再把BUF改成全局变量即可。
你可以先把buf中的内容打印出来,如果打印出来的内容与.Lua中的内容一致说明读取SD卡成功,既然得到了Buf,那么按照我以上提供的语句即可实现运行SD中的Lua文件了。
至于 dio.mode(dio.OUTPUT,0); 这些操作,我把dio中所有的语句都重新lua_register了一遍,然后写入Lua文件,就实现了IO操作了。
  那篇帖子是2012年写的,那时我在读书呢。过了这么久我还能看到这么好的分享帖子,这应该就是论坛的力量吧。马上就2016年了,时间过得真快啊。




这两天又开始玩lua 了,现在共享出一些我写的代码,贪吃蛇是用的别人的代码改过来的,这个POPMENU是根据傻孩子菜单改进的,上图上代码:用STM32 运行SD卡中的两个文件 snake.lua  和 readme.lua
snake.rar (1.85 MB, 下载次数: 405)































分享到:
回复

使用道具 举报

回答|共 12 个

倒序浏览

沙发

#define

发表于 2015-12-8 12:31:10 | 只看该作者

膜拜               
板凳

BOSS王

发表于 2015-12-8 12:34:27 | 只看该作者

这个哪里有卖的
地板

勇往直前2

发表于 2015-12-8 12:39:37 | 只看该作者

BOSS王 发表于 2015-12-8 12:34
这个哪里有卖的

买个STM32开发板就好了 FLASH RAM尽量大点
5#

杉树林-罗

发表于 2015-12-8 14:09:28 | 只看该作者

能上图片就更好了
6#

qswhb

发表于 2015-12-8 23:03:40 | 只看该作者

学习学习...........................
7#

奋斗哥

发表于 2015-12-10 09:01:30 | 只看该作者


学习学习...........................
8#

c_cai_niao

发表于 2016-1-14 11:57:18 | 只看该作者

楼主我想问个问题,为什么我一加上L = lua_open();这句话,程序就允许不起来,好纠结!但是用你的程序可以允许!
9#

lab-425025

发表于 2016-1-17 21:55:13 | 只看该作者

  谢谢分享,正想学习,不知道能不能直接用串口将lua文件下载到单片机内,,,,就像事先在板内装好bootloader,用串口传输bin文件进去一样,这样就省了SD卡这个步骤
10#

liunian__92

发表于 2016-4-2 15:32:23 | 只看该作者

最近看到 micropython,,想玩一下lua,,lua 在速度上 比python有优势,尤其是 mcu,,也想鼓捣库文件,类似于 arduino 和micropython,不知道可行不?
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条