哈工大VxWorks嵌入式作業(yè)_第1頁
哈工大VxWorks嵌入式作業(yè)_第2頁
哈工大VxWorks嵌入式作業(yè)_第3頁
哈工大VxWorks嵌入式作業(yè)_第4頁
哈工大VxWorks嵌入式作業(yè)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、VxWorks下串口收發(fā)程序設計1引言VxWorks操作系統(tǒng)是美國溫瑞爾(WindRiver)公司于1983年設計開發(fā)的一種嵌入式實時操作系統(tǒng)(RTOS),是嵌入式開發(fā)環(huán)境的關鍵組成部分。良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領域占據(jù)一席之地。VxWorks作為一個優(yōu)秀的操作系統(tǒng)實現(xiàn)了比其他實時操作系統(tǒng)更好的有效性、商用性、可裁減性以及互操作性,被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛(wèi)星通訊、軍事演習、彈道制導、飛機導航等。本文利用VxWorks進行串口收發(fā)程序的設計,是VxWorks與外界進行通信的基礎操作。2. V

2、xWorks系統(tǒng)結構VxWorks由一個基于優(yōu)先級中斷驅(qū)動的多任務調(diào)度內(nèi)核和設備管理、文件管理、網(wǎng)絡擴展及兼容POSIX協(xié)議的運行接口組成,通過二進制信號量、互斥信號量、計數(shù)器信號量、管道、消息等支持任務間靈活通信。VxWorks采用類似Unix的進程調(diào)度算法,但是考慮到其實時性,VxWorks采用段式或段頁式管理來實現(xiàn)訪問邏輯空間,一般不采用虛擬內(nèi)存,也即無缺頁中斷。專用BSP的編寫是實現(xiàn)系統(tǒng)移植的重點,BSP主要用來完成VxWorks對專用目標板的支持。包括硬件初始化、中斷處理和產(chǎn)生、硬件時鐘管理、本地和總線內(nèi)存空間映射,同時也包含定制VxWorks映像,如圖1所示。它貫穿著硬件級,操作系

