中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 實時多任務系統(tǒng)µC/OS-Ⅱ在DSP上的移植

        實時多任務系統(tǒng)µC/OS-Ⅱ在DSP上的移植

        作者: 時間:2012-03-26 來源:網(wǎng)絡 收藏

        0. 引言

        μC/OS-Ⅱ內(nèi)核是一個強占式優(yōu)先級調(diào)度的系統(tǒng),能管理63個任務,支持旗語、信號量、互斥信號量、隊列和消息郵箱,是一個是典型的嵌入式實時。它最早由Jean J. Labrosse創(chuàng)作,源碼完全公開,已有眾多應用范例,可靠性能得到保證,內(nèi)核小,移植性好。TI的C2000系列DSP處理器 片內(nèi)集成16路10位AD,4個通用定時器,8個16位PWM通道,4個CAP捕獲單元,41路I/O通道,以及SPI、 RS232、CAN等通信接口,豐富的片內(nèi)資源,使得控制器不需任何擴展就能滿足所有的功能要求,且冗余很少。

        DSP處理器在數(shù)學運算方面的優(yōu)勢也為智能化過程所需的數(shù)據(jù)處理提供了支持。指令采用4級流水線操作,最高能以40M的系統(tǒng)時鐘工作,再加上合適的RTOS的調(diào)度,完全能保證系統(tǒng)的實時性。其開發(fā)系統(tǒng)TMS320C2XX Code Composer Studio滿足μC/OS-Ⅱ的移植條件,因此,它是嵌入式計算機控制系統(tǒng)主控制芯片的一個較好選擇。筆者在設計基于CAN的工程機械嵌入式智能顯示儀時,選用2407A做主控制芯片,軟件方面,將實時內(nèi)核μC/OS-Ⅱ移植到該DSP 控制器上,而應用程序是在μC/OS-Ⅱ內(nèi)核基礎上的一系列任務。

        1. μC/OS-Ⅱ的移植

        由于μC/OS-Ⅱ在設計時就已經(jīng)充分考慮了可移植性,所以μC/OS-Ⅱ的移植相對來說比較容易。移植工作包括以下幾個內(nèi)容:(1)用#define設置一個常量的值(OS_CPU.H)(2)聲明10個數(shù)據(jù)類型(OS_CPU.H)(3)用#define聲明三個宏 (OS_CPU.H)(4)用C語言編寫六個簡單的函數(shù)(OS_CPU_C.C)(5)編寫四個匯編語言函數(shù)(OS_CPU_A.ASM);即μC/OS-Ⅱ的移植要修改3個文件OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM。其中匯編語言文件OS_CPU_A.ASM是可選擇的,因為某些C編譯器允許用戶在C語言中插入?yún)R編語言,所以用戶可以將所需的匯編語言代碼直接放到OS_CPU_C.C中。CCS的C編譯器允許在 C語言中嵌入?yún)R編語言,但是由于這種方式破壞了C語言的完整性,因此只提倡在程序開始系統(tǒng)初始化部分少量采用。而在C語言中嵌入實現(xiàn)某一完整功能的多句匯編語言時,就不提倡采用這種方法。所以,移植中還是對OS_CPU_A.ASM做了修改。

        2. 編寫移植代碼

        移植μC/OS-Ⅱ的主要工作是聲明與硬件相關的數(shù)據(jù)類型,定義與中斷有關的宏定義,定義堆棧增長方向宏定義,編寫堆棧初始化函數(shù),HOOK接口函數(shù),任務級上下文切換函數(shù),中斷級上下文切換函數(shù)以及系統(tǒng)時鐘定時服務函數(shù)等。

        2.1 移植OS_CPU.H文件

        (1)一個常量值。OSInit需要知道當OS_TaskIdle() 和OS_TaskStat( ) 函數(shù)建立任務時,堆棧的頂端地址在哪里;其次調(diào)用OSTaskStkChk( )時,μC/OS-Ⅱ需要知道堆棧的底端地址在哪里。所以需要指明堆棧的增長方向。絕大多數(shù)微處理器和微控制器的堆棧是從上往下遞減的,但是也有某些處理器使用的是相反的方式。TMS320LF2407A的堆棧方向是從下往上增長的,所以: #define OS_STK_GROWTH 0;// 堆棧方向是從下往上增長

        (2) 聲明數(shù)據(jù)類型。μC/OS-Ⅱ考慮到通用性,在內(nèi)核中使用了自定義數(shù)據(jù)類型,與編譯器無關,這就要求移植時必須定義微處理器的數(shù)據(jù)類型與μC/OS-Ⅱ的數(shù)據(jù)類型相一致,保證移植后的μC/OS-Ⅱ在微處理器平臺上運行,在移植中應將其聲明為CCS編譯器可識別的類型。這可以由OS_CPU.h頭文件實現(xiàn),程序如下所示。

        typedef unsigned char BOOLEAN;/*定義ucos里的boolean為unsigned char*/

        typedef unsigned char INT8U; /*定義ucos里的INT8U為unsigned char*/

        typedef signed char INT8S; /*定義ucos里的INT8S為signed char*/

        typedef unsigned int INT16U; /*定義ucos里的INT16U為unsigned int*/

        typedef signed int INT16S; /*定義ucos里的INT16S為signed int*/

        typedef unsigned long INT32U; /*定義ucos里的INT32U為unsigned long*/

        typedef signed long INT32S; /*定義ucos里的INT32S為signed long */

        typedef float FP; /*定義ucos里的FP為float*/

        #define OS_STK INT16U /*堆棧入口寬度為16位*/

        由于系統(tǒng)沒有用到OS_CPU_SR類型數(shù)據(jù),所以沒有定義此數(shù)據(jù)類型。

        (3)3個宏定義。μC/OS-Ⅱ在內(nèi)核中通過禁止中斷來保護臨界區(qū),因此,需要在C語言中插入禁止和允許中斷的匯編代碼,DSP里用SETC INTM來屏蔽中斷,用CLRC INTM來使能中斷。所以移植代碼定義了下面兩條宏定義:

        #define OS_ENTER_CRITICAL() asm(" SETC INTM")

        #define OS_EXIT_CRITICAL() asm(" CLRC INTM")

        μC/OS-Ⅱ定義了三種保護臨界區(qū)的方式,此移植版本采用的是最簡單的第一種方法。此種方法就要求中斷關閉的情況下不能調(diào)用μC/OS-Ⅱ的功能函數(shù)。這對于應用來說是可以接受的,所以就選擇了此種模式。TMS320LF2407A支持多種中斷方式,包括可屏蔽硬中斷INT1~INT6,不可屏蔽硬中斷RESET和NMI_VECT,不可屏蔽軟中斷INT8~INT16和INT20~INT31以及中斷陷阱TRAP。因此使用INT31軟中斷來調(diào)用OSCtxSw()來從任務堆棧中恢復處理器所用的寄存器。用INT2的定時器1周期中斷來調(diào)用OSTickISR()。定義模仿INT31中斷的宏,來跳轉(zhuǎn)到INT31

        #define OS_TASK_SW() asm(" INTR 31")

        在中斷向量表里的定義

        .include f2407regs.h

        .global _c_int0, _OSTickISR, RESET, _OSCtxSw,_GRIS5,_adint,_nothing

        .asect "vectors",0

        ……

        INT2 B _OSTickISR ; B _c_int2

        ……

        INT31 B _OSCtxSw ; task switching service vector.

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