新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于uC/OS的嵌入式系統通信接口設計

        基于uC/OS的嵌入式系統通信接口設計

        作者: 時間:2011-07-15 來源:網絡 收藏

        1 引言

        隨著微電子技術的不斷創新和發展,已經廣泛滲透到科學和技術的各個領域,如:工程設計、數碼產品、國防軍事、自動化控制領域。是指將應用程序、操作系統與計算機硬件集成在一起的系統。它以應用為中心、以計算機技術為基礎,而且軟硬件可以裁剪,因而是能滿足應用系統對功能、可靠性、成本、體積和功耗的嚴格要求的專用計算機系統。

        常用的主機與嵌入式外設的有RS232、USB、1394及10/100M以太網等接口。RS232接口被廣泛用于不同速度設備與主機通信,有使用廣泛,驅動程序豐富,可靠性好等優點。

        本文以一個已開發成功的手持嵌入式儀器的RS232作為實例,詳細說明了上位機和下位機通信程序的開發原理和過程,對類似的開發有很大的借鑒意義。

        2 嵌入式通信系統結構

        嵌入式處理器有許多種流行的處理器核,本文采用Piliphs公司的LPC2210,它是基于一個支持實時仿真和跟蹤的16/32位ARM7TDMI-S CPU。對代碼規模有嚴格控制的應用可使用16位Thumb模式將代碼規模降低超過30%,而性能的損失卻很小。

        由于LPC2210的144腳封裝、極低的功耗、多個32位定時器、8路10位ADC、PWM輸出以及多達9個外部中斷使它們特別適用于工業控制、醫療系統、訪問控制和電子收款機(P)。通過配置總線,LPC2210最多可提供76個GPIO。由于內置了寬范圍的串行LPC2210也非常適合于通信網關、協議轉換器、嵌入式軟件調制解調器以及其它各種類型的應用。更詳細的資料見參考文獻[1]

        500)this.style.width=500;" border=0>

        3、嵌入式實時操作系統μC/-II的移植

        對于大多數手持嵌入式儀器而言,采用公開源碼的操作系統μC/-II是最好的選擇,μC/OS-II是一個完整、可移植、可固化及可裁減占先實時多任務內核。代碼簡潔經典,可靠性高。

        μC/OS-II可以大致分為內核、任務處理、時間處理、任務同步與通信、與CPU的接口等五部分。內核(OSCore.c)是操作系統的處理核心,包括操作系統初始化、系統運行、中斷處理、時鐘節拍、任務調度和事件處理等多任務。任務處理部分(OSTask.c)是與任務操作密切相關的,包括任務的建立、刪除、掛起、恢復等。時鐘部分(OSTime.c)定義μC/OS-II的最小時鐘單位是Timetick(時鐘節拍)。任務同步和通信部分包括信號郵箱、郵箱隊列和時間 標志等部分,主要用于任務間的互相聯系和對臨界資源的訪問。與CPU接口部分是指μC/OS-II針對所使用的CPU的移植部分,主要包括中斷級任務切換的底層實現、任務級任務切換的底層實現、時鐘節拍的產生和處理、中斷和相關處理部分等內容。

        μC/OS-II除了良好的穩定性和安全性以外,很重要的特點就是對多任務管理的優異表現。μC/OS-II可以管理多達64個任務。除了8個μC/OS-II自用的任務以外,用戶的應用程序最多可有56個任務。用戶可以通過系統提供的任務結構來自行創立任務。更詳細的資料見參考文獻[4]。

        本實例就是通過創建通信任務來實現下位機的通信。代碼如下:

        /* 創建任務receive */

        OSTaskCreate(TaskUart0Recieve, (void *)0,TaskComStk[TaskStkLengh - 1], 20 );

        4 嵌入式RS232通信軟件設計

        軟件部分的設計包括上、下位機通信協議的制訂、上位機程序和單片機程序的編寫。其中上位機程序以Visual BASIC為開發工具,單片機程序用ANSIC C編寫。

        4.1 上位機與下位機通信協議的制訂

        上位機與下位機之間的數據交換必須遵循一定的通信協議,通信雙方才能按照該協議解析所傳輸的數據。就本設計而言,規定串口數據幀為1起始位,8個數據位,1個停止位,無奇偶校驗位,波特率為115200bps。

        為了實現大文件的傳送,我們將文件切成塊,以二進制方式傳送,這樣就使得任意大小的文件都可傳送,并且對系統的資源消耗最小。所制訂的通信協議為:

        幀頭為6個字節,具體規定如下:

        a.消息幀數據格式: 1 0 A B X X ,其中 10 為消息標識, AB表示文本長度, L=A*100+B, XX為配位字符,可以是任意值。

        b.控制幀數據格式: 0 1 A B M N ,其中 01為控制標識, AB為請求標識, MN為附加標識, 11表示請求對方接收文件, M表示描述字串中文件名子串的長度, N表示描述字串中文件大小子串的長度, 10通知對方放棄傳輸, 00通知文件傳輸完畢, 01請求對方發送數據, MN為10請求發送下一個, MN為00請求重發。

        c.數據幀數據格式: 0 0 A B M N, 其中 00 為數據標識,, AB表示數據長度,L=A*100+B, MN為校驗,M*100+N=A+B。

        前導幀使通信雙方保持同步,當PC機發送數據時,先將請求對方接收控制幀給下位機,收到應答幀后開始傳送;當PC機接收數據時,同樣地,先將請求對方發送控制幀給下位機,下位機收到幀后開始傳送。

        4.2 上位機軟件的編寫

        上位機是一個數據發送與接收的終端,上位機軟件的功能是:使計算機與能夠通過RS232接口標準收發數據。由于Visual BASIC是一種易學易用的面向對象的程序設計工具,因而采用它來編寫上位機程序。在上位機程序中要能夠對計算機串行口的硬件進行操作。本設計通過串行通信組件MsComm實現串行通信功能。在設計中還需要使用其它一些組件如CommandButton、TextBox、CommonDialog等來完成軟件界面的設計。界面如下:

        500)this.style.width=500;" border=0>

        4.3 下位機程序設計

        通信任務代碼如下:

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

        ** 函數名稱: TaskUart0Recieve

        ** 功能描述: μCOS-II的任務。從UART0接收并處理數據。通信調度程序!

        ** 輸 入: pdata 任務附加參數(指針)

        ** 輸 出: 無

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

        void TaskUart0Recieve(void *pdata)

        { uint8 bytTest[6];

        uint32 i, intTest;

        char strReceive[100];

        pdata = pdata; /* 避免編譯警告 */

        for (;;)

        { for (i = 0; i 6; i++)bytTest[i] = UART0Getch();/* 接收數據幀頭6Byte */

        if((bytTest[0] == 1)(bytTest[1] == 0)){ //收到信息幀

        intReceiveLen = bytTest[2] * 100 + bytTest[3];

        for (i = 0; i intReceiveLen ; i++)strReceive[i] = UART0Getch();

        }

        else if(( bytTest[0] == 0)( bytTest[1] == 1)) //收到控制幀

        {intTest = bytTest[2] * 100 + bytTest[3]; //控制幀分析

        switch(intTest)

        { case 101: //對方請求接收新文件

        intReceiveLen = bytTest[4];

        i = 0;

        do{strFileName[i++] = UART0Getch(); //'接收文件名信息

        }while (i intReceiveLen);

        intReceiveLen = bytTest[5];

        i = 0;

        do{strReceive[i++] = UART0Getch(); //接收文件長度信息

        }while (i intReceiveLen);

        intFileLenth = atol(strReceive); //文件長度

        FileReceiveManager(0); //receive

        break;

        case 100:break; //對方通知放棄傳輸

        case 1: //對方請求發送數據

        if( bytTest[4] == 1){ //請求發送數據包

        intDataNumber++;

        if (intDataNumber >= intDataCount)

        FileSendManager(4); //發送完成信號

        else

        FileSendManager(1); //發送新一幀數據

        }

        else

        FileSendManager(2); //重發上一幀數據

        break;

        case 0: //接收到傳輸完畢信號

        FileReceiveManager(4);

        break;

        }

        }

        else if( (bytTest[0] == 0)(bytTest[1] == 0)) //收到數據幀

        {intTest = bytTest[4] * 100 + bytTest[5];

        intReceiveLen = bytTest[2] * 100 + bytTest[3]; //數據字節數

        i = 0;

        do{ b_char[intFileReceiveLenth + i++ ] = UART0Getch();// 一幀數據

        }while (i intReceiveLen);

        if(intTest == (bytTest[2] + bytTest[3])) //根據校驗和作出響應

        FileReceiveManager(1); //校驗和正確請求發送新數據

        else

        FileReceiveManager(2); //校驗和錯請求重新發送

        }

        else if( (bytTest[0] == 1)(bytTest[1] == 1)) //發送數據到PC

        FileSendManager(0); //發數據

        }

        } /* 關于UART0Getch() 請參看參考文獻[2] */

        /* 文件發送管理 void FileSendManager(uint32 intFlag) 根據接收端的請求發送文件 */

        /*文件接收管理void FileReceiveManager(uint32 intFlag) 處理接收到的文件數據 */

        以上兩函數,限于篇幅,具體代碼略。

        5 結束語

        本文闡述了嵌入式系統的概念及嵌入式通信系統的結構。在設計中,作者充分地發揮了/OS-II的多任務管理功能,為實現通信功能而單獨分配了一個優先級較低的任務,使得下位機在與主機通信的同時,能繼續自己的工作,真正實現了實時多任務;此外,為了實現大文件的傳送,我們將文件切成塊,以二進制方式傳送,這樣就使得任意大小的文件都可傳送,并且對系統的資源消耗最小,對于嵌入式系統,這是很有意義的。最后,為了便于參考,給出了在一個裁剪的/OS-II操作系統環境下,實現系統與主機通信的下位機程序源碼。

        參考文獻:

        [1] LPC221016/32-bit ARM microcontroller with 10-bit ADC and external memory interface Rev. 01 — 09 February 2004 ,Philips Semiconductors

        [2] ARM嵌入式系統實驗教程(二),廣州周立功單片機技術有限公司,2005.

        [3] 劉承廣,常宇健,楊衛東,施博學. OS-II在車載GPS移動終端中的應用.  

          微計算機信息(旬刊).2005;21(2):103-104

        [4] Labrosse Jean J. 嵌入式實時操作系統μC/OS-Ⅱ. 邵貝貝譯. 第2版. 北京:北京航空航天大學出版社, 2003

        作者簡介

        羅永道,1969.9,男,漢,北京理工大學 光學工程專業 在讀博士

        EMail : lyd@bit.edu.cn

        羅 徽,1972.7,男,漢,昆明理工大學 計算機應用專業 在讀碩士;

        廖寧放,1960.1,男,漢,教授,博士生導師 北京理工大學

        通信地址:北京市海淀區中關村南大街5號 北京理工大學 信息科學技術學院顏色科學與工程國家專業實驗室 郵編:100081

        數字通信相關文章:數字通信原理


        通信相關文章:通信原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 呼玛县| 高安市| 贵阳市| 建瓯市| 沙坪坝区| 舟山市| 沛县| 基隆市| 绩溪县| 西平县| 军事| 封开县| 马公市| 原平市| 句容市| 旌德县| 大田县| 陈巴尔虎旗| 锡林浩特市| 分宜县| 巴林左旗| 清水河县| 南宫市| 高雄县| 天峨县| 宜昌市| 衢州市| 安西县| 安福县| 西盟| 犍为县| 房产| 平果县| 河北区| 上高县| 衡阳市| 玉溪市| 抚顺市| 湖南省| 左贡县| 托克逊县|