<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ò ) 收藏

內容可以看出,在此采用了一個(gè)中的循環(huán)結構對發(fā)送緩沖區進(jìn)行沒(méi)置,并返回設置的數據個(gè)數。其中,全局變量data是巾的表,類(lèi)似于數組,在此表示需要設置的緩沖區內容;ied.set_tx_buf()為在3.1節中提到的已注冊到虛擬機中的C函數庫中的一個(gè)函數。其參數port表示端口號,i-1表示緩沖區索引號,data[i]表示具體的數據內容。在應用中需要注意的是,在中,數組索引默認從1開(kāi)始,而不像C中從0開(kāi)始。另外,在C中定義set_tx_buf函數時(shí)并未設置參數,這主要是因為參數的提取必須借助于虛擬棧才能實(shí)現。在中調用時(shí),對其參數將按照從左到右的順序依次入棧,在C中要取出參數時(shí),按照其在棧中相應的索引號取出即可。存Lua中對每個(gè)函數的調用都有一個(gè)獨立的棧,因此,若以i取2時(shí)調用情況為例,在C函數set_tx_buf中看到的棧內容將如圖5所示。

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

i.JPG


從而在C程序中,只需要調用下面語(yǔ)句即可將該串口發(fā)送緩沖區中索引為1的內存區域沒(méi)置成0x22:
j.JPG
當在C程序中需對串口發(fā)送緩沖區進(jìn)行設置時(shí),將按如下方法調用該腳本函數:
lua_getglobal(L,“uart_p0_set_txBuf”);
lua pcall(L,0.1,0);
其中,函數lua_getglobal的參數“uart_p0_set_txBuf”為要調用的腳本函數名,函數lua_pcall的函數原型為:
l.JPG
因所調用的腳本函數uart_p0_set_txBuf沒(méi)有參數,有一個(gè)返回值,所以分別將nargs、nresults置為0、1,而錯誤處理函數暫不使用,故置為0。
對于腳本中的返回值,將在腳本函數調用結束時(shí),置于lua_pcall調用環(huán)境所在的虛擬棧的棧頂中,可由C程序根據索引取出。
經(jīng)以上過(guò)程,就完成了對串口發(fā)送緩沖區的內容設置,然后就可以通過(guò)串口芯片的驅動(dòng)程序將其發(fā)送到外圍設備。
在現場(chǎng)應用時(shí),只需根據不同外圍設備問(wèn)詢(xún)報文的要求來(lái)修改腳本中data數組以及p0_send_num變量的內容即可,而不用對裝置的C程序進(jìn)行任何修改。
3.4 通過(guò)Lua函數處理接收緩沖區數據
通過(guò)Lua和C的交互來(lái)對串口接收緩沖區數據的處理方法同發(fā)送緩沖區的處理基本相似。
當裝置通過(guò)串口驅動(dòng)程序將外圍設備發(fā)來(lái)的數據置入接收緩沖區后,在C函數中調用腳本函數:
lua_getglobal(L,“uart p0_del_rxBuf”);
lua pushnumber(L,size);
ret=lua_pcall(L,1.1,0);
其中,參數uart_p0_del_rxBuf為腳本中定義的緩沖區數據處理函數名,通過(guò)lua_pushnumber將接收數據的大小入棧,從而傳給Lua腳本函數,腳本函數的原型如下:
function uart_p0_del_rxBuf(rx_size)
在該函數中,可通過(guò)調用注冊的C函數get_rx_buf來(lái)獲取接收緩沖區中的內容:
data[i]=ied.get_rx_buf(port,index)
其中,data為腳本中類(lèi)似于數組的表類(lèi)型。port為串口芯片的端口號,index為緩沖區的索引號,在C程序中通過(guò)以下語(yǔ)句對腳本返回所取數據值:
p.JPG
可以看出,在腳本中也是借助于虛擬棧來(lái)獲取C程序的返回值。通過(guò)以上方法成功獲取了串口接收緩存區的內容后,就可根據具體的外圍設備在腳本中對其接收數據的正確性進(jìn)行判斷,如果判斷結果正確,則調用前面注冊的C函數uart_ok_del進(jìn)行相關(guān)業(yè)務(wù)處理。
ied.uart_ok_del(port)

結語(yǔ)
從本文提供的方案可以看出,從始至終,IED裝置的C應用程序在lua虛擬機與外圍設備之間,除了報文的透明傳輸功能外,并不負責具體數據業(yè)務(wù)的處理,這就使在C程序的設計中完全不需要考慮外圍設備所采用的串口數據格式,具體的數據內容都可放在腳本文件中進(jìn)行沒(méi)置和處理。在現場(chǎng)應用中,就可以達到僅修改Lua腳本文件就能完成IED裝置與不同的串口外圍設備之間的數據交互功能,從而實(shí)現對裝置串口規約的現場(chǎng)可配置化。

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

上一頁(yè) 1 2 3 4 下一頁(yè)

評論


相關(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>