• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > MC68K的C編譯器實現μC/OS-II向MC68K移值解析方案

    MC68K的C編譯器實現μC/OS-II向MC68K移值解析方案

    作者: 時間:2012-06-19 來源:網絡 收藏

    一、 CPU簡介

    本文引用地址:http://www.czjhyjcfj.com/article/171281.htm

    及68020、68040等的著名的MOTOROLA32位微處理器,和與之兼容的68K、CPU32、CPU32+等CPU擴充定時處理單元TPU、隊列串行模塊QSM、系統控制模塊和RAM等組成MC683xx系列單片機。

    CPU32 內部有8個32位通用數據寄存器,8個32位通用地址寄存器。8個通用數據寄存器可作為累加器使用,也可看成C語言中各種類型的變量;8個通用地址寄存器,可作為變址寄存器使用,也可看成C語言中的指針型變量。CPU32有獨立的用戶堆棧指針和系統堆棧指針,可區分程序區、數據區、系統區、用戶區等存儲空間,有7級中斷。

    μ的移值,需要有MC68K的C。我們使用的HIWARE公司的C。該C允許嵌入行匯編。

    二、移植中所需修改的文件

    和CPU相關的文件主要有三個:C語言文件OS_CPU32.C、頭文件OS_CPU32.H和匯編文件OS_CPU32.ASM。

    1.INCLUDES.H文件

    INCLUDES.H 是主頭文件,在所有后綴名為.C文件的開始都包含INCLUDES.H文件。對于不同類型的處理器,用戶需要改定INCLUDES.H文件,增加自己的頭文件,但必須加在文件末尾。在安裝μ的時候,附帶了幾個移植實例,例如,針對Intel 80x86的代碼安裝到IIL目錄。我們為MC68K編寫的移植實例都放在II下,在INCLUDES.H文件中增加有:

    #include iiK_CPU32.ASM

    #include iiK_CPU32.C

    #include iiK_CPU32.H

    2.OS_CPU32.H文件

    OS_CPU32.H文件中定義了與硬件相關的基本信息:

    typedef unsigned char INT8U; /*無符號8位數*/

    typedef signed char INT8S; /*帶符號8位數*/

    typedef unsigned int INT16U; /*無符號16位數*/

    typedef signed int INT16S; /*帶符號16位數*/

    typedef signed long INT32S; /*帶符號32位數*/

    typedef unsigned int OS_STK; /*堆棧入口寬度為16位*/

    #define OS_STK_GROWTH1 /*堆棧由高地址向低地址增長*/

    #define UCOS 0 /*用于任務切換的軟中斷*/

    define OS_TASK_SW() _TRAP(UCOS)

    #define OS_ENTER_CRITICAL() move.w#$2700,SR /*進入臨界區*/

    #define OS_EXIT_CRITICAL() move.w #$2000,SR /*退出臨界區*/

    (1)數據類型

    由于不同的處理器有不同的字長,μ的移植需要重新定義一系列的數據結構。由于 MC68K為32位MCU,整數(int)類型數據為16位,長整開有(long)為32位。在MC68K中堆棧都是按字進行操作的,所以堆棧數據類型 OS_STK聲明為16位。所有的堆棧必須用OS_STK聲明。

    (2)代碼臨界區

    μC/OS -II在進入系統臨界代碼區之間要關中斷,等到退出臨界區后再打開,從而保護核心數據不被多任務環境下的其他任務或中斷破壞。在MC68K中,開關中斷可以通過設置狀態寄存器SR中的中斷屏蔽位來。μC/OS-II中的宏OS_ENTER_CRITICAL()定義將狀態寄存器的中斷屏蔽位置位,屏蔽所有的七級中斷;OS_EXIT_CRITICAL()定義將狀態寄存器的中斷屏蔽位清零,打開所有的七級中斷。這種處理方法非常簡單,但CPU32提供分級中斷機制得不到使用。如果要使用分級中斷,必須改寫一些相關的函數,將在第4節中闡明。

    (3)堆棧方向

    MC68K處理器的堆棧是由高地址向低地址遞減的,所以OS_STK_GROWTH必須設置為1。

    (4)OS_TASK_SW()函數的定義

    在μC/OS -II中,OS_TASK_SW()用來任務切換。就緒任務的堆棧初始化應該模擬一次中斷發生后的樣子,椎棧中應該按入棧次序設置好各個寄存器。 OS_TASK_SW()函數模擬一次斷過程,在中斷返回的進修進行任務切換。CPU32有16個軟中斷可供選用,稱為陷阱TRAP調用。中斷程序程序的入口必須指向匯編函數OSCtxSw()。

    我們在μC/OS-II所提供的例程中使用的0號陷阱調用,由下面的語句完成定義:

    #define OS_TASK_SW() -TRAP(UCOS)


    上一頁 1 2 3 4 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 铜川市| 沐川县| 西青区| 大邑县| 昌乐县| 改则县| 龙口市| 临桂县| 利津县| 应用必备| 泰州市| 湖北省| 三亚市| 安义县| 连江县| 原阳县| 项城市| 田阳县| 亳州市| 阜康市| 双桥区| 铁力市| 石柱| 永安市| 平安县| 普安县| 桐乡市| 永川市| 华蓥市| 平舆县| 广丰县| 和田市| 台南县| 武定县| 岚皋县| 都江堰市| 大英县| 永泰县| 古交市| 闽侯县| 恩平市|