2022年VxWorksTornado讀書筆記_第1頁
2022年VxWorksTornado讀書筆記_第2頁
2022年VxWorksTornado讀書筆記_第3頁
2022年VxWorksTornado讀書筆記_第4頁
2022年VxWorksTornado讀書筆記_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、學(xué)習(xí)必備歡迎下載vxworks&tornado 讀書筆記reference :vxworks 程序員指南王金剛等 . 清華大學(xué)出版社vxworks 高級(jí)程序設(shè)計(jì)李方敏 . 清華大學(xué)出版社vxworks 開發(fā)指南與tornado 實(shí)用手冊(cè)李方敏 . 清華大學(xué)出版社第一章vxworks 操作系統(tǒng)介紹1.vxworks 中斷響應(yīng)程序( isr)的上下文:isr 在一個(gè)專門的上下文中執(zhí)行,是處于任務(wù)的上下文之外;每個(gè)任務(wù)都有自己的上下文, 但是所有的 isr 共享一個(gè)上下文, 當(dāng)中斷嵌套時(shí), 對(duì)這個(gè)上下文的大小有一定的要求,在設(shè)計(jì)初要考慮這個(gè)問題。2.上下文切換:context switch

2、,也叫 task switch,是指 cpu 寄存器內(nèi)容的切換,也就是任務(wù)切換。每個(gè)任務(wù)都有自己的上下文, 即擁有各自的 cpu 環(huán)境和系統(tǒng)資源(指任務(wù)被內(nèi)核調(diào)度時(shí)所使用的資源)。在任務(wù)切換時(shí), 任務(wù)的上下文保存在任務(wù)控制塊(tcb)中。我的理解:在任務(wù)運(yùn)行時(shí),運(yùn)行時(shí)的一些相關(guān)信息,即上下文是保存在什么地方?應(yīng)該是在系統(tǒng)運(yùn)行時(shí)總的環(huán)境里。比如說,cpu 有一套寄存器, 如果哪個(gè)任務(wù)運(yùn)行,則這個(gè)任務(wù)的上下文就被保存到系統(tǒng)的這些寄存器中;如果有任務(wù)切換,系統(tǒng)將當(dāng)前正在運(yùn)行任務(wù)的上下文保存到這個(gè)任務(wù)的tcb 中,然后從將要執(zhí)行任務(wù)的tcb 中取出它的上下文,放到系統(tǒng)的寄存器中。3.上下文內(nèi)容:任務(wù)的

3、執(zhí)行點(diǎn),即任務(wù)的程序計(jì)數(shù)器;cpu 中的寄存器;動(dòng)態(tài)變量和函數(shù)調(diào)用所需的堆棧; 一個(gè)延時(shí)定時(shí)器; 一個(gè)時(shí)間片定時(shí)器; 內(nèi)核控制結(jié)構(gòu); 信號(hào)句柄。4.vxworks 操作系統(tǒng)內(nèi)核:wind 內(nèi)核;一個(gè)操作系統(tǒng)分為核心態(tài)和用戶態(tài)。內(nèi)核在核心態(tài)運(yùn)行,為用戶的應(yīng)用程序服務(wù)。5.任務(wù)創(chuàng)建的兩種方式精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 1 頁,共 11 頁 - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 1 頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎下載

4、方式一:使用 taskinit()函數(shù)創(chuàng)建任務(wù),創(chuàng)建時(shí)處于掛起狀態(tài),必須激活這個(gè)創(chuàng)建的任務(wù)才能使其進(jìn)入就緒狀態(tài);方式二: 使用發(fā)起任務(wù)( spawning)的原語,調(diào)用一個(gè)函數(shù)就能創(chuàng)建并激活任務(wù);刪除任務(wù):任務(wù)可以在任何一種狀態(tài)被刪除。6.任務(wù)的幾種狀態(tài):就緒( ready ): 任務(wù)僅等待 cpu 的狀態(tài),不等待其他任何資源;阻塞( pend):任務(wù)由于一些資源不可用而被阻塞;睡眠( delay ): 處于睡眠的任務(wù)狀態(tài);掛起( suspend):該狀態(tài)時(shí)任務(wù)不執(zhí)行,主要用于調(diào)試用。這里沒有運(yùn)行狀態(tài)的任務(wù)( uc/os-ii 中有),其實(shí)也是有的。在 vxworks 中,具有最高優(yōu)先級(jí)并處于

