哈工大VxWorks嵌入式作業(yè)_第1頁
哈工大VxWorks嵌入式作業(yè)_第2頁
哈工大VxWorks嵌入式作業(yè)_第3頁
哈工大VxWorks嵌入式作業(yè)_第4頁
哈工大VxWorks嵌入式作業(yè)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

VxWorks下串口收發(fā)程序設(shè)計1.引言VxWorks操作系統(tǒng)是美國溫瑞爾〔WindRiver〕公司于1983年設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng)〔RTOS〕,是嵌入式開發(fā)環(huán)境的關(guān)鍵組成局部。良好的持續(xù)開展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領(lǐng)域占據(jù)一席之地。VxWorks作為一個優(yōu)秀的操作系統(tǒng)實現(xiàn)了比其他實時操作系統(tǒng)更好的有效性、商用性、可裁減性以及互操作性,被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實時性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等。本文利用VxWorks進(jìn)行串口收發(fā)程序的設(shè)計,是VxWorks與外界進(jìn)行通信的根底操作。2.VxWorks系統(tǒng)結(jié)構(gòu)VxWorks由一個基于優(yōu)先級中斷驅(qū)動的多任務(wù)調(diào)度內(nèi)核和設(shè)備管理、文件管理、網(wǎng)絡(luò)擴(kuò)展及兼容POSIX協(xié)議的運行接口組成,通過二進(jìn)制信號量、互斥信號量、計數(shù)器信號量、管道、消息等支持任務(wù)間靈活通信。VxWorks采用類似Unix的進(jìn)程調(diào)度算法,但是考慮到其實時性,VxWorks采用段式或段頁式管理來實現(xiàn)訪問邏輯空間,一般不采用虛擬內(nèi)存,也即無缺頁中斷。專用BSP的編寫是實現(xiàn)系統(tǒng)移植的重點,BSP主要用來完成VxWorks對專用目標(biāo)板的支持。包括硬件初始化、中斷處理和產(chǎn)生、硬件時鐘管理、本地和總線內(nèi)存空間映射,同時也包含定制VxWorks映像,如圖1所示。它貫穿著硬件級,操作系統(tǒng)級,應(yīng)用程序級三層。按照操作系統(tǒng)相應(yīng)標(biāo)準(zhǔn)編寫對硬件的驅(qū)動,然后掛接于VxWorks的內(nèi)核中與VxWorks一起為應(yīng)用程序級提供效勞。圖表SEQ圖表\*ARABIC1VxWorks系統(tǒng)結(jié)構(gòu)圖3.VxWorks的串口收發(fā)程序根本原理VxWorks提供了一個快速靈活的與ANSIC兼容的I/O系統(tǒng),包括UNIX標(biāo)準(zhǔn)的BasicI/O〔creat(),remove(),open(),close(),read(),write(),andioctl()〕,BufferI/O(fopen(),fclose(),fread(),fwrite(),getc(),putc())以及POSIX標(biāo)準(zhǔn)的異步I/O。VxWorks包括以下驅(qū)動程序:網(wǎng)絡(luò)驅(qū)動、管道驅(qū)動、RAM盤驅(qū)動、SCSI驅(qū)動、鍵盤驅(qū)動、顯示驅(qū)動、磁盤驅(qū)動、并口驅(qū)動等。串口在嵌入式系統(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)用程序要使用串口進(jìn)行通信,必須在使用之前向操作系統(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)的細(xì)節(jié)。在串口通信軟件的設(shè)計中,當(dāng)串口初始化完成后,在使用之前利用open()翻開相應(yīng)串口,然后進(jìn)行配置。VxWorks提供終端和偽終端設(shè)備驅(qū)動。Tty驅(qū)動針對實終端,pty針對仿真終端的程序。Tty設(shè)備有兩種操作模式:raw模式和line模式。在raw模式下,每個剛從設(shè)備輸入的字符對讀者都是有效的;在line模式下所有輸入字符被存儲,直到NEWLINE字符輸入。設(shè)備選項字使用帶FIOSETOPTIONS功能的ioctl()程序來設(shè)置。配置完成后,依據(jù)串口翻開時的讀寫標(biāo)志,調(diào)用函數(shù)write()、read()對串口進(jìn)行只讀操作、只寫操作或同時進(jìn)行讀寫操作。為提高數(shù)據(jù)接收的實時性,可采用中斷方式,利用VxWorks提供的select函數(shù)的事件觸發(fā)機(jī)制,將讀串口的任務(wù)阻塞使其一直等待數(shù)據(jù),當(dāng)有數(shù)據(jù)來到的時候該任務(wù)會立刻自動響應(yīng),提高系統(tǒng)的實時性。4.環(huán)境設(shè)置環(huán)境配置的根本步驟如下:(1)修改通用配置文件\\Tornado\target\config\pc486\config.h。在config.h文件中參加以下宏定義:#defineINCLUDE_WDB#defineINCLUDE_WDB_TTY_TEST#undefWDB_COMM_TYPE#defineWDB_COMM_TYPEWDB_COMM_SERIAL/*定義通信方式為串口聯(lián)結(jié)*/#defineWDB_TTY_CHANNEL1/*通道號*/#defineWDB_TTY_BAUD9600/*串口速率,可設(shè)置至38400*/#defineWDB_TTY_DEV_NAME"tyCo/1"#defineCONSOLE_TTY0#defineDEFAULT_BOOT_LINE"fd=0,0(0,0)hostname:/fd0/vxWorks\h=主機(jī)ipe=目標(biāo)機(jī)ipu=主機(jī)上的登錄用戶名"(2)在Tornado集成環(huán)境中執(zhí)行菜單命令Project>MakePC486>CommonTargets>clean刪除以前生成的文件,執(zhí)行菜單命令Project>MakePC486>BootRomTargets>bootrom_uncmp,編譯鏈接生成bootrom_uncmp。再選擇VxWorksTarget,編譯生成vxworks;(3)拷貝\\Tornado\target\config\pc486\bootrom_uncmp至\\Tornado\host\bin下(4)重命名文件bootrom_uncmp為bootrom;(5)準(zhǔn)備一張已格式化的空盤插入軟驅(qū);(6)在目錄\\Tornado\host\bin下執(zhí)行命令mkboota:bootrom;(7)拷貝\\Tornado\target\config\pc486\VxWorks至軟盤;(8)將系統(tǒng)制作盤插入目標(biāo)機(jī)軟驅(qū),載入VxWorks系統(tǒng)。5.程序設(shè)計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"#include"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.h"5.2翻開串口intopen_com1(void)//翻開串口1函數(shù){intsfd;//串口設(shè)備文件描述符sfd=open("/tyCo/0",0_RDWR,0);//翻開串口并返回串口設(shè)備文件描述符if(sfd==ERROR)//如果不能翻開串口1那么打印出錯信息printf("Youcan'topenportcom1!");}5.3串口發(fā)送函數(shù)inttty_send(intsnum){intfd; intbytes_out; charbuff[]="$GGCX,090821,013149,31.93083997,118.78616720,000029.8,072.069,-00.068,*24\r\n"; chartyName[20]; charconsoleName[20]; sprintf(tyName,"%s%d","/tyCo/",snum); strcpy(consoleName,tyName); fd=open(consoleName,O_RDWR,0); ioctl(fd,FIOSETOPTIONS,OPT_RAW); ioctl(fd,FIOFLUSH,0); setBaud(fd,115200); setOption(fd,8,1,0); while(1) {bytes_out=write(fd,buff,strlen(buff)); taskDelay(10);} close(fd); return1;}5.4串口接收數(shù)據(jù)inttty_receive(intrnum){ inti,j; intfd,width; intbytes_in; charbuf[100]; structfd_setreadFds; chartyName[20]; charconsoleName[20]; sprintf(tyName,"%s%d","/tyCo/",rnum); strcpy(consoleName,tyName); fd=open(consoleName,O_RDWR|O_NONBLOCK,0); ioctl(fd,FIOSETOPTIONS,OPT_RAW); ioctl(fd,FIOFLUSH,0); setBaud(fd,115200); 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) returnERROR; if(FD_ISSET(fd,&readFds)) { while((bytes_in=read(fd,buf,100))>0) { for(i=0;i<bytes_in;i++) printf("%c",buf[i]); } } } close(fd); return1;6.結(jié)論本文簡單介紹了VxWorks的組成結(jié)構(gòu)與VxWork編寫關(guān)于串行設(shè)備驅(qū)動程序的一般模式,詳細(xì)給出了設(shè)計步驟與局部代碼。包括設(shè)備的初始化編程,入口函數(shù)的編程以及程序?qū)崿F(xiàn)的編碼等。由于課堂上老師對嵌入式系統(tǒng)的許多程序都進(jìn)行了演示與運行,但真正自己動手用VXworks去加載程序時,才發(fā)現(xiàn)完整的運行一個程序并非易事。主要的原因是之前沒有使用過這樣的軟件,關(guān)于它的使用教程也沒有像C或者M(jìn)athlab那樣在網(wǎng)上很容易找到,周圍的同學(xué)對這個軟件也不是很熟悉。后來花了一定

溫馨提示

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

最新文檔

評論

0/150

提交評論