新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于Lua腳本語言的嵌入式UART通信方案設計

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

        作者: 時間:2012-05-03 來源:網絡 收藏

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

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

        本文引用地址:http://www.104case.com/article/155041.htm

        e.JPG

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


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 上栗县| 星子县| 大名县| 漠河县| 修水县| 汕尾市| 阜新市| 镇原县| 昭平县| 滦南县| 绥宁县| 岳池县| 布拖县| 岳普湖县| 安阳市| 郴州市| 邛崃市| 临桂县| 桑植县| 南通市| 图们市| 庆元县| 顺义区| 阜康市| 云安县| 紫金县| 望都县| 万源市| 太谷县| 同仁县| 青阳县| 尼勒克县| 泉州市| 天柱县| 星座| 潍坊市| 疏勒县| 金华市| 瓮安县| 鞍山市| 玉环县|