5、就緒狀態(tài)的任務(wù)就是運(yùn)行狀態(tài)的任務(wù)。7.任務(wù)調(diào)度控制函數(shù):1)tasklock()禁止任務(wù)調(diào)度;當(dāng)任務(wù)調(diào)用這個(gè)函數(shù)時(shí),這個(gè)任務(wù)在執(zhí)行時(shí)不會(huì)發(fā)生基于優(yōu)先級(jí)的搶占;但是任務(wù)在執(zhí)行中被阻塞或掛起,調(diào)度程序?qū)⑦x擇有資格執(zhí)行且優(yōu)先級(jí)最高的任務(wù)執(zhí)行。當(dāng)搶占上鎖的任務(wù)被解除阻塞并且重新開始執(zhí)行,搶占將再一次被禁止。搶占上鎖只能阻止任務(wù)的上下文切換, 并不能禁止中斷; 其可以實(shí)現(xiàn)互斥操作;2)taskunlock()允許任務(wù)調(diào)度;每個(gè)vxworks 任務(wù)控制塊都維護(hù)一個(gè)計(jì)數(shù)器鎖變量 lockcnt,tasklock()使其加 1,taskunlock()使其減1,當(dāng) lockcnt 大于 0 時(shí),調(diào)度程序便被禁

6、止。3)taskpriorityset()改變?nèi)蝿?wù)優(yōu)先級(jí);4)status kerneltimeslice(int ticks) 任務(wù)可以調(diào)用此函數(shù)來開放或禁止時(shí)間片輪轉(zhuǎn)調(diào)度。 ticks 指定以 tick 為單位的時(shí)間片大小。 如果任務(wù)通過 tasklock()禁止搶占,系統(tǒng)將不對(duì)該任務(wù)的時(shí)間片進(jìn)行計(jì)數(shù),直到 taskunlock()允許搶占。5)tasksafe() /*保護(hù)調(diào)用任務(wù)免于刪除 */6)taskunsafe() /*解除任務(wù)刪除保護(hù) */8.輔助函數(shù)說明:精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 2 頁,共 11 頁 - -

7、- - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 2 頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎下載taskname ()得到與任務(wù)號(hào)相關(guān)的任務(wù)名tasknametoid()尋找與任務(wù)名相關(guān)的任務(wù)idtaskidself()獲得調(diào)用此函數(shù)的任務(wù)id 號(hào)taskidverify()檢查一個(gè)特定任務(wù)的存在性taskidlistget() 用 id 填充一組所有激活的任務(wù)taskinfoget() 得到任務(wù)的信息taskpriorityget() 查看任務(wù)的優(yōu)先級(jí)taskregsget() 檢查任務(wù)寄存器(不能

8、使用當(dāng)前任務(wù)時(shí))taskregsset() 設(shè)置任務(wù)寄存器(不能使用當(dāng)前任務(wù)時(shí))taskissuspended() 檢查任務(wù)是否處于掛起狀態(tài)taskisready() 檢查任務(wù)是否處于就緒狀態(tài)tasktcb() 獲得任務(wù)控制塊的指針第二章任務(wù)間通信8.調(diào)度程序的時(shí)間開銷調(diào)度程序開銷主要取決于保存和恢復(fù)上下文需要復(fù)制的寄存器數(shù),要求該過程非常快。9.任務(wù)棧每個(gè)任務(wù)都有獨(dú)立的棧空間,棧用于任務(wù)的函數(shù)調(diào)用,分配自動(dòng)變量和函數(shù)返回值。任務(wù)控制塊wind_tcb 記錄了位置和大小等棧信息。wind_tcb本身放在任務(wù)棧開始部分。在vxworks 中,所有任務(wù)在同一地址空間運(yùn)行,任務(wù)之間沒有任何地址保護(hù)機(jī)

