音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

一步一步移植ucosii(for 51,V2.52版本)

作者:gwnpeter 欄目:單片機(jī)
一步一步移植ucosii(for 51,V2.52版本)
    移植ucosii并不是一件很復(fù)雜的事情,主要是需要了解操作系統(tǒng)的工作原理,歸根結(jié)底就是堆寨的處理和任務(wù)的切換,《嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II(第二版)》上有對(duì)移植很關(guān)鍵的解析,Keil目錄下的A51.pdf C51.pdf也會(huì)對(duì)移植提供非常有效的信息。另外,建議使用的察看/編輯軟件是Source Insight,沒(méi)有Source Insight得支持我簡(jiǎn)直不知道如何把ucos Lwip等程序看完。以下是修改的部分:

    1.將所有文件中的與C51編譯器沖突的關(guān)鍵詞pdata替換為ppdata
    2.修改OS_CPU.H文件,
        a.  OS_CPU.H文件中添加了以下語(yǔ)句
            #ifdef __C51__
            #define OS_REENTRANT reentrant
            #else
            #define OS_REENTRANT
            #endif
        b.  修改數(shù)據(jù)類(lèi)型
                //詳見(jiàn)C51.PDF第176頁(yè)
                typedef unsigned CHAR  BOOLEAN;       //結(jié)構(gòu)體里無(wú)法使用bit類(lèi)型
                typedef unsigned CHAR  INT8U;         //無(wú)符號(hào)8位數(shù)
                typedef signed   CHAR  INT8S;         //有符號(hào)8位數(shù)
                typedef unsigned int   INT16U;        //無(wú)符號(hào)16位數(shù)
                typedef signed   int   INT16S;        //有符號(hào)16位數(shù)
                typedef unsigned LONG.html">LONG  INT32U;        //無(wú)符號(hào)32位數(shù)
                typedef signed   LONG.html">LONG  INT32S;        //有符號(hào)32位數(shù)
                typedef float          FP32;          //單精度浮點(diǎn)數(shù)
                typedef double         FP64;          //雙精度浮點(diǎn)數(shù)
                
                typedef unsigned CHAR  OS_STK;        //棧單元寬度為8比特
                typedef unsigned CHAR  OS_CPU_SR;     
                
                #define BYTE           INT8S          //兼容以前版本的數(shù)據(jù)類(lèi)型
                #define UBYTE          INT8U          //uC/OS-II可以不用這些數(shù)據(jù)類(lèi)型
                #define WORD           INT16S
                #define UWORD          INT16U
                #define LONG           INT32S
                #define ULONG          INT32U
        c.  修改中斷宏定義,以及堆寨方向
                #define  OS_CRITICAL_METHOD    1

                #if      OS_CRITICAL_METHOD == 1
                #define  OS_ENTER_CRITICAL()  EA=0    //關(guān)中斷
                #define  OS_EXIT_CRITICAL()   EA=1    //開(kāi)中斷
                #endif
                
                #define  OS_STK_GROWTH    0           //MCU-51堆棧從下往上增長(zhǎng)  1=向下,0=向上
    3.除函數(shù)OSStartHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickInit(),OSTickISR(),以外其他函數(shù)均使用OS_REENTRANT定義為可重入函數(shù).另外函數(shù)OSTaskStkInit(),OSTaskCreate(),OSTaskCreateExt(),傳遞的參數(shù)中含有函數(shù)指針,必須定義為可重入函數(shù)的函數(shù)指針.
        例如修改之前的OSTaskStkInit()函數(shù)是,
        OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt);
        修改之后的OSTaskStkInit()函數(shù)是,
        OS_STK *OSTaskStkInit (void (*task)(void *pd) OS_REENTRANT, void *ppdata, OS_STK *ptos, INT16U opt) OS_REENTRANT;
    4.因?yàn)樽兞縊STCBCur,OSTCBHighRdy,OSRunning,OSPrioCur,OSPrioHighRdy比較常用,所以定義為idata空間,因而在匯編程序中調(diào)用的時(shí)候需要使用相應(yīng)的調(diào)用方式。
    5.必須在StartUp.a51文件中做好Reentrant Stack(可重入函數(shù)堆寨)的初始化工作.否則工作不正常.
        XBPSTACK        EQU     1       ; set to 1 if large reentrant is used.
    6.編寫(xiě)函數(shù)OSStartHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickInit(),OSTickISR(),OSTaskStkInit(),需要根據(jù)《嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II(第二版)》提供的思想進(jìn)行,具體的解析在我的程序中有說(shuō)明。
    7.定時(shí)器的開(kāi)啟理論上必須放在第一個(gè)進(jìn)程,但是因?yàn)槭状稳种袛嗟拈_(kāi)啟是在OSStartHighRdy()函數(shù)中的,實(shí)際上定時(shí)器是否開(kāi)啟并
2樓: >>參與討論
12864
強(qiáng)!
頂一下。

3樓: >>參與討論
yangtse

 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)問(wèn)大家,打印機(jī)上用兩相(4引線)步進(jìn)電機(jī)怎么驅(qū)動(dòng)?
問(wèn):89c51 與 89c52 的區(qū)別
有誰(shuí)知道GPS接收機(jī)的數(shù)據(jù)通訊格式?
有沒(méi)有辦法讓輸入電壓5-12V時(shí)輸出電壓穩(wěn)定輸出5V(250mA)?
請(qǐng)問(wèn)在#define中一行寫(xiě)不完該如何換行接著寫(xiě)?
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)