1-STM32嵌入LUA开发(控制小灯闪耀)
今天因为想让STM32完美的处理字符串,所以就想着让STM32嵌入lua,本来想用f103c8t6,但是一编译就提示内存不足......
所以单片机的型号选择的
\
我下载到了RBT6的芯片上测试的
先说一下最终实现的效果吧,就是用lua语言控制单片机的PC13 每间隔500Ms反转一次
实现功能的部分
static int lua_led_on(lua_State *L)
{
PCout() = ;
return ;
}
static int lua_led_off(lua_State *L)
{
PCout() = ;
return ;
} static int lua_delay(lua_State *L)
{
int num;
num= lua_tointeger(L, );
delay_ms(num);
return ;
} static const struct luaL_Reg mylib[]=
{
{"led_on",lua_led_on},
{"led_off",lua_led_off},
{"delay",lua_delay},
{NULL,NULL}
}; const char LUA_SCRIPT_GLOBAL[] =" \
off = \
on = \
while do \
led_on() \
delay(off) \
led_off() \
delay(on) \
end";
调用部分
while()
{
lua_State *L;
L = luaL_newstate(); /* 建立Lua运行环境 */
luaopen_base(L);
luaL_setfuncs(L, mylib, );
luaL_dostring(L, LUA_SCRIPT_GLOBAL); /* 运行Lua脚本 */ while();
其实虽然可以了,但是也没什么感觉....因为可能需要裁剪很多功能才能运行在c8t6上,所以,唉,不开心......
现在说一下移植(赋值粘贴加修改)的步骤
参考文章
https://blog.csdn.net/tinyfar/article/details/73727484
首先是下载Lua的源码
http://www.lua.org/ftp/lua-5.3.5.tar.gz

下载之后
把这个文件夹拷贝出来

放在自己的工程目录下,位置随意,只要自己知道就行,因为需要手动设置告诉软件一些.h的位置,这个大家应该知道




设置头文件位置




现在可以编译
可能会报这种错误



按理说这样其实可以测试了,,我的源码还修改了个地方

其实就是重定向一些函数
现在看主函数
#include "include.h"
#include "main.h"
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h" const char __stdin_name[];
const char __stdout_name[];
const char __stderr_name[]; typedef int FILEHANDLE;
FILEHANDLE _sys_open(const char *name,int openmode)
{
return ;
}
int _sys_close(FILEHANDLE fh)
{
return ;
}
int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
{
return ;
}
int _sys_read(FILEHANDLE fh, unsigned char*buf, unsigned len, int mode)
{
return ;
}
//检查句柄是否为终端
int _sys_istty(FILEHANDLE fh)
{
return ;
}
int _sys_seek(FILEHANDLE fh, long pos)
{
return ;
}
//刷新句柄关联的缓冲区
int _sys_ensure(FILEHANDLE fh)
{
return ;
}
//返回文件当前长度
long _sys_flen(FILEHANDLE fh)
{
return ;
}
void _sys_exit(int status)
{
//while(1);
}
int _sys_tmpnam(char *name, int fileno, unsigned maxlength)
{
return ;
}
//将一个字符写入控制台
void _ttywrch(int ch)
{
}
int remove(const char *filename)
{
return ;
}
char *_sys_command_string(char *cmd, int len)
{
return NULL;
} static int lua_led_on(lua_State *L)
{
PCout() = ;
return ;
}
static int lua_led_off(lua_State *L)
{
PCout() = ;
return ;
} static int lua_delay(lua_State *L)
{
int num;
num= lua_tointeger(L, );
delay_ms(num);
return ;
} static const struct luaL_Reg mylib[]=
{
{"led_on",lua_led_on},
{"led_off",lua_led_off},
{"delay",lua_delay},
{NULL,NULL}
}; const char LUA_SCRIPT_GLOBAL[] =" \
off = \
on = \
while do \
led_on() \
delay(off) \
led_off() \
delay(on) \
end"; int main(void)
{
NVIC_Configuration();
GpioInit(); Timer2_Config();
Uart123Init(,,); //串口初始化
rbCreate(&Uart1rb,Usart1SendBuff,Usart1SendLen);//创建环形队列--串口1
rbCreate(&Uart2rb,Usart2SendBuff,Usart2SendLen);//创建环形队列--串口2
rbCreate(&Uart3rb,Usart3SendBuff,Usart3SendLen);//创建环形队列--串口3
// FlashReadSaveDataInit();// //ADC_Config();//配置ADC采集(不使用DMA) DMA_ADC_Config();//使用DMA采集ADC
DMA_Config(); AdcGpioConfig();//配置ADC采集引脚 // IWDG_Init(IWDG_Prescaler_256,156*5); //时钟40K,分频数为256,156.25HZ,6.4ms;喂狗最小间隔5S while()
{
lua_State *L;
L = luaL_newstate(); /* 建立Lua运行环境 */
luaopen_base(L);
luaL_setfuncs(L, mylib, );
luaL_dostring(L, LUA_SCRIPT_GLOBAL); /* 运行Lua脚本 */ while(); // IWDG_Feed();//喂狗
// Testing();//测试函数
//
// if(Usart1ReadFlage)
// {
// Usart1ReadFlage = 0;
// PutData(&Uart1rb,USART1,Usart1ReadBuff,Usart1ReadCntCopy);
// } }
} /**
* @brief 测试函数
* @param
* @param None
* @param None
* @retval None
* @example
**/
void Testing(void)
{ }
其实就执行了lua语言

实质是Lua调用C
源码下载
链接:https://pan.baidu.com/s/13N0sPkM1f8Egoap0oZCR1g 密码:slxt
1-STM32嵌入LUA开发(控制小灯闪耀)的更多相关文章
- 5-51单片机ESP8266学习-AT指令(8266TCP服务器--用手机TCP调试助手发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8759294.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXNpkDI7E8 ...
- Arduino 开关控制小灯持续亮之具体思路
Arduino 开关控制小灯持续亮之具体思路 为什么写这篇文章: 我们用开关控制灯的亮灭的时候,希望只需要按一下按键就可以做到灯一直亮着.而在<Arduino魔法书>中——有弹性的按键这一 ...
- STM32嵌入式开发学习笔记(三):使用按键控制小灯
按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作. 查阅技术手册,按钮连接GPIOA控制下的管脚0. 但与之不同的是,按键是一种输入设备,输入 ...
- 硬件——nrf51822第三篇,按键控制小灯
现象是按键按下,小灯亮,按键抬起,小灯灭. 从这一节我们细致剖析gpio口的设置: nrf51822片上一共有32个数字引脚,分为4个port,如下: port 0 pin 0-7 port 1 pi ...
- 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...
- 7-51单片机ESP8266学习-AT指令(8266TCP服务器,编写自己的C#TCP客户端发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8780182.html 自己都是现做现写,如果想知道最终实现的功能,请看最后 先把源码和资料链接放到这里 链接: https: ...
- GPIO输入—按键检测(开关控制小灯)
本次的代码全是在上次代码之上添加的. 1.user下新建文件夹key,新建bsp_key.h bsp_key.c文件. 2.keil项目添加bsp_key.c,魔术棒C/C++中include pat ...
- STM32中断定时,控制LED灯
#include "led.h" void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBas ...
- ESP8266 LUA脚本语言开发: 准备工作-LUA开发是怎么来的
前言 当前8266有各种开发 1.在官方已经封装好的C库上开发(SDK开发) 2.官方在SDK的基础上封装的AT指令程序(AT指令开发) 3.在SDK的基础上嵌入脚本语言(Lua,Python等开发方 ...
随机推荐
- vue.js及项目实战[笔记]— 02 vue.js基础
一. 基础 1. 注册全局组件 应用场景:多出使用的公共性能组件,就可以注册成全局组件,减少冗余代码 全局APIVue.component('组件名','组件对象') 2.附加功能:过滤器&监 ...
- php+smarty轻松开发微社区/微论坛
今天我们就来分析微社区的基本功能构成吧.首先,每个论坛最主要的是会员在对应的版块下发帖,或者在感兴趣的主题帖下跟帖盖楼.其次,会员能时时看到帖子或版块的基本信息.所以主要大块是: 前台:会员的注册登录 ...
- TCP连接之报文首部
在面试时,会经常被问到TCP报文的一些细节,可以说TCP报文是不少企业用来考察面试者对网络的掌握程度的一道题目. TCP连接作为网络传输的一个环节,是不可或缺的一部分.例如,OSI七层模型的应用层HT ...
- JMeter—系统性能分析思路(十三)
参考<全栈性能测试修炼宝典JMeter实战>第九章 性能监控诊断 第二节 系统性能分析思路和第三节 定位分析 系统在工作负载中的性能受到许多因素影响,处理器速度.内存容量.网络或磁盘I/O ...
- 将 Azure 文件共享用于 Windows VM
可将 Azure 文件共享用作一种从 VM 中存储和访问文件的方式. 例如,你可以存储一个要与所有 VM 共享的脚本或应用程序配置文件. 本主题将介绍如何创建和装载 Azure 文件共享,以及如何上传 ...
- openldap系列
openldap系列 阅读视图 系列介绍 openldap系列目录 1. 系列介绍 本系列文档大部分来自于郭大勇老师的<OpenLDAP实战指南>,少部分来自于互联网.所有文档均已经过本人 ...
- django静态文件
django静态文件(js脚本.CSS.图片等) 默认统一放在每一个app的static文件夹下, 通过收集静态文件命令,自动将每一个app下static文件夹下的文件复制到根目录的static文件夹 ...
- logstash启动失败的问题追查
在实验中logstash是作为日志过滤器的作用,日志收集使用的则是filebeat组件.redis作为缓存器,logstash从redis中拉取数据进行过滤并传给elasticsearch组件. 但是 ...
- Linux 小知识翻译 - 「别名」
实际上,「别名」被用在多种场合下.比如「命令的别名」,「邮件地址的别名」等等. 所以,单独说「别名」的时候,根据不用的场合,代表的意思也不一样. 一般来说,「别名」是指意思差不多的东西. 「别名」的英 ...
- zk理解(转载自邬兴亮---www.cnblogs.com/wuxl360/p/5817471.html)
一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的 ...