2009年8月10日 星期一

uCOS-II Win32 Port解析及改善 -- 2


使用Win32 port實作:

此次實作環境為:

Windows XP作業系統

uC/OS v2.80

Borland C++ Builder 6.0

 

uC/OS中的檔案修改如下:

CPU相關的檔案有

OS_CPU.H

OS_CPU_C.C

此二個檔案必須更換為Win32 port用的檔案。而原先必須使用組合語言的OS_CPU_A.ASM則未使用,原因是使用的是高階呼叫,故不需要,而在此檔案內的功能則由OS_CPU_C.C取代。

PC介面相關的檔案為

PC.H

PC.C

則也必須更換為Win32 port下使用的版本。

C++ Builder中則是以Console Applications為程式行為主體。所以可以知道程式只有一個進入點main(),和原先CPU的單工環境相類似。

先利用原作者提供之Example檔案建造執行檔,看有無其他問題。但部分程式碼仍會產生一些Warning,主要是原型宣告在不同的Compiler下有些不同,經稍為修飾後即可執行。其畫面如下:

原始碼有提供使用外部中斷的程式,一樣使用C++ Builder重建,在執行後可以改變Example的輸出結果,可以證明確實可以使用另一程式對Win32 port的程式產生中斷觸發的動作。結果如下:


因為並非常用此Example做為開發用。故以原始的Example #2為例修改並編譯,發現原始碼中有許多為DOS專用程式碼,必須刪除。但為了維持其可移植性,改使用巨集調整的方式做為不同平台之間原始碼調整用。在Win32 port中可以找到一些特有巨集定義在使用Windows時,以”__WIN32__”巨集可以使用。

相關的修改包括有:

DOS中斷設定及回復:在Win32中不需要。

程式結束的處理:在Win32中處理的函式不同。

浮點運算器的處理:在Win32中不使用模擬浮點相關設定。

在設定好了巨集切換後,可以執行的畫面如下:


可以看出外型雖然有像DOS版本程式,但仍有許多不一樣的地方。

1.    Free Stack的大小,呈現完全沒有使用的狀態。原因是Task StackWin32下是由作業系統安排,人工配置Stack並不會使用。但為了維持和DOS相同的程式碼,仍配置Stack用記憶體。

2.    最下面一行的閃爍字元並不閃爍,這是因為PC.C中的Win 32A PI中的Console控制並沒有設定閃爍字元。但不影響主要功能。

3.    螢幕大小是可以縮放,所以右側多了滑動棒。DOS是固定25*80字元,而Win32 port無此限定。在使用Printf()函式時,可以保留更多的資訊。

4.    Windows上面CPU使用率維持不超過10%,因為使用WindowsSleep(),相對於uC/OS上的CPU使用率是不準的。




沒有留言:

張貼留言