lua在stm32上的移植

2021-07-09 03:01:26 字數 3455 閱讀 1229

2.增加檔案stm32_lua_config.c,其內容如下,主要是重定義lua中檔案操作的底層函式(即fopen、fread、fclose等函式要呼叫的函式):

#include "includes.h"

#include "lcd_get_res.h"

#include "ff.h"

#pragma import(__use_no_semihosting_swi)

#pragma import(_main_redirection)

const char __stdin_name[150];

const char __stdout_name[150];

const char __stderr_name[150];

typedef int filehandle;

void _sys_exit(int status)

filehandle _sys_open(const char *name, int openmode)

if(openmode & 0x01)

if(openmode & 0x10)

if(openmode & 0x0100)

ret = f_open(&sd_file, name, mode);

if(ret != fr_ok)

return 1;

}int _sys_close(filehandle fh)

int _sys_write(filehandle fh, const unsigned char *buf, unsigned len, int mode)

int _sys_read(filehandle fh, unsigned char*buf, unsigned len, int mode)

// read_len -=cou_sd;

// i += cou_sd;

// if(read_len <= 0 || cou_sd == 0)

//

// }

return i;

}//若此處重定義了fgetc則fread不會呼叫_sys_read

int fgetc(file *stream)

return ch;

}int _sys_seek(filehandle fh, long pos)

return 0;

}int _sys_istty(filehandle fh)

int _sys_ensure(filehandle fh)

long _sys_flen(filehandle fh)

int _sys_tmpnam(char *name, int fileno, unsigned maxlength)

void _ttywrch(int ch)

time_t time(time_t *t)

int remove(const char *filename)

char *_sys_command_string(char *cmd, int len)

clock_t clock(void)

int system(const char* a)

int rename(const char *a, const char *b)

3.在2中已經重新定義了lua中的檔案操作的底層函式,但是lua中有一些函式如lual_dofile需要從檔案目錄中載入.lua程式,這時我們只需實現上面的_sys_open、_sys_close、fgetc等函式再修改luaconf.h即可,在2中我已經實現檔案操作一些函式的介面,修改luaconf.h:

在luaconf.h 190行左右有如下**:

#define lua_root "/usr/local/"

#define lua_ldir lua_root "share/lua/" lua_vdir "/"

#define lua_cdir lua_root "lib/lua/" lua_vdir "/"

#define lua_path_default \

lua_ldir"?.lua;" lua_ldir"?/init.lua;" \

lua_cdir"?.lua;" lua_cdir"?/init.lua;" \

"./?.lua;" "./?/init.lua"

#define lua_cpath_default \

lua_cdir"?.so;" lua_cdir"loadall.so;" "./?.so"

上面及時lua尋找檔案的乙個預設路徑,因我們不存在這些路徑,把它修改為我們自己的sd卡路徑或其他儲存裝置路徑即可,這裡我用的是sd卡,把上面注釋,修改如下:

#define lua_path_default  "1:/lualib/?.lua;"

#define lua_cpath_default "1:/lualib/?.so;"

4.上面的工作做完就可以執行在sd卡中的lua程式了,舉例如下:

c程式:

static int delay_ms(lua_state *l)

static int print(lua_state *l)

return 0;

}static lual_reg lualib1_0 =

, ,

};void lua_task(void)

lua.lua中程式:

local lualib1_0 = require("lualib1_0")

windows =

local i = 0

function window2()

i = i + 1;

if i == 256 then

i = 0

end

endfunction window1()

i = i + 1;

if i == 256 then

i = 0

endendfunction window_handle()

window_cur = window1

if window_cur == windows.window1 then

window1()

elseif window_cur == windows.window2 then

window2()

end

endfunction lua_main()

while true do

window_handle()

lualib1_0.delay_ms(200)

endendlua_main()

這樣就可以把c和lua分開,在lua中寫自己的應用程式了,lua中想要什麼資料由c提供。

以上內容均為自己理解,如有錯誤,歡迎指正

在STM32上移植FreeRTOS

freertos是乙個迷你的實時作業系統核心。作為乙個輕量級的作業系統,功能包括 任務管理 時間管理 訊號量 訊息佇列 記憶體管理 記錄功能 軟體定時器 協程等,可基本滿足較小系統的需要。開啟後如下如顯示 為了避免出錯,請將路徑改為全英文 將主程式改為如下 include freertos.h in...

uCos在stm32上的移植總結

作業系統 windows xp 開發環境 keil uvision3 mdk 實驗開發板 open103z 一 準備 2 ucos ii 原始碼 移植版本 3 stm32標準外設庫 stm32標準外設庫是stm32全系列晶元的外設驅動 4 jlink 器驅動程式 找不到官網 二 建立工程資料夾結構 ...

MQTT協議在STM32上的移植

mqtt協議在stm32上的移植 開發平台 軟體環境 硬體環境 參考文件 本篇是mqtt在stm32裝置上的移植,因此使用paho的嵌入式c 庫,原始碼位址 移植 首先,需要將 paho.mqtt.embedded c mqttpacket 中的所有檔案新增到keil工程檔案,然後參考 paho.m...