VxWorks程式設計指導-3 (轉)

worldblog發表於2007-12-12
VxWorks程式設計指導-3 (轉)[@more@]

1.1.  POSIX介面

POSIX(可移植操作介面)是ISO/IEEE下的團體代表開發的標準。該標準的目的是實現多應用的級移植。現下為實時作業系統提供的服務定義了一套介面(POSIX標準1003.1b,以前稱作1003.4)。利用這些介面就會使應用從一個作業系統輕鬆的移植到另外一個作業系統上。

 :namespace prefix = o ns = "urn:schemas--com::office" />

POSIX介面包括:

m  非同步I/O

m  訊號量

m  訊息對列

m  管理

m  訊號

m  排程

m  時鐘

1.2.  I/O系統

VxWorks的I/O系統對多種輸入輸出裝置提供統一的存取機制。既可以基本的I/O:creat(),remove(),open(),close( ),read(),write(),和ioctl();也可以呼叫高層I/O函式,譬如printf(),scanf()。

 

VxWorks也提供了緩衝輸入輸出函式包(stdio),包含ANSI-C相容函式,譬如fopen(),fclose(),fread(),fwrite(),getc()和putc()。在許多情況下,這些函式提高了輸入輸出的。

 

VxWorks的I/O系統也包含了POSIX相容的非同步輸入輸出:輸入輸出和任務的其它動作同時進行的函式庫。

 

VxWorks包含下面裝置的:通訊,,RAM磁碟,磁帶,用於任務間通訊的管道裝置,以及裝置。如果有必要的話,應用開發者還可以輕鬆的編寫其它裝置的驅動程式,加入VxWorks中。

 

VxWorks的I/O系統允許驅動程式完全控制如何請求的服務。驅動程式可以方便的實現不同的,唯一的裝置特定的函式,甚至不同的系統,與輸入輸出系統毫無干涉。VxWorks提供了一些高層包可以讓驅動程式方便的實現公共的裝置協議和檔案系統。

 

1.3.  本地檔案系統

VxWorks包含幾個本地檔案系統來使用塊裝置(磁碟)。這些裝置使用標準的介面以至可以方便的掛接在檔案系統上。本地檔案系統包含了SCSI磁帶檔案系統和CD-ROM檔案系統。VxWorks的輸入輸出架構使得VxWorks系統可以同時具有多個不同的檔案系統。

1.3.1.  MS-DOS相容檔案系統

VxWorks提供dos檔案系統,相容MS-DOS檔案系統。DosFs為了適應實時應用的各種需求提供了相當的彈性。主要特性如下:

m  樹狀的檔案目錄結構,允許在一卷上建立任意多個檔案。

m  可以指定檔案的連續,連續儲存的檔案可以提高效能,而非連續儲存的檔案可以充分利用磁碟空間。

m  與現在廣泛使用的存取媒介相容,在dosFs檔案系統下建立的磁碟可以與用MS-DOS個人建立的磁碟互動使用。MS-DOS下的可以被正確的dosFs檔案系統識別。

m  檔名區分大小寫,並且檔名的長度不受限制(MS-DOS檔案系統下檔名長度約定為8字元+副檔名)。

dosFs為面向檔案的裝置驅動程式提供的服務在dosFsLib裡實現。

1.3.2.  RT-11相容檔案系統rt11Fs

rt11Fs檔案系統相容於RT-11作業系統。該檔案系統一直被實時應用使用,因為該檔案系統下的所有檔案都是連續儲存的。但是它缺少樹狀檔案組織結構,樹狀檔案組織結構對大容量磁碟是特別有用的。同時,呆板的連續儲存空間分配會導致大量的磁碟碎片。所以,dosFs要優於rt11Fs。

 

VxWorks實現的rt11Fs檔案系統可以對所有檔案利用位元組定址進行隨機存取。每一個開啟的檔案都有一塊緩衝記憶體來對檔案的讀寫。

 

rt11Fs為面向檔案的裝置驅動程式提供的服務在rt11FsLib裡實現。

 

1.3.3.  裸碟檔案系統

VxWorks提供簡單的裸碟檔案系統rawFs。rawFs將整個磁碟當作一個大檔案。透過指定位元組偏移rawFs可以讀寫磁碟的某一部分,並且做簡單的緩衝。當僅需要簡單,低階的磁碟輸入輸出操作時,rawFs有空間和速度的優勢。

 

rawFs為面向檔案的裝置驅動程式提供的服務在rawFsLib裡實現。

 

1.3.4.  SCSC順序檔案系統:tapFs

VxWorks為不使用標準檔案和目錄結構的磁帶裝置提供tapFs檔案系統。磁帶象裸碟一樣被看成是一個大檔案。上層負責組織這個大檔案裡的資料。

 

tapFs為面向檔案的裝置驅動程式提供的服務在tapFsLib裡實現。

