<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 基于Lua腳本語(yǔ)言的嵌入式UART通信方案設計

基于Lua腳本語(yǔ)言的嵌入式UART通信方案設計

作者: 時(shí)間:2012-05-03 來(lái)源:網(wǎng)絡(luò ) 收藏

本系統的程序流程如圖2所示。其中,串口芯片采用T1公司的帶64字節FIFO的4通道可編程芯片TL16C754B來(lái)實(shí)現。它的4個(gè)通道可分別獨立編程,在3.3 V的操作電壓下,數據傳輸速率可高達2 Mbps,適合多種環(huán)境中的應用。裝置的應用環(huán)境,本文采用RS485的問(wèn)答機制并結合查詢(xún)方式來(lái)對該串口方案進(jìn)行設計。在方案實(shí)現中,裝置將每隔一定時(shí)間通過(guò)串口芯片發(fā)送一次查詢(xún)報文,當查詢(xún)到外圍沒(méi)備發(fā)送的正確響應報文后,再進(jìn)行相關(guān)業(yè)務(wù)處理。

3 功能實(shí)現
應用領(lǐng)域,串口通信的應用比較成熟,因此,本文將著(zhù)重介紹是如何服務(wù)于這一應用的。從圖2可以看出,的使用主要體現在如下幾個(gè)方面:
與C交互環(huán)境的建立;
◆提取中的串口配置數據;
◆調用Lua函數設置發(fā)送緩沖區;
◆通過(guò)Lua函數處理接收緩沖區數據。
3.1 Lua與C交互環(huán)境的建立
要建立交互環(huán)境,首先要啟動(dòng)Lua引擎,并創(chuàng )建虛擬機。其機制雖然相對復雜,但對應用來(lái)說(shuō)卻比較簡(jiǎn)單,通過(guò)“L=lua_opcn(NUL L);”即可實(shí)現。其中,L是一個(gè)指向結構類(lèi)型為lua_State的指針變量,該結構將負責對Lua的運行狀態(tài)進(jìn)行維護。
為了實(shí)現Lua函數對系統程序中串口發(fā)送和接收緩存區的數據進(jìn)行訪(fǎng)問(wèn),定義了幾個(gè)C函數供腳本調用,即用于設置串口發(fā)送緩沖區的函數set_tx_buf、讀取串口接收緩沖區的函數get_rx_buf,以及在Lua腳本中判斷串口數據交互正常時(shí)調用的結果處理函數uart_ok_del。
在Lua腳本中,要成功調用以上函數,必須將其加載到Lua虛擬機中去,本文采用Lua提供的一種注冊C函數庫的方法來(lái)實(shí)現。具體加載過(guò)程如下:
①按以下格式定義調用函數:
static int set tx buf(lua State *L);
static int get rx_buf(lua State *L);
static int uart_ok_del(lua State*L);
②聲明一個(gè)結構數組,每個(gè)數組元素分別為C函數在Lua腳本中的淵用名字及對應的C函數,即以“namefunction”對的形式出現,如下所示:
static const struct luaL_reg uartLib[]={
{“set_tx_buf”,set_tx_buf},
{“get_tx_buf”,get_tx_buf),
{“uart_ok_del”,uart_ok_de},
{NULL,NULL}
};
③調用以下函數對C函數庫進(jìn)行注冊:
luaL register(L.“ied”,uartLib);
其中,參數L即為創(chuàng )建虛擬機時(shí)的函數返回值(以下同),字符串“ied”為注冊到虛擬機中的庫名稱(chēng)。第3個(gè)參數uartLib即為前面聲明的結構數組,對應需要注冊的庫函數表。
通過(guò)以上步驟,即可完成Lua腳本中需要調用的3個(gè)C函數的注冊過(guò)程,從而就可以在Lua腳本中通過(guò)“庫名稱(chēng),庫函數”的形式來(lái)對其進(jìn)行調用,如“ied.set_tx_buf(函數參數)”。
腳本文件本身的加載則相對簡(jiǎn)單,只需通過(guò)如下函數調用即可:
luaL_dofile(L,“uart script.lua”);
其中,參數L和以上的函數調用相同,第2個(gè)參數則為腳本文件在Flash中的具體存儲路徑。
至此,就成功建立了一個(gè)Lua與C的交互環(huán)境。
3.2 提取腳本中的串口配置數據
要正確地進(jìn)行Lua和C的交互過(guò)程,首先必須對Lua和C交互時(shí)所采用虛擬棧的作用和操作有比較深入的了解。在Lua和C的交互中,它們彼此之間函數參數以及返回值都將由該棧來(lái)負責傳遞。Lua和C在棧的操作方式上稍有不同,在Lua中采用嚴格的LIFO方式,而C則還可以通過(guò)索引的方式進(jìn)行。以3個(gè)參數為例,參數1首先入棧,參數2、3隨后順次入棧,Lua虛擬棧存儲結構及索引對應關(guān)系如圖3所示。

本文引用地址:http://dyxdggzs.com/article/155041.htm

e.JPG

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>