使用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 Stack在Win32下是由作業系統安排,人工配置Stack並不會使用。但為了維持和DOS相同的程式碼,仍配置Stack用記憶體。
2. 最下面一行的閃爍字元並不閃爍,這是因為PC.C中的Win 32A PI中的Console控制並沒有設定閃爍字元。但不影響主要功能。
3. 螢幕大小是可以縮放,所以右側多了滑動棒。DOS是固定25*80字元,而Win32 port無此限定。在使用Printf()函式時,可以保留更多的資訊。
4. 在Windows上面CPU使用率維持不超過10%,因為使用Windows的Sleep(),相對於uC/OS上的CPU使用率是不準的。
沒有留言:
張貼留言