1.3.5.  CDROM檔案系統

VxWorks為了讓應用讀寫按照ISO9660檔案系統標準格式化的CDROM裝置提供了cdRomFs。初始化cdRomFs檔案系統後,掛接cdRomFs到一個CDROM裝置,就可以用POSIX標準的I/O呼叫來讀CDROM。

1.3.6.  可替換的檔案系統

在VxWorks下,檔案系統不緊繫於特定的裝置或裝置驅動。裝置可以掛接到任意檔案系統。你可以按照介於檔案系統,驅動程式,VxWorks的輸入輸出系統之間的介面標準提供你自己的檔案系統來使用標準裝置。

1.4.  虛擬記憶體

VxWorks對有記憶體管理單元的板提供虛擬記憶體支援。繫結的虛擬記憶體支援能夠使部分記憶體不緩衝,這在多之間共享記憶體或使用DMA傳輸是非常有用的。

 

非繫結的虛擬記憶體支援是可選VxVMI提供的。VxVMI可以讓應用建立文字段和可讀的異常向量表,並且包含一套函式讓使用者來管理自己的虛擬記憶體場景。

 

1.5.  共享記憶體

下面的共享記憶體物件(可選元件VxMP提供)是用來在不同處理器上的任務間進行通訊和同步用的。

 

l  共享訊號量是用來同步不同處理器上任務的,同時也可以用作它們對共享資料結構的互斥訪問。

l  共享訊息對列是用來在不同處理器上任務之間傳遞訊息。

l  共享記憶體管理是用來為不同處理器上的任務分配公共的記憶體空間。

1.6.  執行在目標機上的工具程式

在Tornado開發系統中,在主機上和執行整套的開發工具,詳情參見Tornado使用者指導。並且目標機上執行的外殼程式,符號表,模組上工具也可被配置入VxWorks系統中,例如建立動態配置的VxWorks執行系統。

1.7.  C++開發支援

VxWorks支援C++開發,Tornado隨帶的C++。Tornado編譯器提供可重入的異常處理。Tornado包含一新版的iostream庫和SGI實現的標準模板庫。Tornado的互動式開發工具器,外殼,和漸增模組載入工具都包含了對C++的支援。

 

而且你可以選購元件WIND基礎類。WIND基礎類包含下面的C++庫。

 

VxWorks包裝類

Rogue Wave的Tool.h++庫

1.8.  工具庫

VxWorks為應用開發者提供了常用用途的子函式。這些函式被組織為如下所描述的子函式庫。我們希望你在開發過程中儘可能利用這些子函式。利用這些函式庫既可以減少開發時間又可以減少應用的記憶體需求。

1.9.  中斷處理支援

VxWorks提供處理中斷和軟體陷阱的函式,不一定需要求助於語言。VxWorks裡有連線C函式到硬體中斷向量和操縱處理器中斷級別的函式。

1.10.  看門狗定時器

定時器可以讓使用者在指定時間間隔後重復執行自定義的C函式。當指定時間間隔過去後,超時函式在系統時鐘的中斷級被呼叫直到定時器被取消。定時器機制完全不同於核心的時延機制。

1.11.  訊息LOG

VxWorks提供了簡單訊息LOG機制,可以讓應用傳送錯誤和狀態訊息到一專門LOG的任務,這一任務將該訊息格式化並輸出到系統裡的LOG裝置(譬如向系統控制檯,磁碟,記憶體)。訊息LOG機制可以在任務級或中斷級使用。

1.12.  記憶體分配

VxWorks提供記憶體管理機制。記憶體動態分配,釋放,在記憶體池重新分配一塊記憶體。記憶體管理方案是一十分通用的方案,允許VxWorks管理多個獨立的記憶體池。

1.13.  字串格式化和掃描

VxWorks包含完整的字串格式化和掃描的ANSI-C函式集。實現prinf()/scanf()基於格式化的編解碼以及相關聯的函式。

1.14.  線性和環形緩衝操作

bLib庫包含象複製,填充,比較等的緩衝操作函式,這些函式在執行速度上都得到了最佳化。ringLib庫包含常用的管理先進先出環形緩衝的函式,而且可以讓一個讀記憶體的任務和一個寫記憶體的任務“同時”訪問記憶體而不需要互鎖記憶體訪問。

1.15.  連結串列操作

lstLib庫包含建立和所有操作雙連結串列的函式。

1.16.  ANSI C庫

VxWorks提供ANSI X3.159-1989標準規定的所有C庫。ANSI C定義瞭如下的庫:assert, ctype, errno, float, limits, locale, math, setjmp, signal, stdarg, stdio, stddef, stdlib, string, 和 time.

 

標頭檔案float.h, limits.h, errno.h, 和 stddef.h給出了ANSI C規定的申明和定義。下面列出了常用的庫:

 

ansiCtype 字元操作的函式庫。

ansiMath  三角函式,指數函式,對數函式。

