[原创] 【ST NUCLEO-U575ZI-Q 测评 】LUA移植

qinyunti   2022-12-17 00:04 楼主

Rec 0001

proj.zip (2.41 MB)
(下载次数: 3, 2022-12-17 00:04 上传)

前言

目前市面上有很多嵌入式平台使用MicroPython进行脚本开发,很是方便。实际上还有一门优秀的脚本语言,LUA也适合移植到嵌入式平台中使用。鉴于MicroPython的内容网上已经够多了,所以这里不再移植MicroPython,而是LUA。

参考http://www.lua.org/

过程

准备

从http://www.lua.org/ftp/下载最新版本

image-20221217000101-1.png  

解压到我们自己的工程,并添加所有c文件(除了luac.c

)到工程中。

image-20221217000101-2.png  

 

 

串口

交互操作使用串口,我们使用PA9和PA10对应USART1,接到了板载STLINK的虚拟串口,这样只要接一个USB即可供电,仿真,又可以串口通讯。

串口的操作参见https://bbs.eeworld.com.cn/thread-1228718-1-1.html

https://bbs.eeworld.com.cn/thread-1228720-1-1.html

 

打印输出时增加回显

 

int fputc(int c, FILE *stream)

{

/* Your implementation of fputc(). */

uint8_t ch=0;

if((uint8_t)ch == (uint8_t)'\n')

{

ch = '\r';

uart_write(&ch,1);

}

ch = (uint8_t)c;

uart_write(&ch,1);

if((uint8_t)ch == (uint8_t)'\r')

{

ch = '\n';

uart_write(&ch,1);

}

return c;

}

 

 

不用fgets所以fgetc不用,而是使用xprintf的xgets

移植修改

Lua.c时一个交互式的解释器,我们可以直接使用

#include "xprintf.h"

436行         fgets(b, LUA_MAXINPUT, stdin) != NULL)  /* get line */改为

xgets(b,LUA_MAXINPUT) != NULL)

因为fgets有点问题,所以使用xprintf的xgets。参见https://bbs.eeworld.com.cn/thread-1228721-1-1.html

 

int main (int argc, char **argv) {改为

int lua_main (int argc, char **argv) {

 

在我们的main中调用lua_main即可

 

实现三个接口函数

 

volatile uint32_t s_ms_u32 = 0;

time_t time(time_t * t)

{

if(t != 0)

{

*t = s_ms_u32/1000;

}

return s_ms_u32/1000;

}

 

int system(const char s)

{

return 0;

}

 

void exit(int p)

{

 

}

 

 

其中s_ms_u32在systick中断中递增

 

void SysTick_Handler(void)

{

static volatile uint32_t num = 0;

s_ms_u32++;

if(num++ >= 1000)

{

LL_GPIO_TogglePin(GPIOB, 1u<<7);

LL_GPIO_TogglePin(GPIOG, 1u<<2);

LL_GPIO_TogglePin(GPIOC, 1u<<7);

num=0;

}

HAL_IncTick();

}

 

 

修改堆栈加大一点

image-20221217000101-3.png  

 

Main中调用 lua_main(3,cmd);即可

 

 

 

测试

编译下载运行

先来个HelloWorld

image-20221217000101-4.png  

 

打印时间

image-20221217000101-5.png  

 

打印日期

image-20221217000101-6.png  

 

其他操作可以参考lua的相关文档。

总结

LUA是MicroPython外一个优秀的脚本语言,可以移植到MCU等资源较小的嵌入式平台。代码用ANSI-C写成,移植很简单,只需要实现几个接口即可。后面我们就可以发挥脚本语言的优势,移植外设部分,就可以实现lua操作硬件了。

 

回复评论 (7)

看来LUA确实适合移植到嵌入式平台中

点赞  2022-12-17 20:37
lua,移植,是要指定芯片吗?
点赞  2022-12-17 23:22
引用: lugl4313820 发表于 2022-12-17 23:22 lua,移植,是要指定芯片吗?

lua资源需求很小,ANSI-C编写,可移植性很好,只要资源够可以移植到任何MCU上使用。

使用lua.c解释器只需要实现基本的标准输入输出接口即可。

点赞  2022-12-17 23:43
引用: qinyunti 发表于 2022-12-17 23:43 lua资源需求很小,ANSI-C编写,可移植性很好,只要资源够可以移植到任何MCU上使用。 使用lua.c解释器 ...

感谢大佬 分享,我也试着学学,记得我入门那时就用过esp8266的lua。但是那时没有学好。

点赞  2022-12-18 10:24

xprintf,学习了!

默认摸鱼,再摸鱼。2022、9、28
点赞  2022-12-27 14:15

这个挺好玩的,在ESP8266的那个nodemcu上见过。这个和microPython比起来哪个更好用呢?

点赞  2023-1-8 21:46

测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2023-1-12 09:44
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复