1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      基于Vxworks實時操作系統(tǒng)的串口通信程序設(shè)計與實現(xiàn)

      更新時間: 2007-06-08 11:09:55來源: 粵嵌教育瀏覽量:899

        摘要:結(jié)合嵌入式實時操作系統(tǒng)VxWorks實現(xiàn)風(fēng)洞測控系統(tǒng)的實際應(yīng)用,以其中的串口通信為例,討論了在VxWorks下實現(xiàn)串口通信的關(guān)鍵技術(shù),給出了基本原理、環(huán)境配置和程序示例。

        關(guān)鍵詞:VxWorks; 實時操作系統(tǒng); 嵌入式操作系統(tǒng);串行通信

        [Abstract] Combining with the application of wind tunnel measure and control system with embedded real-time operating system VxWorks , with the serial communication in   it as an example ,the key techniques about realization of the serial communication in VxWorks are discussed. Communication mechanism, environment configure and corresponding program examples are provided.

        [Key words] VxWorks;RTOS;embedded operating system; Serial Communication

        1前言

        目前市場上比較的實時操作系統(tǒng)有:VxWorks、PSOS、Nucleus、QNX、VRTX、Windows   CE、Palm   0S、Lynx0S等。   其中,VxWorks是一個具有微內(nèi)核、可裁剪的高性能強實時操作系統(tǒng),在實時操作系統(tǒng)市場上處于地位。它以其良好的可靠性和卓越的實時性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實時性要求極高的領(lǐng)域中,如衛(wèi)星通訊、彈道制導(dǎo)、飛機導(dǎo)航等。在美國的 F-16戰(zhàn)斗機、B-2 隱形轟炸機和愛國者導(dǎo)彈上,甚至火星探測器上都使用了VxWorks實時操作系統(tǒng)。在嵌入式實時操作系統(tǒng)中使用串口通信,不僅可擴展嵌入式設(shè)備通信能力,而且可擴大其應(yīng)用范圍。

        2 VxWorks簡介

        VxWorks是由wRS(wind River Systems,Inc.)公司開發(fā)的一套具有微內(nèi)核、高性能、可伸縮的實時操作系統(tǒng),支持廣泛的網(wǎng)絡(luò)通信協(xié)議,并能夠根據(jù)用戶的需求進行組合,其開放式的結(jié)構(gòu)和對工業(yè)標(biāo)準(zhǔn)的支持使開發(fā)者只需做少的工作即可設(shè)計出有效的適合于不同用戶要求的系統(tǒng)。除了性能出眾的操作系統(tǒng)之外,wRS公司還提供了的實時操作系統(tǒng)開發(fā)工具Tornado。Tornado由三個高度集成的部分組成:Tornado工具,一整套強有力的交叉開發(fā)工具;VxWorks運行系統(tǒng),是運行在目標(biāo)機上的高性能、可裁剪的實時操作系統(tǒng);連接目標(biāo)機和宿主機的通信選項,加以太網(wǎng)、串行線路、在線仿真等。Tornado能夠支持Windows、Unix等流行的工作平臺和PowerPC、X86、ARM等幾乎所有的目標(biāo)處理器,所提供的工具可用于所有目標(biāo)機,并具有兩種調(diào)試模式(系統(tǒng)模式和任務(wù)模式)。除了基本的功能和開發(fā)工具外,Tornado還具有先進的系列網(wǎng)絡(luò)產(chǎn)品,極大地擴展了Tornado的網(wǎng)絡(luò)特性,并增強了嵌人式微處理器的網(wǎng)絡(luò)特性。[1] 

        3 串口通信基本原理

        串口在嵌入式系統(tǒng)當(dāng)中是一類重要的數(shù)據(jù)通信接口,其本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。當(dāng)數(shù)據(jù)從CPU經(jīng)過串行端口發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位;在接收數(shù)據(jù)時,串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。應(yīng)用程序要使用串口進行通信,必須在使用之前向操作系統(tǒng)提出資源申請要求(打開串口),通信完成后必須釋放資源(關(guān)閉串口)。

        串口通信的優(yōu)點是開發(fā)簡單,在傳輸數(shù)據(jù)量不大、要求速度不高而傳輸距離較大的通信場合得到廣泛應(yīng)用。

        在VxWorks中,將I/O系統(tǒng)設(shè)計成為任何類型的設(shè)備提供一個簡單、統(tǒng)一、獨立于設(shè)備的接口,任何對于串口的操作都可以視為對一個文件的操作,而不必了解串口設(shè)備或程序驅(qū)動實現(xiàn)的細節(jié)。在串口通信軟件的設(shè)計中,當(dāng)串口初始化完成后,在使用之前利用open()打開相應(yīng)串口,然后進行配置。

        VxWorks提供終端和偽終端設(shè)備驅(qū)動。Tty驅(qū)動針對實終端;pty針對仿真終端的程序。Tty設(shè)備有兩種操作模式:raw模式和line模式。在raw模式下,每個剛從設(shè)備輸入的字符對讀者都是有效的;在line模式下所有輸入字符被存儲,直到NEWLINE字符輸入。設(shè)備選項字使用帶FIOSETOPTIONS 功能的ioctl()程序來設(shè)置。[2]

        配置完成后,依據(jù)串口打開時的讀寫標(biāo)志,調(diào)用函數(shù)write()、read()對串口進行只讀操作、只寫操作或同時進行讀寫操作。

        為提高數(shù)據(jù)接收的實時性,可采用中斷方式,利用VxWorks提供的select函數(shù)的事件觸發(fā)機制,將讀串口的任務(wù)阻塞使其一直等待數(shù)據(jù),當(dāng)有數(shù)據(jù)來到的時候該任務(wù)會立刻自動響應(yīng),提高系統(tǒng)的實時性。

        4 環(huán)境配置

        在本實時應(yīng)用系統(tǒng)中采用486機作為目標(biāo)機,串口通信時目標(biāo)機VxWorks系統(tǒng)啟動盤的制作步驟:

        (1) 修改通用配置文件\\Tornado\target\config\pc486\config.h。在config.h文件中加入以下宏定義:

        #define INCLUDE_WDB

        #define INCLUDE_WDB_TTY_TEST

        #undef WDB_COMM_TYPE

        #define WDB_COMM_TYPE WDB_COMM_SERIAL /*定義通信方式為串口聯(lián)結(jié)*/

        #define WDB_TTY_CHANNEL 1 /*通道號*/

        #define WDB_TTY_BAUD 9600 /*串口速率,可設(shè)置至38400*/

        #define WDB_TTY_DEV_NAME "tyCo/1"

        #define CONSOLE_TTY 0

        #define DEFAULT_BOOT_LINE "fd=0,0(0,0)hostname:/fd0/vxWorks \ h=主機

        ip e=目標(biāo)機ip u=主機上的登錄用戶名"

        (2) 在Tornado集成環(huán)境中執(zhí)行菜單命令Project > Make PC486 > Common Targets > clean刪除以前生成的文件,執(zhí)行菜單命令Project > Make PC486 > Boot Rom Targets > bootrom_uncmp編譯鏈接生成bootrom_uncmp ;再選擇VxWorks Target,編譯生成vxworks;

        (3) 拷貝\\Tornado\target\config\pc486\bootrom_uncmp\\Tornado\host\bin

        (4) 重命名文件bootrom_uncmp為bootrom;

        (5) 準(zhǔn)備一張已格式化的空盤插入軟驅(qū);

        (6) 在目錄\\Tornado\host\bin下執(zhí)行命令 mkboot a: bootrom;

        (7)拷貝\\Tornado\target\config\pc486\VxWorks至軟盤;

        (8) 將系統(tǒng)制作盤插入目標(biāo)機軟驅(qū),加電啟動目標(biāo)機即載入VxWorkst系統(tǒng)。[3]

        5 程序示例

        5.1 在程序中加入下列頭文件

        #include <vxWorks.h>

        #include "strLib.h"

        #include <string.h>

        #include <sioLib.h>

        #include <ioLib.h>

        #include <stdio.h>

        #include <ioctl.h>

        #include <selectLib.h>

        #include "types/vxTypesOld.h"

        5.2 打開串口

        int open_com1(void) //打開串口1函數(shù)

        {     int sfd;//串口設(shè)備文件描述符

        sfd =open(”/tyCo/0”,0_RDWR,0);//打開串口并返回串口設(shè)備文件描述符

        if(sfd ==ERROR)   //如果不能打開串口1則打印出錯信息

        printf("You can’t open port com1 !");

        }

        5.3 配置串口

        int config_com1(void)                                //串口1配置函數(shù)

        { ioctl(sfd,FIOSETOPTIONS,OPT_LINE);   //設(shè)置串口工作模式為行模式:LINE_MODE

        ioctl(sfd,FIOBAUDRATE,9600);         //設(shè)置串口波特率為9600bps

        ioctl(sfd,FIOFLUSH,0);                                  //清空輸入輸出緩沖

        ioctl(sfd,SIO_HW_OPTS_SET,CS8|STOPB|PARENB|PARODD);

        //設(shè)置 8 位數(shù)據(jù)位,2位停止位,帶校驗位,奇校驗

        }

        5.4 串口接收數(shù)據(jù)

        int accept _com1(void) //從串口1接收數(shù)據(jù)函數(shù)

        {   while(1)

        {   char * accept _buf;

        FD_ZERO(&fds_data);//位碼置零 

        FD_SET(sfd,&fds_data);//初始化位碼

        width=sfd +1; 

        //任務(wù)阻塞等待讀串口準(zhǔn)備完畢;

        if(select(width,&fds_data,NULL,NULL,NULL)==ERROR)

        return(ERROR);

        read(sfd, accept _buf,sizeof(accept _buf));   //從串口讀字符

        printf("accept message is : %s \n\n", accept _buf);    //輸出接收到的信息

        }

        }

        5.5 串口發(fā)送數(shù)據(jù)

        int send_com1(void) //向串口1發(fā)送數(shù)據(jù)函數(shù)

         {               char *send_buf =" Data had accept!";   //待發(fā)送數(shù)據(jù)

        //任務(wù)阻塞等待寫串口準(zhǔn)備完畢

        if(select(width,NULL,&data_fds,NULL,NULL==ERROR)

        return(ERROR) ;

        if(FD_ISSET(sfd,&fds_data))   //檢查串口準(zhǔn)備好就向串口寫數(shù)據(jù)

        write(sfd,send_buf,sizeof(send_buf)) ;

        }

        5.6 關(guān)閉串口

        close(sfd);

        6 結(jié)束語

        RS-232串口通信雖速率不高,但RS-422標(biāo)準(zhǔn)串行口通信則采用了雙線傳輸,大大增加了抗共模干擾的能力,數(shù)據(jù)傳輸速度可以達到10Mb/s,這對于遠程數(shù)據(jù)交換具有極大的優(yōu)勢。

        本文描述了在實時操作系統(tǒng)VxWorks中利用串口實現(xiàn)數(shù)據(jù)通信的方法,并給出了示例程序,目前已經(jīng)在我們開發(fā)的風(fēng)洞測控系統(tǒng)中獲得了應(yīng)用。該方法可將其串口通信可適用于工業(yè)控制等多方面,具有廣泛的適應(yīng)性。在嵌入式實時操作系統(tǒng)中使用串口通信,不僅可擴展嵌入式設(shè)備通信能力,而且可擴大其的應(yīng)用范圍。

        參考文獻:

        1孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)vxworks及其開發(fā)環(huán)境Tornodo[M].北京:中國電力出版社,2002.01

        2 陳智育,溫彥軍,陳琪編著VxWorks程序開發(fā)實踐. 北京:人民郵電出版社,2004.05

        3李方敏編著VxWorks程序設(shè)計. 北京:清華大學(xué)出版社,2004.05

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 欧美日韩精品久久久久免费看 | 亚洲成a人片在线高速观看 最新国产精品拍自在线播放 | 中文字幕在线人成视频欧美 | 精品成年人在线观看 | 日本在线中文字幕四区 | 永久久精品一级AV高清免费看 |