9、制,因此棧溢出會(huì)引起連鎖反應(yīng)(比如說任務(wù)a 棧溢出到任務(wù) b 的棧里面, 這樣任務(wù) b 很可能也不能正常工作了) 。在設(shè)置棧大小時(shí),一般設(shè)置一個(gè)較大的值,以存儲(chǔ)空間換取可靠性。棧大小在taskspawn ()創(chuàng)建時(shí)指定。10.中斷棧只要體系和 bsp支持, vxworks 支持獨(dú)立的中斷棧。對(duì)所以的isr 使用相同的中斷棧。如果系統(tǒng)不支持,中斷棧屬于被中斷任務(wù)棧的一部分。11.posix 精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 3 頁,共 11 頁 - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - -

10、- - - - - - - 第 3 頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎下載posix 具有多重含義,通常指posix 標(biāo)準(zhǔn),該標(biāo)準(zhǔn)是一個(gè)可移植操作系統(tǒng)接口( portable operating system interface ),由 ieee 提出, ansi 和 iso 將其標(biāo)準(zhǔn)化。 posix 的目標(biāo)是使應(yīng)用程序源代碼可以在兼容posix 的操作系統(tǒng)上移植。 理想目標(biāo)是應(yīng)用程序移植到另一個(gè)操作系統(tǒng)只需要重新編譯就可以運(yùn)行。12.vxworks 任務(wù)間的通信方式種類:共享內(nèi)存、信號(hào)量、消息隊(duì)列、管道、網(wǎng)絡(luò)套接字、信號(hào);13.信號(hào)量控制函數(shù)sembcreate

11、() 分配并初始化一個(gè)二進(jìn)制信號(hào)量,函數(shù)返回創(chuàng)建信號(hào)量的 idsemmcreate() 分配并初始化一個(gè)互斥信號(hào)量,函數(shù)返回創(chuàng)建信號(hào)量的idsemccreate() 分配并初始化一個(gè)計(jì)數(shù)器信號(hào)量,函數(shù)返回創(chuàng)建信號(hào)量的 idsemdelete() 終止并釋放一個(gè)信號(hào)量semtake() 獲取一個(gè)信號(hào)量semgive() 提供一個(gè)信號(hào)量semflush() 解鎖所有正在等待信號(hào)量的任務(wù)14.用二進(jìn)制信號(hào)量如何實(shí)現(xiàn)互斥(二進(jìn)制信號(hào)量實(shí)現(xiàn)互斥在創(chuàng)建之初是可用的狀態(tài),但是二進(jìn)制信號(hào)量實(shí)現(xiàn)同步時(shí)初始狀態(tài)是不可用的):semtake(semmutex, wait_forever);/*臨界區(qū)域,任何時(shí)候僅單

12、個(gè)任務(wù)可以訪問*/semgive(semmutex);就象上面的 3行代碼一樣,每個(gè)任務(wù)要想訪問臨界區(qū)域, 必須先獲得信號(hào)量;如果此時(shí)信號(hào)量不可用,則等待;如果為可用,則獲得這個(gè)信號(hào)量,那么其他的任務(wù)就不能獲得這個(gè)信號(hào)量了,等到這個(gè)任務(wù)釋放這個(gè)信號(hào)量了才可以使用。sem_empty 表示信號(hào)量不可用sem_full 表示信號(hào)量可用16.消息隊(duì)列的函數(shù)說明精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 4 頁,共 11 頁 - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 4

