takent 发表于 2019-8-16 11:36:34

STM32-V6 LUA简单移植

以V6-LED例程为模板,LUA调用LED函数控制LED闪烁。
1.下载LUA源码,最新为5.3.5
2.不用lua.c,luac.c文件
3.修改Heap_Size       EQU   0x0002C00
4.添加函数time,exit,system
5.在LUA注册需要调用的函数
static const struct luaL_Reg mylib[]=
{
        {"led_on",lua_led_on},
        {"led_off",lua_led_off},
        {"delay",lua_delay},
        {NULL,NULL}
};


luaL_setfuncs(L, mylib, 0);
6.运行LUA脚本
const char LUA_SCRIPT_GLOBAL[] ="\
        off = 500   \
        on = 500       \
        while 1 do \
        led_on() \
        delay(on)    \
        led_off()      \
        delay(off)      \
        end";


luaL_dostring(L, LUA_SCRIPT_GLOBAL);

eric2013 发表于 2019-8-16 11:42:09

非常感谢分享{:8:}

byccc 发表于 2019-8-16 11:46:06

最近论坛不少好东西啊{:8:}

takent 发表于 2019-8-16 11:52:48

未完善部分
1.内存管理, lauxlib.c 文件里调用的 free 和 realloc 函数,可以减少堆栈
2.重定向输出

也许在明天 发表于 2019-8-16 22:07:22

请问楼主,这样编程有什么好处或者优势呢?

takent 发表于 2019-8-19 09:23:02

也许在明天 发表于 2019-8-16 22:07
请问楼主,这样编程有什么好处或者优势呢?

最简单的用法:

实现配置参数,比如我们原来的产品要有些参数来控制产品运行方式,一般要实现一个参数配置协议,然后呢,还要提供一个参数配置软件等。用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

xiaosir 发表于 2019-8-19 20:08:31

感谢分享!{:34:}

takent 发表于 2019-8-22 10:08:08

官方资料中文翻译,一个5.3参考手册,另一个5.3编程手册

cheng_5230 发表于 2019-8-27 08:36:06

谢谢分享,不错

会唱歌的墙 发表于 2019-10-15 19:36:49

你好,我将这个移植到stm407上, 裸机 debug 先可以运行.掉电重新上电就进入硬件错误?请问你遇到这种情况吗?

会唱歌的墙 发表于 2019-10-15 19:46:33

你好,我使用这个demo <STM32-v6 LUA>中的main函数逻辑移植到stm32f407 上 debug 模式可以运行,,掉电重新启动就会死机. (板子 不添加lua 是正常的)

takent 发表于 2019-10-16 09:18:52

