移植Lua到CH32V103单片机

概述

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。

设计目的

其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

移植准备

开发板

Lua源码

先到官网下载lua源代码,http://www.lua.org/ftp/lua-5.4.3http://www.lua.org/ftp/lua-5.3.5

目前移植代码为5.4.3版本源码,网上比较多的移植资料为5.3.5源码,思路基本一样 。 源码主要在Linux系统,后缀为.tar.gz,基本windows压缩软件rar、zip等都可以解压。

下载好源码之后,将源码解压。如下图所示文件,找到src文件夹。

将src文件夹复制到需要移植的CH32V工程中,添加文件夹管理lua源代码,比如./lua/src。

源码移植

lua一般都会使用串口获取脚本指令,为了减少移植工作,这里基于官方例程中的串口例程进行移植。USART_Printf例程,将该例程复制并得命名,如Lua_CH32V103。也可选择其他例程。

进入Lua_CH32V103文件夹,将之前下载好的Lua源码,复制到该文件夹下,并重命名。

双击USART_Printf.wvproj文件,打开工程。此时Lua文件夹为MounRiver Studio自动加载到工程中。

需要将lua.c和luac.c移出工程。在源码目录中找到相应文件,选中文件,鼠标右键点击【参与/排出编译】。

设置头文件路径包含。

 

在main.c中添加lua相关头文件。

#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"

添加lua与单片机硬件支持。

static int lua_led_on(lua_State *L)
{
    GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
    return 1;
}

static int lua_led_off(lua_State *L)
{
    GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
    return 1;
}
static int lua_delay(lua_State *L)
{
    uint16_t ms;
    ms = (uint16_t)lua_tointeger(L,1);
    Delay_Ms(ms);
    return 1;
}

static const struct luaL_Reg my_lib_bsp[]=
{
    {"delay",lua_delay},
    {"led_on",lua_led_on},
    {"led_off",lua_led_off},
    {NULL,NULL}
};

添加一段点灯脚本。

const char LUA_SCRIPT_GLOBAL[]="\
off = 500    \
on = 500     \
while 1 do   \
    led_on() \
    delay(off)\
    led_off() \
    delay(on) \
end";

添加Lua运行环境。

static lua_State *luaL;
void lua_run(void)
{
    luaL = luaL_newstate();
    luaopen_base(luaL);
    luaL_setfuncs(luaL,my_lib_bsp,0);
    luaL_dostring(luaL,LUA_SCRIPT_GLOBAL);

    while(1);
}

 添加int mian(void)。

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	Delay_Init();
	GPIO_Configure();
	USART_Printf_Init(115200);

	printf("SystemClk:%d\r\n",SystemCoreClock);

	printf("This is lua example\r\n");

	lua_run();
    while(1)
    {

    }
}

        比较遗憾,由于CH32V10R8T6,Flash只有64K、RAM为20K,移植的Lua源码需要大于80K Flash空间。因此在CH32V103R8T6上并示能编译通过,但在STM32F407VGT6上已经验证Lua移植代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值