freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

vxworks驅(qū)動開發(fā)筆記(存儲版)

2025-07-29 09:24上一頁面

下一頁面
  

【正文】 理即可。int)該函數(shù)的作用是在工作在終端模式下時控制發(fā)送中斷寄存器做好準(zhǔn)備,使得在串口發(fā)送端空閑的時候發(fā)送中斷信號,這樣才能驅(qū)動中斷處理程序發(fā)送數(shù)據(jù)。intsysSerialHwInit2staticSTATUS串口驅(qū)動程序的動態(tài)分析串口驅(qū)動程序的動態(tài)分析主要分為兩部分,第一部分是串口驅(qū)動程序的初始化,第二部分則是串口驅(qū)動程序的應(yīng)用。l主要是函數(shù)庫中相關(guān)數(shù)據(jù)結(jié)構(gòu)的初始化,一般需要動態(tài)執(zhí)行和靜態(tài)指定相結(jié)合來實現(xiàn)。串口驅(qū)動程序的第二步初始化中斷中斷是計算機系統(tǒng)中很常用的一種工作方式。一旦出現(xiàn)就必須響應(yīng)。Interrupt這種方式可以提供重復(fù)的中斷申請直至IRn輸入變?yōu)榈碗娖綖橹?。完全嵌套模式和特殊嵌套模式在完全嵌套下,中斷?yōu)先級從0到7依次降低(0為最高優(yōu)先級)。在退出中斷處理程序時,一定要檢查該主片上的中斷對應(yīng)的從片是否只有一個中斷。在8259控制的中斷中具有最高的中斷優(yōu)先級,因此系統(tǒng)時鐘中斷將會屏蔽掉其他所有低優(yōu)先級的中斷。Mode)這種模式下,CPU會在IRQ0系統(tǒng)時鐘中斷服務(wù)執(zhí)行內(nèi)核任務(wù)前調(diào)用函數(shù)中斷驅(qū)動是一個比較特殊的驅(qū)動,這在于它不但和中斷控制芯片有關(guān)系,還和CPU的結(jié)構(gòu)有關(guān),因此它的接口被分成了兩部分,一部分是控制CPU的接口,一部分是控制終端控制芯片的接口。intConnectVOIDFUNCPTR它主要完成了三件事情,一是調(diào)用函數(shù)(*intHandlerCreate()這是是早期的toanado版本。這個函數(shù)的功能和intHandlerCreate是一樣的,不過已經(jīng)進行了一些改進。stubkksaveppe8*pushrr68*callrrEOI28rrppBOI13pp*kk[] = /*5.intDisable()關(guān)閉一個特定的中斷,這個函數(shù)由全局函數(shù)指針sysIntLvlDisableRtn定義,不過目前是沒有定義,如果用戶需要的話可以自己定義sysIntLvlDisableRtn。routine,1.這樣做的一個結(jié)果就是導(dǎo)致當(dāng)前被屏蔽的中斷ISR執(zhí)行的優(yōu)先級已經(jīng)降到了最低(注意是在其所在硬件中斷設(shè)備中的最低優(yōu)先級)。ISR中提前發(fā)送EOI命令(Early通過硬件連接到PIT(8253)通道0。當(dāng)從片上的一個中斷請求正在被響應(yīng)時,該從片上的其他更高優(yōu)先級的中斷都是可以被響應(yīng)的。ISR寄存器存放當(dāng)前正在服務(wù)的中斷申請,包括正在服務(wù)的高優(yōu)先級申請以及被打斷的低優(yōu)先級申請。1.N指令產(chǎn)生的中斷,如DOS中斷、ROMBIOS中斷。非屏蔽中斷主要用于處理某些影響系統(tǒng)正常運行的外部事件,如電源故障、RAM奇偶校驗錯等等。函數(shù)庫名稱初始化函數(shù)名稱說明ioLib無需初始化iosLibiosInitttyDrv無需初始化tyLibtyDevIniti8250Sioi8250HrdIniti8250InitChannelsysSerialsysSerialHwInitusrSerial無需初始化上面完整地分析了各個函數(shù)庫的初始化、硬件的初始化、以及數(shù)據(jù)結(jié)構(gòu)關(guān)系的構(gòu)建,vxWorks操作系統(tǒng)在初始化過程中通過這三個過程,完成了串口驅(qū)動的初始化以及安裝過程。第一步初始化建立的數(shù)據(jù)關(guān)系串口驅(qū)動程序的第二步初始化則是通過調(diào)用函數(shù)usrRoot函數(shù)來完成的。l如sysSerial函數(shù)庫。下面將從vxWorks操作系統(tǒng)中串口驅(qū)動程序的啟動和應(yīng)用過程對串口驅(qū)動程序進行動態(tài)的說明。如整數(shù)1234,函數(shù)將其轉(zhuǎn)換為字符串“1234”。vxWorks提供了一個對串口驅(qū)動進行配置的接口,即函數(shù)庫usrSerial。channel結(jié)構(gòu)變量i8250Chan[i]賦值,主要確定了各個寄存器地址、對應(yīng)的中斷向量、以及寄存器讀寫函數(shù)i8250Chan[i].outByte及i8250Chan[i].inByte;另一方面該函數(shù)調(diào)用函數(shù)i8250HrdInit給每個8250控制器進行初始化。但是還有一個任務(wù)沒有完成,就是中斷處理程序的安裝,這部分功能主要在函數(shù)庫sysSerial中完成。I8250_CHANi8250PTxCharpChan,12.11.MODEM輸入狀態(tài)改變中斷:讀取modem狀態(tài)寄存器即可清除中斷。10.arg9.PARODD。8.pChan,(pChan)設(shè)置RTS(請求發(fā)送)和TDR(數(shù)據(jù)準(zhǔn)備就緒)信號,表明做好收發(fā)準(zhǔn)備。I8250_CHANi8250Hup*()該函數(shù)的作用主要是為結(jié)構(gòu)I8250_CHAN中的函數(shù)指針getTxChar和putRcvChar執(zhí)行函數(shù)及其參數(shù)。**指針pSioChan從SIO_CHAIN的結(jié)構(gòu)變成了I8250_CHAN,從SIO_CHAN和I8250_CHAN的對比來看,I8250_CHAN結(jié)構(gòu)定義一開始就完全包含了SIO_CHAN結(jié)構(gòu)中的元素,因此在內(nèi)存中SIO_DRV_FUNCS函數(shù)對應(yīng)的相對地址也都是完全一樣的,因此可以用SIO_CHAN結(jié)構(gòu)指針指向I8250_CHAN結(jié)構(gòu)變量而不會出現(xiàn)混亂,這里依然采取了多態(tài)的思想,不過將I8250_CHAN結(jié)構(gòu)定義成下列格式可以使多態(tài)的概念更加清晰。與函數(shù)pTyDevtxStartup的區(qū)別在于tyTxStartup在調(diào)用pTyDevtxStartup之前需要檢查發(fā)送端口是否正在發(fā)送數(shù)據(jù),如果正在發(fā)送則不再調(diào)用pTyDevtxStartup。voidxoffvoidxoffdevice接收到字符后有一些細(xì)節(jié)的處理,這里不做太多的描述。;l說明下次會發(fā)送字符39。說明下一個要發(fā)送的字符為39。*pCharSTATUS注意在寫入前take二進制信號量wrtSyncSem確保有足夠的空間,寫完后檢查是否有空間,如果有空間則需要give二進制信號量wrtSyncSem,方便其他任務(wù)寫入。FASTFIOWBUFSET:重新設(shè)定發(fā)送環(huán)形緩沖區(qū)。FIORFLUSH:flush發(fā)送環(huán)形緩沖區(qū)。int12.voidvoidvoidvoidvoidFUNCPTRtyAbortFuncSet(注意flush結(jié)束之后要發(fā)送一個XON信號提示對方串口設(shè)備接收準(zhǔn)備好,并將變量flushingRdBuf復(fù)位為False。tyFlushRdpTyDev(二進制信號量wrtSyncSem則是確保在輸出環(huán)狀緩沖區(qū)中有足夠的空間資源,當(dāng)有了足夠的空間資源則函數(shù)tyITx釋放掉一定的空間時候信號量有效,而tyWrite只有在獲取了該信號量后才可以向輸出環(huán)狀緩沖區(qū)中寫入數(shù)據(jù)。int這在利用串口連接終端的情況下是十分有用的。直接調(diào)用底層的發(fā)送函數(shù)。LOCALvoid* pTyCoDev,(注意:每調(diào)用一次函數(shù)ttyOpen,該pTyCoDev,表明該設(shè)備打開的次數(shù)。TYCO_DEVttyOpen注意調(diào)用函數(shù)tyDevInit的最后一個參數(shù)ttyStartup,這個函數(shù)對底層操作函數(shù)(pSioChan)pDrvFuncstxStartup進行了封裝,也就是說只有函數(shù)ttyDrv直接與底層硬件操作函數(shù)向關(guān)聯(lián),而tyLib庫則完全被保護在了硬件無關(guān)層()。wrtBufSize2.ttyDrv庫與底層庫的函數(shù)接口首先分析ttyDrv函數(shù)庫,這個函數(shù)庫比較簡單,直接分析各個函數(shù)。對于串口這類設(shè)備來說,其驅(qū)動又有其獨有的要求,如收發(fā)緩存的管理,波特率的設(shè)置等等。17.(*buffer,15.intiosReadintiosCloseintint(*fileName,10.9.char*iosDevMatch)根據(jù)名字查找一個設(shè)備的DEV_HDR結(jié)構(gòu)。tothe這里可以參考iosDevAdd函數(shù),在iosDevAdd函數(shù)中參數(shù)pDevHdr也不是動態(tài)分配的。s*pDevHdr注意,在添加設(shè)備之前需要調(diào)用函數(shù)iosDevMatch檢查已經(jīng)添加的設(shè)備中是否包含相同的路徑名(文件名)如果有則說明該設(shè)備已經(jīng)加入了。DEV_HDRiosDevAddintiosDrvRemovepWrite,FUNCPTR(1.)判斷一個文件描述符是否是一個tty。fileintisatty(newFd)對VxWorks系統(tǒng)來說,并不是每個任務(wù)的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、錯誤輸出都是相同的,多數(shù)任務(wù)的標(biāo)準(zhǔn)輸入是鍵盤,標(biāo)準(zhǔn)輸出是顯示器等,但是對某些串口監(jiān)控的任務(wù)來說,可以把它的標(biāo)準(zhǔn)輸入設(shè)置為串口等等。這個函數(shù)的作用,就是設(shè)置這個數(shù)組中某個元素的文件描述符。void*devName* fullFileName中保存。DEV_HDR)該函數(shù)調(diào)用iosWrite函數(shù)將幾段分散的數(shù)據(jù)寫入到fd設(shè)備中。fd,*iov,int設(shè)定到當(dāng)前位置偏移offset的位置。SEEK_SETfd,argchar)調(diào)用函數(shù)iosRead實現(xiàn)讀操作,maxbytes為讀取的最大字節(jié)數(shù),讀取之后存放在buffer指定的地址空間,不過可能由于文件中字節(jié)數(shù)的限制等因素,實際讀取的字節(jié)數(shù)可能會小于maxbytes,因此需要在最終的返回值中返回實際讀取的字節(jié)數(shù)。int(int)charfdconstioCreateOrOpen以只寫方式打開lflags,intflagint1.函數(shù)庫ioLibioLib庫為上層提供了7個基本的函數(shù)接口:creat(),C不是面向?qū)ο笳Z言,沒有明確的類、繼承和多態(tài)的概念,但是可以靈活地使用C達(dá)到同樣的目的。ioLib庫與iosLib庫的內(nèi)部關(guān)系由于數(shù)組drvTable的每個元素drvTable[i]對應(yīng)一類設(shè)備,如果要使用某一類設(shè)備中的一個,如系統(tǒng)中兩個串口的一個,就必須指明是哪個串口。上述這7個通用接口,也就是串口驅(qū)動的一個最根本的需求,即通過這幾個函數(shù)就可以實現(xiàn)對串口控制芯片i8250的操作。*buffer,size_tread(intmode);打開文件,準(zhǔn)備訪問。remove(const。第一個階段是初始化階段,在初始化階段,驅(qū)動程序主要完成硬件以及設(shè)備驅(qū)動相關(guān)數(shù)據(jù)結(jié)構(gòu)的初始化。這兩個基本特征也正好決定了驅(qū)動程序的主體結(jié)構(gòu)。串口驅(qū)動原理串口因為調(diào)試簡單在許多數(shù)據(jù)量不大的場合依然較為流行,可以借助串口對目標(biāo)機中操作系統(tǒng)的運行情況進行監(jiān)控等等。charintSTATUSmaxbytes);從文件描述符fd指定的文件中讀取最多maxbytes個字節(jié),保存在buffer指定的位置。int對每類設(shè)備的操作函數(shù),系統(tǒng)創(chuàng)建了一個DRV_ENTRY結(jié)構(gòu)數(shù)組來描述,每個DRV_ENTRY結(jié)構(gòu)變量對應(yīng)一類設(shè)備的操作函數(shù),對某類設(shè)備的具體操作方式的設(shè)置則是通過設(shè)定DRV_ENTRY結(jié)構(gòu)變量中個函數(shù)指針來實現(xiàn)的;對于同一類的設(shè)備,系統(tǒng)為其從DEV_HDR派生了一個數(shù)據(jù)結(jié)構(gòu),而每個結(jié)構(gòu)變量則是對應(yīng)該類設(shè)備中的每一個具體的設(shè)備,不同的設(shè)備通過雙向鏈表鏈接在一起。close(),char*name,O_RDONLY(2)4.5.)調(diào)用函數(shù)iosDelete來刪除文件。(()修改文件名。(fd,size_twriteint10.function,(設(shè)定到相對于文件起始位置偏移offset位置。iov是一個數(shù)組指針,它指向一個iovec結(jié)構(gòu)數(shù)組,iovec結(jié)構(gòu)中的元素iov_base指定了數(shù)據(jù)保存起始位置地址,而iovt則指定了iov數(shù)組的元素個數(shù),因此總的讀出的字節(jié)數(shù)為各個數(shù)組元素中保存數(shù)據(jù)的字節(jié)數(shù)之和。(intioFullFileNameGetchar這個函數(shù)的作用就是根據(jù)參數(shù)pathName制定的路徑名,這個路徑名可以是相對(相對麼默認(rèn)的路徑ioDefPath)路徑名或者絕對路徑名。ppDevHdr指針返回,并將fullFileName設(shè)置為x/返回。)設(shè)定默認(rèn)路徑,并將其復(fù)制到全局變量ioDefPath中,注意name必須是一個絕對路徑,也就是說name指定的路徑必須包含一個有效的設(shè)備(即從iosDevList中能夠搜索到的設(shè)備)。)將ioDefPath復(fù)制到pathname中返回。)這個函數(shù)等價于函數(shù)ioDefPathSet(),可以認(rèn)為是ioDefPathSet()函數(shù)的一個別名。int19.20.如果name是一個包含設(shè)備路徑的一個絕對路徑名,那么它就成為了一個新的默認(rèn)路徑。((char)文件ioLib中定義了一個數(shù)組LOCAL24.25.stdFd,intchecknullWriteintcharSTATUS)iosLib函數(shù)庫初始化,該函數(shù)的主要作用是動態(tài)創(chuàng)建了一個FD_ENTRY結(jié)構(gòu)數(shù)組和一個DRV_ENTRY結(jié)構(gòu)數(shù)組,并進行了初始化。FUNCPTRpRead,該函數(shù)返回下標(biāo)i。如果forceClose參數(shù)為TRUE則需要強制關(guān)閉該設(shè)備已經(jīng)打開的文件。dr
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1