微控制器指令碼語言 移植lua到stm32 MDK

2021-09-30 11:20:51 字數 3937 閱讀 6295

lua

[1]

是乙個小巧的指令碼語言。作者是

巴西人。該語言的

設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。

lua指令碼可以很容易的被

c/c++

**呼叫,也可以反過來呼叫

c/c++的函式

,這使得

lua在應用程式中可以被廣泛應用。不僅僅作為擴充套件指令碼,也可以作為普通的配置檔案,代替

xml,

ini等檔案格式,並且更容易理解和維護。

lua的目標是成為乙個很容易嵌入其它語言中使用的語言。大多數程式設計師也認為它的確做到了這一點。

很多應用程式使用

lua作為自己的嵌入式

指令碼語言

,以此來實現可配置性、可擴充套件性。這其中包括

魔獸世界

、博德之門

、憤怒的小鳥

、vocaloid3 等。

佳能相機的chdk外掛程式破解韌體支援ubasic與lua指令碼。

ubasic是與普通的basic語言極相似的解釋型程式語言,在佳能相機的chdk外掛程式破解韌體中使用的僅是ubasic語言的乙個微小的子集,但用來控制相機的各種操作已經足夠了。ubasic是chdk所包含的程式設計元件,通過程式設計來進一步拓展chdk韌體的功能。通過執行ubasic編寫的指令碼,可以使相機按預定的程式自動地執行各種操作,比如運動檢測(功能相當強大),自動調整光圈、快門,包圍**,甚至usb線控拍攝等等。只要有任何一種程式語言的基礎,要學會ubasic相機控制指令碼語言都是非常容易的,不過要靈活地運用它實現很多特殊而有趣的功能則需要一定時間的練習與實踐了。

外部資料鏈結

也被佳能相機的chdk外掛程式破解韌體支援,另外,有eluaproject支援各種微控制器,elua

代表嵌入式

lua,該項目的目的是為嵌入式裝置提供的

lua程式語言的全面支援,給微控制器提供可擴充套件、高效、可攜式的軟體特點。

eluaproject

l  ram >= 7.5kb,建議16kb以上

l  rom >= 65kb,建議128kb以上

lua在mdk下編譯後的大小約60kb,最小執行記憶體約7.5kb。

l  新增lua原始碼到mdk,把lua.c 和luac.c刪除。

l  修改堆疊大小:堆最小為5.5kb,棧最小是1.5kb。lua的空間分配在堆空間。16kb的記憶體建議分配是堆11kb,棧4kb,留1kb給全域性變數。

在startup_stm32f10x_md.s

檔案中

;stack size 0x1000 == 4kb

stack_size 

equ  

0x00001000 ;

heap size 0x2c00 == 11kb

heap_size  

equ  

0x00002c00

l  重寫標準庫底層函式

typedef int filehandle;

#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];

filehandle _sys_open(const char *name, intopenmode)

return0;

int _sys_close(filehandle fh)

return 0;

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

return0;

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

return0;

//檢查控制代碼是否為終端

int _sys_istty(filehandle fh)

return0;

int _sys_seek(filehandle fh, long pos)

return0;

//重新整理控制代碼關聯的緩衝區

int _sys_ensure(filehandle fh)

return0;

//返回檔案當前長度

long _sys_flen(filehandle fh)

return0;

void _sys_exit(int status)

//while(1);

int _sys_tmpnam(char *name, int fileno, unsignedmaxlength)

return0;

//將乙個字元寫入控制台

void _ttywrch(int ch)

int remove(const char *filename)

return0;

char *_sys_command_string(char *cmd, intlen)

return null;

static int lua_led_on(lua_state *l)

gpio_resetbits(gpioc,gpio_pin_13); 

return1;

static int lua_led_off(lua_state *l)

gpio_setbits(gpioc,gpio_pin_13);

return1;

static int lua_delay(lua_state *l)

intnum;

num= lua_tointeger(l, 1);

delay(num);

return1;

static const struct lual_reg mylib =,,

,int luaopen_mylib(lua_state *l)

#if 1

//lua_newtable(l);

lual_setfuncs(l,mylib, 0);

#else

lual_newlib(l,mylib);

#endif

return1;

const char lua_script_global ="  \

off = 10     \

on = 10       \

while 1 do \

led_off() \

delay(off)    \

led_on()        \

delay(on)      \

off= off * 1.02      \

on= on * 1.02      \

ifoff > 800 then off = 500 end \

ifon > 800 then on = 400 end \

end";

函式: int main(void)

功能: main主函式

引數: 無

返回: 無

int main(void)

intret = 0;

lua_state *l = null;

system_init();

l =lual_newstate();

if(l == null)

abort();

luaopen_base(l);

luaopen_mylib(l);

ret= lual_dostring(l, lua_script_global);

if (ret != 0)

abort();

lua_close(l);

abort();

for(;;)

微控制器指令碼語言 移植lua到stm32 MDK

lua 1 是乙個小巧的指令碼語言。作者是 巴西人。該語言的 設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。lua指令碼能夠非常easy的被 c c 呼叫,也能夠反過來呼叫 c c 的函式 這使得 lua在應用程式中能夠被廣泛應用。不只作為擴充套件指令碼,也能夠作為普通的...

微控制器學習(一) 微控制器基礎 STM32

io四種輸入工作模式 io四種輸出工作模 stm32有8個16位定時器 stm32具有強大的異常響應系統,它把能夠打斷當前 執行流程的事件分為異常 exception 和中斷 interrupt 並把它們用乙個表管理起來,編號為 3 6的中斷向量定義為系統異常,編號從7到19的為外部中斷。中斷向量控...

微控制器 STM32庫開發

1.stm32庫開發是什麼?st公司推出的基於cortex m3核心的mcu 微控制器,也就是通常所說的微控制器 倡導使用韌體庫開發,僅通過呼叫庫裡面的api 應用程式介面 就可以迅速搭建乙個程式,寫出各種使用者需要的應用。庫開發方式自頂向下,可以避免對底層暫存器的繁瑣操作,能大大降低學習門檻和開發...