13、頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎下載msgqcreate() 分配并初始化一個(gè)消息隊(duì)列msgqdelete() 終止并釋放一個(gè)消息隊(duì)列msgqsend() 向一個(gè)消息隊(duì)列發(fā)送消息msgqreceive() 從一個(gè)消息隊(duì)列接收消息17.管道( 將管道當(dāng)成i/o 設(shè)備使用 )管道使用 vxworks 操作系統(tǒng)中的 i/o 系統(tǒng),并提供替換消息隊(duì)列的接口。 管道是由驅(qū)動(dòng)程序 pipedrv 管理的虛擬 i/o 設(shè)備。函數(shù) pipedrvcreate ()創(chuàng)建管道設(shè)備以及與該管道相連的低層消息隊(duì)列。18.套接字vxworks 操作系統(tǒng)中, 套接字是穿越網(wǎng)絡(luò)的任務(wù)間通信的

14、基本形式。套接字是任務(wù)間通信終端,數(shù)據(jù)從一個(gè)套接字傳送到另一個(gè)套接字。在建立套接字時(shí)需指定數(shù)據(jù)傳輸?shù)幕ヂ?lián)網(wǎng)通信協(xié)議。vxworks 支持互聯(lián)網(wǎng)的 tcp 協(xié)議和udp 協(xié)議。19.信號(hào): 主要作用是在任務(wù)運(yùn)行時(shí),一個(gè)異步的信號(hào)發(fā)生,任務(wù)對(duì)其進(jìn)行及時(shí)響應(yīng) (相當(dāng)于中斷的作用)vxworks 操作系統(tǒng)中, 還有一種叫做信號(hào)的機(jī)制。 與通用任務(wù)間通信機(jī)制相比,信號(hào)機(jī)制更適合于錯(cuò)誤和異常的處理。信號(hào)主要用于任務(wù)之間傳遞控制信號(hào),是一個(gè)軟件的概念。信號(hào)在很多方面類似于硬件中斷。信號(hào)的發(fā)生通常與硬件中斷相聯(lián)系。有時(shí)也稱信號(hào)為軟中斷。任何一個(gè)任務(wù)或 isr 都可以對(duì)某個(gè)任務(wù)引發(fā)一個(gè)信號(hào)。收到信號(hào)的任務(wù)立即掛

15、起當(dāng)前執(zhí)行的線程, 并在下次任務(wù)被調(diào)度時(shí)執(zhí)行該任務(wù)事先指定的信號(hào)處理程序。當(dāng)信號(hào)處理方式為“捕捉”時(shí),需要為信號(hào)指定一個(gè)“信號(hào)處理函數(shù)”,該函數(shù)和中斷服務(wù)程序一樣,當(dāng)捕捉到對(duì)應(yīng)的信號(hào)時(shí),系統(tǒng)自動(dòng)調(diào)用該函數(shù)。信號(hào)處理函數(shù)在被信號(hào)中斷的任務(wù)上下文中運(yùn)行(為任務(wù)設(shè)置堆棧大小時(shí)要考慮信號(hào)處理函數(shù)開銷);信號(hào)處理函數(shù)運(yùn)行時(shí)具有所屬任務(wù)的優(yōu)先級(jí),調(diào)度時(shí)仍然遵從系統(tǒng)調(diào)度策略。信號(hào)處理函數(shù)運(yùn)行結(jié)束后,任務(wù)回到被中斷前的狀態(tài);精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 5 頁,共 11 頁 - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - -

16、- - - - - - - - - - - - 第 5 頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎下載23.中斷處理相關(guān)的一些函數(shù)intconnect() 設(shè)置中斷處理的 c 程序(為中斷指定一個(gè)中斷處理函數(shù))intcontext() 如果是從中斷級(jí)調(diào)用,返回真intcount() 獲得當(dāng)前中斷嵌套深度intlevelset() 設(shè)置處理器的中斷屏蔽級(jí)intlock() 禁止中斷intunlock() 重新允許中斷intvecbaseset() 設(shè)置向量基地址intvecbaseget() 得到向量基地址intvecset() 設(shè)置異常向量intvecset() 獲得異常

