在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)腳本語言移植lua到stm32MDK

            單片機(jī)腳本語言移植lua到stm32MDK

            作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
            Lua簡單介紹

            Lua[1]是一個(gè)小巧的腳本語言。作者是巴西人。該語言的設(shè)計(jì)目的是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能。

            本文引用地址:http://www.biyoush.com/article/201611/318719.htm

            Lua腳本能夠非常easy的被C/C++代碼調(diào)用,也能夠反過來調(diào)用C/C++的函數(shù),這使得Lua在應(yīng)用程序中能夠被廣泛應(yīng)用。不只作為擴(kuò)展腳本,也能夠作為普通的配置文件,取代XML,Ini等文件格式,而且更easy理解和維護(hù)。

            Lua的目標(biāo)是成為一個(gè)非常easy嵌入其他語言中使用的語言。大多數(shù)程序猿也覺得它的確做到了這一點(diǎn)。

            非常多應(yīng)用程序使用LUA作為自己的嵌入式腳本語言,以此來實(shí)現(xiàn)可配置性、可擴(kuò)展性。這當(dāng)中包含魔獸世界、博德之門、憤慨的小鳥、VOCALOID3等。

            單片機(jī)使用的腳本現(xiàn)狀

            佳能相機(jī)的CHDK外掛破解固件支持ubasic與lua腳本。http://chdk.wikia.com/wiki/CHDK_User_Manual

            (一)ubasic

            uBASIC是與普通的BASIC語言極相似的解釋型編程語言,在佳能相機(jī)的CHDK外掛破解固件中使用的僅是uBASIC語言的一個(gè)微小的子集,但用來控制相機(jī)的各種操作已經(jīng)足夠了。uBASIC是CHDK所包括的編程組件,通過編程來進(jìn)一步拓展CHDK固件的功能。通過執(zhí)行uBASIC編寫的腳本,能夠使相機(jī)按預(yù)定的程序自己主動地執(zhí)行各種操作,比方運(yùn)動檢測(功能相當(dāng)強(qiáng)大),自己主動調(diào)整光圈、快門,包圍曝光,甚至USB線控拍攝等等。僅僅要有不論什么一種編程語言的基礎(chǔ),要學(xué)會uBASIC相機(jī)控制腳本語言都是非常easy的,只是要靈活地運(yùn)用它實(shí)現(xiàn)非常多特殊而有趣的功能則須要一定時(shí)間的練習(xí)與實(shí)踐了。

            外部資料鏈接

            http://wenku.baidu.com/link?url=awzzzkvjPVuAM_17Fpw42U1r8JSOW-0RHf9GE6Sn2qAUP3SarZH-TPzVuIiCz7p8NhPz1iFeGmLJRHH-HcXYGKfh41X7pbtDCWbkYugzthK

            (二)lua

            也被佳能相機(jī)的CHDK外掛破解固件支持,另外,有eluaproject支持各種單片機(jī),elua代表嵌入式LUA,該項(xiàng)目的目的是為嵌入式設(shè)備提供的Lua編程語言的全面支持,給單片機(jī)提供可擴(kuò)展、高效、便攜式的軟件特點(diǎn)。

            Eluaproject

            https://github.com/elua/elua

            Lua硬件要求

            l RAM >= 7.5Kb,建議16KB以上

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

            Lua在MDK下編譯后的大小約60kb,最小執(zhí)行內(nèi)存約7.5kb。

            MDK下lua移植到stm32

            移植lua

            l 加入?lua源代碼到MDK,把lua.c 和luac.c刪除。

            l 改動堆棧大?。憾炎钚?.5kb,棧最小是1.5kb。lua的空間分配在堆空間。16kb的內(nèi)存建議分配是堆11Kb,棧4Kb,留1Kb給全局變量

            在startup_stm32f10x_md.s文件里

            ;stack size 0x1 == 4Kb

            Stack_SizeEQU 0x01

            ;heap size 0x2c00 == 11Kb

            Heap_Size EQU 0x02C00

            l 重寫標(biāo)準(zhǔn)庫底層函數(shù)

            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;

            }

            //刷新句柄關(guān)聯(lián)的緩沖區(qū)

            int _sys_ensure(FILEHANDLE fh)

            {

            return0;

            }

            //返回文件當(dāng)前長度

            long _sys_flen(FILEHANDLE fh)

            {

            return0;

            }

            void _sys_exit(int status)

            {

            //while(1);

            }

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

            {

            return0;

            }

            //將一個(gè)字符寫入控制臺

            void _ttywrch(int ch)

            {

            }

            int remove(const char *filename)

            {

            return0;

            }

            char *_sys_command_string(char *cmd, intlen)

            {

            return NULL;

            }

            C語言與lua交互

            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[] =

            {

            {"led_on",lua_led_on},

            {"led_off",lua_led_off},

            {"delay",lua_delay},

            {NULL,NULL}

            };

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

            /*************************************************

            函數(shù): int main(void)

            功能: main主函數(shù)

            參數(shù): 無

            返回: 無

            **************************************************/

            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(;;)

            {

            }

            }



            評論


            技術(shù)專區(qū)

            關(guān)閉