ucosII移植要修改的文件
首先,二話不說,先上ucos官網,官網才是學習的王道啊。ps:所有的知識都是參考官網。
移植ucos II 到一個芯片上,只需要修改下面三個文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。
具體來說,移植主要包括以下幾項內容
(1).OS_CPU.H :用#define設置一些常量的值,聲明10個數據類型,用#define聲明三個宏。
(2).OS_CPU_C.C : 用C語言編寫六個簡單的函數。
(3).OS_CPU_A.ASM : 編寫四個匯編語言函數。
下面以移植到lPC2292上為例,理解下移植過程。
(1).首先看OS_CPU.H這個文件
下圖是我項目中的OS_CPU.H文件,可以看到,它包括兩部分的代碼,第一部分是定義與編譯器無關的數據類型,第二部分是與ARM7體系結構
相關的定義。
為什么要定義數據類型呢?
因為不同的微處理器有不同的字長,所以μC/OS-Ⅱ的移植包括了一系列的類型定義以確保其可移植性。這也是第一部分程序的作用。
程序用有這樣的一句
#define OS_STK_GROWTH 1
這一句程序有什么作用?
它的作用是定義堆棧方向,絕大多數的微處理器和微控制器的堆棧是從上往下長的。但是某些處理器是用另外一種方式工作的。μC/OS-Ⅱ
被設計成兩種情況都可以處理,只要在結構常量OS_STK_GROWTH中指定堆棧的生長方式(如下所示)就可以了。置OS_STK_GROWTH為0表示堆棧從
下往上長。置OS_STK_GROWTH為1表示堆棧從上往下長。
(2).其次看OS_CPU_C.C這個文件
在這個文件里我們需要編寫以下六個函數
OSTaskStkInit()
//初始化任務堆棧結構
OSTaskCreateHook()
//允許用戶或使用用戶的移植實例的用戶擴展μC/OS-Ⅱ的功能
OSTaskDelHook()
//該函數在把任務從μC/OS-Ⅱ的內部任務鏈表中解開之前被調用
OSTaskSwHook()
//當發生任務切換的時候調用OSTaskSwHook()
OSTaskStatHook()
//用戶可以用OSTaskStatHook()來擴展統計功能
OSTimeTickHook()
OSTaskTimeHook()在每個時鐘節拍都會被OSTaskTick()調用
事實上,上面的六個函數只有OSTaskStkInit()是必須編寫的,而其它的五個函數只需定義就可。
在我的項目里OS_CPU_C.C,也編寫了OSTaskStkInit()這個函數。
(3).最后看OS_CPU_A.ASM這個文件
這個文件都是匯編,絕對可以讓你看得醉生欲死,欲罷不能,你懂我的。
在OS_CPU_A.ASM這個文件里要求用戶編寫四個簡單的匯編語言函數:
OSStartHighRdy()
OSCtxSw()
OSIntCtxSw()
// OSIntCtxSw()是μC/OS-Ⅱ(和μC/OS)中唯一的與編譯器相關的函數
OSTickISR()
編寫上面四個函數要求對cpu的工作原理有深入的理解。
轉載于:https://www.cnblogs.com/cjiejie/articles/5361802.html
總結
以上是生活随笔為你收集整理的ucosII移植要修改的文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: parseInt和valueOf
- 下一篇: opengl启动过程