17、向量所有中斷服務(wù)程序使用相同的中斷堆棧。該堆棧由系統(tǒng)啟動(dòng)時(shí)根據(jù)指定配置參數(shù)來定位和初始化。為能夠處理最壞情況下的中斷嵌套,必須分配足夠大的中斷堆??臻g。開發(fā)過程中,可以使用checkstack ()函數(shù)觀察堆棧的使用情況。許多 vxworks 函數(shù)在中斷服務(wù)程序中使用時(shí)仍存在許多重要限制。這些限制是由于中斷服務(wù)程序不在一個(gè)固定的任務(wù)上下文中執(zhí)行,而且沒有任務(wù)控制塊,因此所有中斷服務(wù)程序必須共享一個(gè)單獨(dú)的堆棧。所以,中斷服務(wù)程序基本限制為禁止調(diào)用導(dǎo)致調(diào)用者堵塞的函數(shù)。例如禁止試圖使用一個(gè)信號(hào)量,不能調(diào)用任何用于創(chuàng)建或刪除的函數(shù)。第三章socket通信1.關(guān)于 socket 函數(shù)說明1)int s

18、ocket(int domain, int type, int rotocol); 打開(創(chuàng)建)一個(gè)socket。創(chuàng)建 socket 是 socket 通信的第一步,調(diào)用這個(gè)函數(shù),返回socket 描述符。該描述符被其他socket 接口函數(shù)和標(biāo)準(zhǔn)i/o 使用,以唯一標(biāo)示創(chuàng)建的socket。參數(shù) domain表明通信域, 對(duì) vxworks 總是 af_inet, 即 internet 域;參數(shù) type 指定 socket 類型:sock _stream 、 sock_dgram 、sock_raw ;參數(shù) protocol 表示該 socket 屬于何種通信協(xié)議,即ip 協(xié)議層的載荷類型。

19、精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 6 頁,共 11 頁 - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 6 頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎下載2)status bind(int s, struct sockaddr * name, int namelen) ;將 socket 和一個(gè)“ 端點(diǎn)地址 ” 綁定。參數(shù) s 為 socket 描述符;name為要綁定的本地端點(diǎn)地址;namelen為 name 的結(jié)構(gòu)體長度。3)list

20、en() 允許連接到socket(也可以說是偵聽連接請(qǐng)求)4)accept() 接受 socket 上的一個(gè)連接5)connect() 發(fā)起建立socket 連接。如果連接失敗,應(yīng)該將socket關(guān)閉,才能再使用該socket。6)connectwithtimeout() 在指定時(shí)間內(nèi)嘗試建立socket 連接7)sendto() 發(fā)送 message到 socket 8)send() 發(fā)送 data到 socket 9)sendmsg() 發(fā)送 message到 socket 10)recvfrom() 從 socket 接收 message 11)recv() 從 socket 接收 da

21、ta 12)recvmsg() 從 socket 接收 message 13)setsockopt() 設(shè)置 socket 選項(xiàng)14)getsockopt() 讀取 socket 選項(xiàng)15)getsockname() 讀取本地socket 端點(diǎn)地址16)getpeername() 讀取連接的另一端端點(diǎn)地址17)shutdown() 關(guān)閉連接2.大小端模式(大端字節(jié)序、小端字節(jié)序)big-endian : 序列中的高位值存放在較低的存儲(chǔ)地址;little-endian :序列中的低位值存放在較低的存儲(chǔ)地址;當(dāng)數(shù)據(jù)在網(wǎng)絡(luò)上傳輸時(shí),采取的是大端字節(jié)序,即數(shù)據(jù)幀發(fā)送順序?yàn)閺膸母呶恢档綆牡臀恢?。摩?/p>

