外观
Lua 示例
2025-10-29
概述
本示例演示如何在 RC3506 开发板上使用 Lua 脚本引擎,通过 RT-Thread 与 Lua5.3.4 的整合,实现基础脚本命令操作和 GPIO 控制功能,帮助用户掌握在实时操作系统中运行脚本语言的方法。
Lua 脚本引擎简介
Lua 脚本引擎是一款以轻量高效著称的嵌入式脚本语言,采用类似 C 语言的结构但去除了冗余语法,学习门槛低;体积超小,核心库仅几百 KB,能轻松嵌入各种应用程序;执行效率高,在脚本语言中性能表现优异,尤其适合对资源敏感的场景。
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
yolo 示例相关代码
初始化结构体:确保 handle 只被完全初始化一次,后续调用仅重置必要字段;处理命令行参数:动态分配内存并安全地拷贝用户传入的命令行参数(argv[1])到全局结构体 handle 的 argv[1] 字段中;创建Lua线程:创建并启动一个专用的 Lua 解释器线程,用于在 RT-Thread 实时操作系统中异步执行 Lua 脚本。
rt-thread\components\language\Lua\lua2rtt.c
static int lua2rtt(int argc, char **argv)
{
static rt_bool_t history_init = RT_FALSE;
// 初始化结构体
if(history_init == RT_FALSE)
{
rt_memset(&handle, 0x00, sizeof(struct lua2rtt));
history_init = RT_TRUE;
}
else
{
handle.thread = RT_NULL;
handle.stat = LUA2RTT_WAIT_NORMAL;
handle.argc = 0;
handle.argv[0] = RT_NULL;
handle.argv[1] = RT_NULL;
handle.argv[2] = RT_NULL;
rt_memset(handle.line, 0x00, LUA2RTT_CMD_SIZE);
handle.line_position = 0;
handle.line_curpos = 0;
handle.device = RT_NULL;
handle.rx_indicate = RT_NULL;
}
rt_sem_init(&handle.rx_sem, "lua2rtt_rxsem", 0, RT_IPC_FLAG_FIFO);
handle.argc = argc;
handle.argv[0] = "lua";
handle.argv[1] = RT_NULL;
handle.argv[2] = RT_NULL;
// 处理命令行参数
if(argc > 1)
{
rt_size_t len = rt_strlen(argv[1]);
handle.argv[1] = (char *)rt_malloc(len + 1);
rt_memset(handle.argv[1], 0x00, len + 1);
rt_strncpy(handle.argv[1], argv[1], len);
}
rt_thread_t tid = rt_thread_self();
rt_uint8_t prio = RT_SCHED_PRIV(tid).current_priority;
// 创建Lua线程
handle.thread = rt_thread_create("lua", lua2rtt_run, RT_NULL, LUA2RTT_THREAD_STACK_SIZE, prio, 10);
if(handle.thread == RT_NULL)
{
rt_sem_detach(&handle.rx_sem);
LUA2RTT_DBG("The Lua interpreter thread create failed.\n");
return RT_ERROR;
}
rt_thread_startup(handle.thread); // 启动Lua线程
return RT_EOK;
}
MSH_CMD_EXPORT_ALIAS(lua2rtt, lua, Execute Lua parser.);运行示例
操作步骤:
- 将程序下载到开发板
- 打开串口终端连接开发板
- 输入
lua命令进入 Lua 交互式环境 - 在 Lua 环境中执行基本脚本命令
- 按 Ctrl+D 退出 Lua 环境
- 输入
lua_led_turn_on、lua_led_turn_off或lua_led_loop命令控制 LED
预期结果:
- 运行
lua命令:进入 Lua 交互式环境,显示 Lua 版本信息,可执行算术运算和打印等基本操作 - 运行
lua_led_turn_on命令:LED 灯点亮,并在终端显示相关信息 - 运行
lua_led_turn_off命令:LED 灯熄灭,并在终端显示相关信息 - 运行
lua_led_loop命令:LED 灯循环亮灭,并在终端显示相关信息
msh />lua
Press CTRL+D to exit Lua.
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio
>
> 1+1
2
> print(132)
132
>msh />lua_led_turn_on
[I/example.gpio] turn led on
msh />lua_led_turn_off
[I/example.gpio] turn led off
msh />lua_led_loop
[I/example.gpio] LED loop