編輯點評:包含了ucosii 系統實現的原理,任務,調度等
經典的ucos ii 教程,里面包含了ucosii 系統實現的原理,包括任務,調度等,講的非常詳細,很容易理解,uCOSⅡ中文教程(邵貝貝)版可以使用戶不必在工程項目中每個*.C 文件中都考慮需要什么樣的頭文件。
圖片預覽
子目錄介紹
\SOFTWARE
這是根目錄,是所有軟件相關的文件都放在這個目錄下。
\SOFTWARE\BLOCKS
子程序模塊目錄。筆者將例子中 C/OS-II 用到的與 PC 相關的函數模塊編譯以后放在這個目錄下。
\SOFTWARE\HPLISTC
這個目錄中存放的是與范例 HPLIST 相關的文件(請看附錄 D,HPLISTC 和 TO)。HPLIST.C存放在\SOFTWARE\HPLISTC\SOURCE 目錄下。DOS 下的可執行文件(HPLIST.EXE)存放在
\SOFTWARE\TO\EXE 中。
\SOFTWARE\TO
這個目錄中存放的是和范例 TO 相關的文件(請看附錄 D,HPLISTC 和 TO)。源文件 TO.C存放在\SOFTWARE\TO\SOURCE 中,DOS 下的可執行文件(TO.EXE)存放在\SOFTWARE\TO\EXE中。注意 TO 需要一個 TO.TBL 文件,它必須放在根目錄下。用戶可以在\SOFTWARE\TO\EXE目錄下找到 TO.TBL 文件。如果要運行 TO.EXE,必須將 TO.TBL 復制到根目錄下。
\SOFTWARE\uCOS-II與 C/OS-II 相關的文件都放在這個目錄下。
\SOFTWARE\uCOS-II\EX1_x86L
這個目錄里包括例 1 的源代碼(參見 1.07, 例 1),可以在 DOS(或 Windows 95 下的 DOS窗口)下運行。
\SOFTWARE\uCOS-II\EX2_x86L
這個目錄里包括例 2 的源代碼(參見 1.08, 例 2),可以在 DOS(或 Windows 95 下的 DOS窗口)下運行。
\SOFTWARE\uCOS-II\EX3_x86L
這個目錄里包括例 3 的源代碼(參見 1.09, 例 3),可以在 DOS(或 Windows 95 下的 DOS窗口)下運行。
\SOFTWARE\uCOS-II\Ix86L
這個目錄下包括依賴于處理器類型的代碼。此時是為在 80x86 處理器上運行 uC/OS-II而必須的一些代碼,實模式,在大模式下編譯。
\SOFTWARE\uCOS-II\SOURCE
這個目錄里包括與處理器類型無關的源代碼。這些代碼完全可移植到其它架構的處理器上。
內容提要
在這一章里將提供三個范例來說明如何使用 C/OS-II。筆者之所以在本書一開始就寫這一章是為了讓讀者盡快開始使用 C/OS-II。在開始講述這些例子之前,筆者想先說明一些在這本書里的約定。 這些例子曾經用 Borland C/C++ 編譯器(V3.1)編譯過,用選擇項產生 Intel/AMD80186 處理器(大模式下編譯)的代碼。這些代碼實際上是在 Intel PenTIum II PC (300MHz)上運行和測試過,Intel PenTIum II PC 可以看成是特別快的 80186。筆者選擇 PC 做為目標系統是由于以下幾個原因:首先也是最為重要的,以 PC 做為目標系統比起以其他嵌入式環境,如評估板,仿真器等,更容易進行代碼的測試,不用不斷地燒寫 EPROM,不斷地向 EPROM 仿真器中下載程序等等。用戶只需要簡單地編譯、鏈接和執行。其次,使用 Borland C/C++ 產生的 80186 的目標代碼(實模式,在大模式下編譯)與所有 Intel、AMD、Cyrix 公司的 80x86 CPU 兼容。
其它函數介紹
μC/OS-II 的應用程序和其他 DOS 應用程序是一樣的,換句話說,用戶可以像在 DOS 下編譯其他單線程的程序一樣編譯和鏈接用戶程序。所生成的.EXE 程序可以在 DOS 下裝載和運行,當然應用程序應該從 main()函數開始。因為 μC/OS-II 是多任務,而且為每個任務開辟一個堆棧,所以單線程的 DOS 環境應該保存,在退出 μC/OS-II 程序時返回到 DOS。
調用 PC_DOSSaveReturn()可以保存當前 DOS 環境,而調用 PC_DOSReturn()可以返回到 DOS。
PC.C 中使用 ANSI C 的 setjmp(),longjmp()函數來分別保存和恢復 DOS 環境。Borland C/C++編譯庫提供這些函數,多數其它的編譯程序也應有這類函數。
應該注意到無論是應用程序的錯誤還是只調用 exit(0)而沒有調用 PC_DOSReturn()函數都會使 DOS 環境被破壞,從而導致 DOS 或 WINDOWS95 下的 DOS 窗口崩潰。
調用 PC_GetDateTime()函數可得到 PC 中的日期和時間,并且以 SACII 字符串形式返回。
格式是 MM-DD-YY HH:MM:SS,用戶需要 19 個字符來存放這些數據。該函數使用了 BorlandC/C++的 gettime()和 getdate()函數,其它 DOS 環境下的 C 編譯應該也有類似函數。
PC_GetKey() 函數檢查是否有按鍵被按下。如果有按鍵被按下,函數返回其值。這個函數使用了 Borland C/C++的 kbhit()和 getch()函數,其它 DOS 環境下的 C 編譯應該也有類
似函數。
函數 PC_SetTickRate()允許用戶為 μC /OS-II 定義頻率,以改變鐘節拍的速率。在 DOS下,每秒產生 18.20648 次時鐘節拍,或每隔 54.925ms 一次。這是因為 82C54 定時器芯片沒有初始化,而使用默認值 65,535 的結果。如果初始化為 58,659,那么時鐘節拍的速率就會精確地為 20.000Hz。筆者決定將時鐘節拍設得更快一些,用的是 200Hz(實際是上是199.9966Hz)。注意 OS_CPU_A.ASM 中的 OSTickISR()函數將會每 11 個時鐘節拍調用一次 DOS中的時鐘節拍處理,這是為了保證在 DOS 下時鐘的準確性。如果用戶希望將時鐘節拍的速度設置為 20HZ,就必須這樣做。在返回 DOS 以前,要調用 PC_SetTickRate(),并設置 18 為目標頻率,PC_SetTickRate()就會知道用戶要設置為 18.2Hz,并且會正確設置 82C54。
PC.C 中最后兩個函數是得到和設置中斷向量,筆者是用 Borland C/C++中的庫函數來完成的,但是 PC_VectGet()和 PC_VectSet()很容易改寫,以適用于其它編譯器。
熱門評論
最新評論