ansiSetjmp 實現轉移的函式庫。

ansiStdarg 遍歷不定長引數列表。

ansiStdio 輸入輸出流操作函式。

ansiStdlib 包括很多型別的函式,象型別轉換,記憶體分配,和隨機數產生函式。

sigLib 訊號操作函式。

1.17.  效能估計

對VxWorks或應用的函式進行計時對了解和最佳化實時系統的效能是非常有用的。VxWorks提供了很多計時機制來幫助估計實時系統的效能。

 

VxWorks計時器可以對任何函式獲一組函式的執行進行計時。因為系統時鐘中斷太緩慢而不能為執行的函式提供必須的時間精度。可以對一組函式進行多次重複計時直到一次的執行時間在合理的精度範圍內。關於執行計時,詳情參見timexLib.

 

VxWorks提供了spy工具。Spy工具可以提供每個任務的使用時間,在中斷級的CPU使用時間,空閒時間。時間以百分比或以毫秒顯示出來。關於spy工具詳情參見spyLib.

 

監測VxWorks系統功能更強大的工具是WindView,詳情參見WindView使用者指導。

1.18.  目標機

目標機代理遵照W協議,允許Tornado開發工具和VxWorks目標機連線。目標機代理是以tWdbTask任務的形式執行。Tornado目標機傳送除錯請求到目標機代理。目標機代理根據除錯請求資訊控制和操縱VxWorks系統中的其它任務。

 

預設情況下,目標機代理和伺服器透過網路通訊。然而,你可以利用其它的可供選擇的通訊路徑。關於預設配置和可選擇的配置詳情參見Tornado使用者指導。

1.19.  板支援包

sysLib和sysALib是和目標機相關的庫。這些庫是VxWorks可移植的關鍵。他們為所有板的硬體功能提供了一致的軟體介面。主要包括硬體初始化,中斷處理和觸發,硬體時鐘管理,本地記憶體空間和匯流排記憶體空間的對映,記憶體排列等。

 

板支援包(BSP)包含啟動ROM和其它啟動方式。大部分都是從開發主機上匯入執行映像。

1.20.  VxWorks模擬器

VxWorks模擬器,VxSim,是一個模擬VxWorks目標機的程式,用作原型和測試環境。整合的VxSim允許執行一個模擬器。選購的VxSim加入了網路支援,允許模擬器利用網路工具透過Inte地址和主機通訊(網路上的其它結點)。

 

VxSim是VxWorks的一個很重要的解決方案,在很多情況下,VxSim與執行在遠端目標機上的真正的VxWorks系統具有一致的功能。你可以鏈入應用,重編VxWorks核,就象在其它的VxWorks跨平臺開發環境中一樣。所有的Tornado開發工具對VxSim同樣適用。

 

VxSim與執行在目標機上的VxWorks的不同之處是:執行在主機上的VxSim是作為主機的一個程式。因為程式碼是在主機自己的CPU體系結構中,所以VxSim不能模擬指令。因為不能與目標機的硬體互動,所以VxSim不適合模擬開發裝置驅動程式。然而VxWorks的任務排程在VxSim程式中實現了,是真正的基於優先順序的搶佔式任務排程。這意味著以可移植方式寫的VxWorks應用,如果與硬體不關聯或很少關聯,可以在VxSim和VxWorks目標機上的方便的移植。

1.21.  客戶服務

(略)

2.  OS基礎

2.1. 簡介

現代實時作業系統都是基於多工和任務間通訊的概念。多工允許實時應用被設計成多個相互獨立的任務,每個任務有自己的執行線索和系統資源集;任務間通訊允許任務透過同步和通訊來協調他們的動作。在VxWorks,任務間通訊機制有快速的訊號量機制,訊息和管道,以及網路透明傳輸Socket。

 

實時系統裡的另一重要機制是中斷處理。因為中斷是通知系統外部事件的常用機制,為了快速響應中斷,VxWorks的中斷服務程式在特殊的執行環境中執行,不同於任務的執行環境。

 

本章主要討論多工核心,任務機制,任務間通訊,中斷處理機制,這些VxWorks執行環境的核心所在。

2.2. WIND特性和POSIX特性

POSIX標準擴充套件為實時核心定義了一套介面。為了增加應用的可移植性,VxWorks核心,包括了POSIX介面和VxWorks特定介面。

 

本手冊用Wind限定符來標識為VxWorks核心Wind設計的特有功能。例如,在相應的章節裡有Wind訊號量和POSIX訊號量。

2.3. 任務

將應用設計成多個獨立的,但是相互合作的程式是很有必要的。每個執行的程式稱為任務。在VxWorks,任務對大部分系統資源有直接的,共享的存取許可權。同時又維護一個足夠控制任務執行線索的獨立的執行環境。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992166/,如需轉載,請註明出處,否則將追究法律責任。

相關文章