1-STM32嵌入LUA开发(控制小灯闪耀)
今天因为想让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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |