在ch32v307单片机上移植LUA

下载lua源代码

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

然后解压出源码

源码移植

这里基于官方例程中的串口例程进行移植,USART_Printf例程

使用MounRiver Studio该工程,然后添加lua源码

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

设置头文件路径包含。

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

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

编译后出错,发现无法找到math.h库,需要在设置里面找到Cross Linker,添加m表示添加math.h库

/********************************** (C) COPYRIGHT *******************************
* File Name          : main.c
* Author             : WCH
* Version            : V1.0.0
* Date               : 2021/06/06
* Description        : Main program body.
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* SPDX-License-Identifier: Apache-2.0
*******************************************************************************/

/*
 *@Note
 串口打印调试例程:
 USART1_Tx(PA9)。
 本例程演示使用 USART1(PA9) 作打印调试口输出。

*/

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

/* Global typedef */

/* Global define */

/* Global Variable */
static int lua_led_on(lua_State *L)
{
    GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
    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";

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);
}

/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	Delay_Init();
	USART_Printf_Init(115200);
	printf("SystemClk:%d\r\n",SystemCoreClock);
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
	lua_run();

	while(1)
    {

	}
}

编译成功,程序在163k左右

 烧入到单片机,可以观察到灯闪。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值