22、羅拉芯片采用的是大端字節(jié)序,而英特爾的芯片采用的小端字節(jié)序。解決字節(jié)序的問題就是將主機(jī)字節(jié)序轉(zhuǎn)換成和網(wǎng)絡(luò)字節(jié)序一致。轉(zhuǎn)換在應(yīng)用程序級(jí)完成。vxworks 定義了 4 個(gè)宏用于字節(jié)序轉(zhuǎn)換: htons() 將短整數(shù)從主機(jī)字節(jié)序轉(zhuǎn)換到網(wǎng)絡(luò)字節(jié)序htonl() 將長整數(shù)從主機(jī)字節(jié)序轉(zhuǎn)換到網(wǎng)絡(luò)字節(jié)序精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 7 頁,共 11 頁 - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 7 頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎

23、下載ntohs() 將短整數(shù)從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換到主機(jī)字節(jié)序ntohl() 將長整數(shù)從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換到主機(jī)字節(jié)序3.socket 端點(diǎn)地址socket 端點(diǎn)地址由結(jié)構(gòu)體sockaddr_in 表示。 ip 地址由sockaddr_in 結(jié)構(gòu)體內(nèi)的結(jié)構(gòu)體in_addr 表示。習(xí)慣上以“. ”表示的是點(diǎn)分十進(jìn)制ip 地址,在in_addr 中的表示是將點(diǎn)分十進(jìn)制表示中的4 個(gè)整數(shù)直接轉(zhuǎn)換為二進(jìn)制,對(duì)應(yīng)到in_addr.s_addr 的 4 個(gè)字節(jié)上。例如 ip 地址 “127.0.0.1 ”表示為 in_addr.s_addr=0 x7f000001 。4.socket 應(yīng)用類型sock_stream

24、 面向連接的應(yīng)用類型(基于 tcp 協(xié)議的 socket 應(yīng)用( 在 internet 域) ) sock_dgram 面向無連接的應(yīng)用類型(基于 udp 協(xié)議的 socket應(yīng)用 (在 internet 域) ) 5.地址綁定顯式通過一個(gè)函數(shù)調(diào)用指定本地的端點(diǎn)地址(包括ip 地址和端口號(hào)) ,這一動(dòng)作為“ 地址綁定 ” 。 通常面向連接的服務(wù)器應(yīng)用中在偵聽一個(gè)端口之前需要先綁定本地端點(diǎn)地址。無連接的服務(wù)器應(yīng)用中,也常常在等待客戶數(shù)據(jù)到達(dá)前先綁定本地端點(diǎn)地址。除了地址綁定, 還可以讓系統(tǒng)自動(dòng)選擇本地端點(diǎn)地址,這樣就不需要顯式的調(diào)用函數(shù)進(jìn)行綁定。第四章i/o 系統(tǒng)1.使用設(shè)備的過程使用設(shè)備的過程

25、通常包括:驅(qū)動(dòng)程序初始化;創(chuàng)建設(shè)備;打開文件;i/o 操作;關(guān)閉文件;刪除設(shè)備。塊設(shè)備:一個(gè)設(shè)備可以實(shí)現(xiàn)不同的文件系統(tǒng),可以有多個(gè)文件;非塊設(shè)備: 一個(gè)設(shè)備通常對(duì)應(yīng)一個(gè)文件。2.基本 i/o 函數(shù)說明vxworks 中 i/o 分為基本 i/o 和緩沖 i/o,基本 i/o 是 vxworks 中最底層的i/o,以下是 7 個(gè)標(biāo)準(zhǔn) c 語言庫兼容的接口:#include “iolab.h ” 1)int open(const char *name, int flags, int mode); 打開/創(chuàng)建文件,第一個(gè)參數(shù)為文件名,第二個(gè)參數(shù)定義對(duì)打開的文件進(jìn)行的操作,它可以是 o_rdonly,

