TA的每日心情 | 开心 2015-12-8 11:46 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
本帖最后由 勇往直前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, 下载次数: 404)
|
|