会唱歌的墙 发表于 2019-10-15 19:46
你好,我使用这个demo 中的main函数逻辑移植到stm32f407 上 debug 模式可以运行,,掉电重新启动就会死机. (板 ...

加大你的Heap_Size

会唱歌的墙 发表于 2019-10-16 09:41:59

takent 发表于 2019-10-16 09:18
加大你的Heap_Size

已经加了很大了,debug 模式可以正常运行.掉电重启就挂了.
define symbol __ICFEDIT_size_cstack__ = 0x5000;
define symbol __ICFEDIT_size_heap__   = 0x6000;

会唱歌的墙 发表于 2019-10-16 10:03:48

会唱歌的墙 发表于 2019-10-16 09:41
已经加了很大了,debug 模式可以正常运行.掉电重启就挂了.
define symbol __ICFEDIT_size_cstack__ = 0x5 ...

下面是代码

会唱歌的墙 发表于 2019-10-16 11:07:20

会唱歌的墙 发表于 2019-10-16 10:03
下面是代码

这个就是代码,

雷鹏 发表于 2020-3-17 15:19:25

感谢老铁分享代码,我做了一个 代码转换C语言数组(HTML LUA ) 的小工具,很方便的将 lua 代码转换成 C语言数组,欢迎下载试用提出修改建议。


http://www.armbbs.cn/forum.php?mod=viewthread&tid=96898&fromuid=18397
(出处: 硬汉嵌入式论坛)

aron 发表于 2020-3-19 21:21:40

前来学习。

zhousun 发表于 2020-3-20 10:43:37

我想问下楼主,看你讲的用处1,请问如果用lua更改配置参数和用串口直接发配置参数有什么不同吗?;用处2,3好像lua更合适

573063615 发表于 2020-3-23 17:29:13

请问下,移植过去了,程序在跑,怎么交互呢?比方要设置几个参数,写好的lua脚本怎么上传到单片机?

eric2013 发表于 2020-3-23 19:22:19

573063615 发表于 2020-3-23 17:29
请问下,移植过去了,程序在跑,怎么交互呢?比方要设置几个参数,写好的lua脚本怎么上传到单片机?

交互的方式很多,我们H7-TOOL的上位机交互很方便,更新LUA脚本,或者PC联调均可。


H7-TOOL的LUA脚本API函数列表和调用方法,共计77个(2020-03-18)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=96905

eric2013 发表于 2020-3-23 19:23:09

zhousun 发表于 2020-3-20 10:43
我想问下楼主,看你讲的用处1,请问如果用lua更改配置参数和用串口直接发配置参数有什么不同吗?;用处2,3 ...

这种更新更方便啊。

H7-TOOL的LUA脚本API函数列表和调用方法,共计77个(2020-03-18)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=96905

挖东衣宇 发表于 2021-10-25 14:11:34

看到硬汉哥的iic lua分享,又来温习一下

wei886 发表于 2022-9-23 16:25:42

调佣 luaL_openlibs 函数就进入到硬件中断了,不知道是什么原因

跟着硬汉学 发表于 2023-6-30 11:07:42

感觉这个lua才是在单片机中运行的,但是缺少这方面的应用实例,H7Tool是在上位机上做的,和楼主这个应用场景好像都不一样吧!

eric2013 发表于 2023-6-30 11:10:39

跟着硬汉学 发表于 2023-6-30 11:07
感觉这个lua才是在单片机中运行的,但是缺少这方面的应用实例,H7Tool是在上位机上做的,和楼主这个应用场 ...
一样的,上位机仅仅编辑LUA用的,然后下载到TOOL里面立即执行,或者下载到TOOL的eMMC磁盘里面,TOOL可以脱机加载LUA文件,离线执行。

跟着硬汉学 发表于 2023-6-30 11:11:50

eric2013 发表于 2023-6-30 11:10
一样的,上位机仅仅编辑LUA用的,然后下载到TOOL里面立即执行,或者下载到TOOL的eMMC磁盘里面,TOOL可以 ...

明白了,原来是这样!确实方便很多!谢谢硬汉哥!

ABMBBS 发表于 2023-7-24 19:03:43

很不错,找时间玩玩看{:6:}

ifree 发表于 2023-9-9 00:03:21

在H7中集成一个Lua,需要多少RAM的开销。

eric2013 发表于 2023-9-9 08:10:26

ifree 发表于 2023-9-9 00:03
在H7中集成一个Lua,需要多少RAM的开销。

可以考虑测试下楼主这个跑马灯程序的最小RAM需求。

基本就是LUA的最小需求了。

ifree 发表于 2023-9-9 20:31:28

eric2013 发表于 2023-9-9 08:10
可以考虑测试下楼主这个跑马灯程序的最小RAM需求。

基本就是LUA的最小需求了。

谢谢硬汉歌,我仿照这个程序的例子,把Lua移植到了H7上,现在看到点灯已经闪烁了。
堆、栈已经改到下面的值了
Stack_Size      EQU   0x00008000
Heap_Size       EQU   0x00002C00
当要运行Lua程序时,如何确定程序的RAM消耗呢?比如lua中要定义变量,能定义多大的,由什么来决定?
H7Tool集成了Lua,不知道板子上是不是扩展了RAM芯片。

eric2013 发表于 2023-9-12 07:28:03

ifree 发表于 2023-9-9 20:31
谢谢硬汉歌,我仿照这个程序的例子,把Lua移植到了H7上,现在看到点灯已经闪烁了。
堆、栈已经改到下面 ...

当要运行Lua程序时,如何确定程序的RAM消耗呢?

可以看堆最小剩余情况。

yinghan123 发表于 2024-1-3 19:18:36

eric2013 发表于 2023-6-30 11:10
一样的,上位机仅仅编辑LUA用的,然后下载到TOOL里面立即执行,或者下载到TOOL的eMMC磁盘里面,TOOL可以 ...

那需要单片机要有文件系统,用来保存xx.lua文件了?,裸机是不能用了吗

eric2013 发表于 2024-1-4 09:00:06

yinghan123 发表于 2024-1-3 19:18
那需要单片机要有文件系统,用来保存xx.lua文件了?,裸机是不能用了吗

裸机的可以,就是数组方式,不过没有文件系统方便。
页: [1]
查看完整版本: STM32-V6 LUA简单移植