今天因为想让STM32完美的处理字符串,所以就想着让STM32嵌入lua,本来想用f103c8t6,但是一编译就提示内存不足......
所以单片机的型号选择的
\
我下载到了RBT6的芯片上测试的
先说一下最终实现的效果吧,就是用lua语言控制单片机的PC13 每间隔500Ms反转一次
实现功能的部分
static int lua_led_on(lua_State *L){ PCout(13) = 1; return 1;}static int lua_led_off(lua_State *L){ PCout(13) = 0; return 1;} static int lua_delay(lua_State *L){ int num; num= lua_tointeger(L,1); delay_ms(num); return 1;}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 = 500 on = 500 while 1 do led_on() delay(off) led_off() delay(on) end";
调用部分
while(1) { lua_State *L; L = luaL_newstate(); /* 建立Lua运行环境 */ luaopen_base(L); luaL_setfuncs(L,mylib,0); luaL_dostring(L,LUA_SCRIPT_GLOBAL); /* 运行Lua脚本 */ while(1);
其实虽然可以了,但是也没什么感觉....因为可能需要裁剪很多功能才能运行在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[150];const char __stdout_name[150];const char __stderr_name[150];typedef int fileHANDLE;fileHANDLE _sys_open(const char *name,int openmode){ return 0;}int _sys_close(fileHANDLE fh){ return 0;}int _sys_write(fileHANDLE fh,const unsigned char *buf,unsigned len,int mode){ return 0;}int _sys_read(fileHANDLE fh,unsigned char*buf,int mode){ return 0;}//检查句柄是否为终端int _sys_istty(fileHANDLE fh){ return 0;}int _sys_seek(fileHANDLE fh,long pos){ return 0;}//刷新句柄关联的缓冲区int _sys_ensure(fileHANDLE fh){ return 0;}//返回文件当前长度long _sys_flen(fileHANDLE fh){ return 0;}voID _sys_exit(int status){ //while(1);}int _sys_tmpnam(char *name,int fileno,unsigned maxlength){ return 0;}//将一个字符写入控制台voID _ttywrch(int ch){}int remove(const char *filename){ return 0;}char *_sys_command_string(char *cmd,int len){ return NulL;}static int lua_led_on(lua_State *L){ PCout(13) = 1; return 1;}static int lua_led_off(lua_State *L){ PCout(13) = 0; return 1;} static int lua_delay(lua_State *L){ int num; num= lua_tointeger(L,NulL}};const char LUA_SCRIPT_GLOBAL[] =" \off = 500 on = 500 while 1 do led_on() delay(off) led_off() delay(on) end";int main(voID){ NVIC_Configuration(); GpioInit(); Timer2_Config(); Uart123Init(115200,115200,115200); //串口初始化 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(1) { lua_State *L; L = luaL_newstate(); /* 建立Lua运行环境 */ luaopen_base(L); luaL_setfuncs(L,LUA_SCRIPT_GLOBAL); /* 运行Lua脚本 */ while(1); // 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开发(控制小灯闪耀)全部内容,希望文章能够帮你解决1-STM32嵌入LUA开发(控制小灯闪耀)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)