官术网_书友最值得收藏!

2.3 嵌入式操作系統下載與運行

了解了μCOS-Ⅱ對上以及對下的接口定義后,接著要了解的是移植μCOS目標處理器必須滿足的條件。這些條件包括;

  • 處理器的C編譯器能產生可重入代碼,且用C語言就可以打開和關閉中斷。
  • 處理器支持中斷,并能產生定時中斷。
  • 處理器支持足夠的RAM(幾KB),作為多任務環境下的任務堆棧。
  • 處理器有將堆棧指針和其他MCU寄存器讀出和存儲到堆棧或內存中的指令。

前面介紹的Spartan-6的技術特征,以及MicroBlaze軟核的特性,完全可以滿足以上要求。那么下來就要做移植了,所謂的移植就是在理解了處理器和C編譯器的技術細節之后,修改與處理器相關的代碼。具體有如下內容:

  • OS_MCU.H中需要設置一個常量來標識堆棧增長方向。

#define OS_STK_GROWTH 1 /*microblaze 堆棧從高向低增長*/

  • OS_MCU.H中需要聲明幾個用于開關中斷和任務切換的宏。

#define OS_CRITICAL_METHOD 3 /*采用關中斷定義的第3種 */

#define OS_ENTER_CRITICAL() cpu_sr=OS_CPU_SR_Save();

#define OS_EXIT_CRITICAL() OS_CPU_SR_Restore(cpu_sr);

  • OS_MCU.H中需要針對具體處理器的字長重新定義一系列數據類型。

如:typedef unsigned char BOOLEAN;typedef unsigned char INT8U;

  • OS_MCU_A.ASM需要改寫4個匯編語言的函數。

包括OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OS_CPU_ISR()。

  • OS_MCU_C.C需要用C語言編寫6個簡單函數。

包括OSTaskStkInit()、OSInitHookBegin()、OSInitHookEnd()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskIdleHook()、OSTaskStatHook()、OSTaskSwHook()、OSTCBInitHook()、OSTimeTickHook()等。

  • 修改主頭文件INCLUDES.H,將前面的三個文件和其他自己的頭文件加入。
主站蜘蛛池模板: 济南市| 五家渠市| 顺平县| 越西县| 吕梁市| 桐柏县| 湄潭县| 久治县| 新绛县| 寿宁县| 定陶县| 铜陵市| 德化县| 阜阳市| 乐昌市| 陕西省| 阜康市| 游戏| 上虞市| 西盟| 鲜城| 顺平县| 商南县| 吉木乃县| 长治市| 门源| 濉溪县| 汽车| 合江县| 虞城县| 柏乡县| 万全县| 永兴县| 金平| 齐河县| 沙田区| 太康县| 潞西市| 金山区| 扶绥县| 台东县|