26、 o_wronly, o_rdwr, o_creat 。精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 8 頁,共 11 頁 - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 8 頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎下載2)status close(int fd); 關(guān)閉文件,其將終止 fd 與物理文件之間的關(guān)聯(lián),并釋放在文件描述符表中占用的資源。釋放后文件描述符和文件描述符表的空間能夠重新使用。3)int creat (const char *n

27、ame, int flags) 創(chuàng)建文件同時(shí)以指定標(biāo)志打開文件。實(shí)際上, creat創(chuàng)建文件時(shí)先確定文件所在設(shè)備,然后調(diào)用設(shè)備驅(qū)動(dòng)程序提供的函數(shù)創(chuàng)建文件。4)status remove(const char *name) 刪除文件;和 creat一樣,remove先確定文件所在設(shè)備,然后調(diào)用設(shè)備驅(qū)動(dòng)程序提供的函數(shù)刪除文件。5)int read(int fd, char *buffer, size_t maxbytes); 讀取之前創(chuàng)建或者打開的文件;第二個(gè)參數(shù)是讀取數(shù)據(jù)緩沖區(qū)指針,第三個(gè)參數(shù)是最大讀取字節(jié)數(shù)。函數(shù)返回的是函數(shù)實(shí)際讀取的字節(jié)數(shù);6)int write(int fd, char *

28、buffer, size_t nbytes) 寫入到之前創(chuàng)建或者打開的文件。第二個(gè)參數(shù)是輸出數(shù)據(jù)緩沖區(qū)指針,第三個(gè)參數(shù)是要求寫得字節(jié)數(shù)。其返回值表示所寫的字節(jié)數(shù),如果等于0,表示沒有寫入任何數(shù)據(jù)。7)int ioctl(int fd, int function, int arg); 特殊控制。其對(duì)描述符fd 指定的對(duì)象執(zhí)行在 function 中給出的操作,文件描述符:所有的基本 i/o 操作都引用文件描述符( fd)。文件描述符是調(diào)用 open()或者 create()返回的一個(gè)正數(shù)值,其他i/o 調(diào)用需要使用該 fd參數(shù)。文件描述符全局可見,兩個(gè)不同的任務(wù)通過相同的文件描述符訪問的將是同一

29、個(gè)文件。 vxworks 支持有限的文件描述符,具體在i/o 系統(tǒng)初始化時(shí)指定有效的 fd 數(shù)目(宏定義 num_files )。因此當(dāng)文件不再使用時(shí)應(yīng)該立即關(guān)閉文件,防止超出系統(tǒng)限制。第五章vxworks 啟動(dòng)過程3.vxworks 啟動(dòng)過程vxworks 的啟動(dòng)過程需要解決:處理器初始化:使處理器復(fù)位,禁止中斷,內(nèi)部寄存器都為確定的值;代碼裝入:將執(zhí)行映像從存儲(chǔ)介質(zhì)裝入ram 執(zhí)行;精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 9 頁,共 11 頁 - - - - - - - - -精品學(xué)習(xí)資料 可選擇p d f - - - - - - - - - - - - - - 第 9 頁,共 11 頁 - - - - - - - - -學(xué)習(xí)必備歡迎下載硬件初始化:使硬件復(fù)位,并初始化為中斷或查詢方式為系統(tǒng)服務(wù);內(nèi)核激活 (函數(shù)為 kernelinit():使多任務(wù)微內(nèi)核開始調(diào)度任務(wù)運(yùn)行;操作系統(tǒng)組件初始化:初始化用戶應(yīng)用需要的各種操作系統(tǒng)功能?!疤幚砥鞒跏蓟焙汀按a裝入”即通常所說的引導(dǎo)代碼(rominit.s 和romstart.c)。通常的啟動(dòng)過程為:引導(dǎo),準(zhǔn)備激活內(nèi)核,

溫馨提示

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

評(píng)論

0/150

提交評(píng)論