3、統(tǒng)級,應用程序級三層。按照操作系統(tǒng)相應規(guī)范編寫對硬件的驅(qū)動,然后掛接于VxWorks的內(nèi)核中與VxWorks一起為應用程序級提供服務。圖表 1 VxWorks系統(tǒng)結構圖3. VxWorks的串口收發(fā)程序基本原理VxWorks 提供了一個快速靈活的與 ANSI C 兼容的 I/O 系統(tǒng),包括 UNIX 標準的Basic I/O(creat(),remove(),open(),close(),read(),write(),and ioctl()),Buffer I/O (fopen(),fclose(),fread(),fwrite(),getc(),putc() 以及POSIX 標準的異步 I/

4、O。VxWorks 包括以下驅(qū)動程序:網(wǎng)絡驅(qū)動、管道驅(qū)動、RAM盤驅(qū)動、SCSI驅(qū)動、鍵盤驅(qū)動、顯示驅(qū)動、磁盤驅(qū)動、并口驅(qū)動等 。串口在嵌入式系統(tǒng)當中是一類重要的數(shù)據(jù)通信接口, 其本質(zhì)功能是作CPU 和串行設備間的編碼轉換器。當數(shù)據(jù)從CPU 經(jīng)過串行端口發(fā)送出去時, 字節(jié)數(shù)據(jù)轉換為串行的位; 在接收數(shù)據(jù)時, 串行的位被轉換為字節(jié)數(shù)據(jù)。應用程序要使用串口進行通信, 必須在使用之前向操作系統(tǒng)提出資源申請要求(打開串口), 通信完成后必須釋放資源(關閉串口)。串口通信的優(yōu)點是開發(fā)簡單, 在傳輸數(shù)據(jù)量不大、要求速度不高而傳輸距離較大的通信場合得到廣泛應用。在VxWorks 中, 將I/O 系統(tǒng)設計成為

5、任何類型的設備提供一個簡單、統(tǒng)一、獨立于設備的接口, 任何對于串口的操作都可以視為對一個文件的操作, 而不必了解串口設備或程序驅(qū)動實現(xiàn)的細節(jié)。在串口通信軟件的設計中, 當串口初始化完成后, 在使用之前利用open()打開相應串口, 然后進行配置。VxWorks提供終端和偽終端設備驅(qū)動。Tty驅(qū)動針對實終端,pty針對仿真終端的程序。Tty設備有兩種操作模式:raw模式和line模式。在raw模式下,每個剛從設備輸入的字符對讀者都是有效的;在line模式下所有輸入字符被存儲,直到NEWLINE字符輸入。設備選項字使用帶FIOSETOPTIONS功能的ioctl()程序來設置。配置完成后,依據(jù)串口

6、打開時的讀寫標志,調(diào)用函數(shù)write()、read()對串口進行只讀操作、只寫操作或同時進行讀寫操作。為提高數(shù)據(jù)接收的實時性, 可采用中斷方式,利用VxWorks 提供的select 函數(shù)的事件觸發(fā)機制, 將讀串口的任務阻塞使其一直等待數(shù)據(jù),當有數(shù)據(jù)來到的時候該任務會立刻自動響應,提高系統(tǒng)的實時性。4. 環(huán)境設置環(huán)境配置的基本步驟如下: (1) 修改通用配置文件Tornadotargetconfigpc486config.h。在config.h 文件中加入以下宏定義:#define INCLUDE_WDB#define INCLUDE_WDB_TTY_TEST#undef WDB_COMM_T

7、YPE#define WDB_COMM_TYPE WDB_COMM_SERIAL/* 定義通信方式為串口聯(lián)結*/#define WDB_TTY_CHANNEL 1 /* 通道號*/#define WDB_TTY_BAUD 9600 /* 串口速率, 可設置至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=目標機ip u=主機上的登錄用戶名(2) 在Tornado 集成環(huán)境中執(zhí)行菜

8、單命令Project Make PC486 Common Targets clean 刪除以前生成的文件, 執(zhí)行菜單命令Project Make PC486 Boot Rom Targets bootrom_uncmp ,編譯鏈接生成bootrom_uncmp 。再選擇VxWorks Target,編譯生成vxworks;(3) 拷貝Tornadotargetconfigpc486bootrom_uncmp至Tornadohostbin 下(4) 重命名文件bootrom_uncmp 為bootrom;(5) 準備一張已格式化的空盤插入軟驅(qū);(6) 在目錄Tornadohostbin 下執(zhí)行命

9、令mkboota: bootrom;(7) 拷貝Tornadotargetconfigpc486VxWorks 至軟盤;(8) 將系統(tǒng)制作盤插入目標機軟驅(qū),載入VxWorks 系統(tǒng)。5. 程序設計5.1 在程序中載入頭文件#include vxWorks.h#include sioLib.h#include intLib.h#include taskLib.h#include errno.h#include time.h#include timers.h#include stdio.h#include stat.h#include cacheLib.h#include string.h#inc

10、lude iv.h#include semLib.h#include intLib.h#include logLib.h#include ioLib.h#include drv/serial/pcConsole.h#include sioLib.h#include rtc.h#include s3c2410.h5.2打開串口int open_com1(void) /打開串口1 函數(shù) int sfd; /串口設備文件描述符sfd =open(/tyCo/0, 0_RDWR, 0); /打開串口并返回串口設備文件描述符if(sfd =ERROR) /如果不能打開串口1 則打印出錯信息printf(

11、You can t open port com1 ! );5.3串口發(fā)送函數(shù)int tty_send(int snum) int fd;int bytes_out;char buff=$GGCX,31.,118.,.8,072.069,-00.068,*24rn;char tyName20;char consoleName20;sprintf(tyName,%s%d,/tyCo/,snum);strcpy(consoleName,tyName);fd = open(consoleName,O_RDWR,0);ioctl(fd,FIOSETOPTIONS,OPT_RAW);ioctl(fd, F

12、IOFLUSH,0); setBaud(fd,); setOption(fd,8,1,0);while(1)bytes_out = write(fd,buff,strlen(buff);taskDelay(10);close(fd);return 1; 5.4 串口接收數(shù)據(jù)int tty_receive(int rnum)int i,j;int fd,width;int bytes_in;char buf100;struct fd_set readFds;char tyName20;char consoleName20;sprintf(tyName,%s%d,/tyCo/,rnum);strc

13、py(consoleName,tyName);fd = open(consoleName,O_RDWR|O_NONBLOCK,0);ioctl(fd,FIOSETOPTIONS,OPT_RAW);ioctl(fd, FIOFLUSH,0); setBaud(fd,); setOption(fd,8,1,0); while(1) FD_ZERO(&readFds); FD_SET(fd,&readFds); width=fd+1; if(select(width,&readFds,NULL,NULL,NULL)=ERROR) return ERROR; if(FD_ISSET(fd,&readF

14、ds) while(bytes_in = read(fd,buf,100)0) for(i=0;ibytes_in;i+) printf(%c,bufi); close(fd); return 1; 6. 結論本文簡單介紹了VxWorks的組成結構與VxWork編寫關于串行設備驅(qū)動程序的一般模式,詳細給出了設計步驟與部分代碼。包括設備的初始化編程,入口函數(shù)的編程以及程序?qū)崿F(xiàn)的編碼等。由于課堂上老師對嵌入式系統(tǒng)的許多程序都進行了演示與運行,但真正自己動手用VXworks去加載程序時,才發(fā)現(xiàn)完整的運行一個程序并非易事。主要的原因是之前沒有使用過這樣的軟件,關于它的使用教程也沒有像C或者Mathlab那樣在網(wǎng)上很容易找到,周圍的同學對這個軟件也不是很熟悉。后來花了一定的時間在網(wǎng)上找到了相關的資料之后,運

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論