1-STM32嵌入LUA開發(控制小燈閃耀)

今天由於想讓STM32完美的處理字符串,因此就想着讓STM32嵌入lua,原本想用f103c8t6,可是一編譯就提示內存不足......函數

因此單片機的型號選擇的測試

\lua

 

我下載到了RBT6的芯片上測試的spa

先說一下最終實現的效果吧,就是用lua語言控制單片機的PC13  每間隔500Ms反轉一次.net

實現功能的部分3d

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";

調用部分code

    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上,因此,唉,不開心......blog

如今說一下移植(賦值粘貼加修改)的步驟隊列

參考文章內存

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, unsigned len, 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, 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";


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, mylib, 0);
    luaL_dostring(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

相關文章
相關標籤/搜索