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

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

原創(chuàng)-新鮮出爐的最詳盡說明ucos2.84 移植到51in keil

作者:roguebear 欄目:嵌入式系統(tǒng)
原創(chuàng)-新鮮出爐的最詳盡說明ucos2.84 移植到51in keil
//原創(chuàng)-新鮮出爐的最詳盡說明ucos2.84portto51inkeil.txt

    在移植的時候 盡量保證得到的源代碼改動最少
    并且調(diào)試方便 而且目錄結(jié)構(gòu)分類清晰

網(wǎng)上的各個項目都有如下特點:
    1:一來就吭哧吭哧修改頭文件,每個文件都#include "includes.h"
    2: ucos和其他文件 或者放在一個文件夾 或者在項目里面不管3721都加上
       跳來跳去頭都是大的 而且調(diào)試的時候出些莫名其妙的問題:比如
       設(shè)不了斷點 或者調(diào)試無法進入c文件等等

我的設(shè)想:前提 得到ucos2.84
   1: 改動盡量少  即不按常規(guī)修改里面的#include "includes.h"等
                   ucos說放哪里我們就放哪里
   2:  項目結(jié)構(gòu)和文件存放結(jié)構(gòu)合理,該有的有 不該有的就沒有
   3:  調(diào)試時編譯器不會出現(xiàn)怪問題
   4: 文檔盡量清楚 每處和每步小小的修改都要說明

建議最開始看完 楊屹  大蝦的文章



[里面的os_cfg_r.h->改成os_cfg.h] 至此,是ucos里面的[第一處修改]

1:  建立項目文件 拷貝原始文件 整理文件夾
目錄如下:
   FirstVersion:  根目錄 project.uv就放下面
         -ucos :  拷貝ucos2.83源代碼和os_cpu_a.a51 等凡是ucos相關(guān)的到下面  去掉只讀和存檔屬性  自己加一個app_cfg.h(ucos2.83增

加的) 里面內(nèi)容是#include <reg51.h>嘿嘿
         -OUTPUT:

項目設(shè)置:
    -SourceGroup
                ->STARTUP.A51  main.c
   --ucos
                ->os_task.c  os_core.c


   
2: 設(shè)置
    1: Target1 -> options->OUTPUT和Listing里面點"SELECT Folder for Objects" 改為\OUTPUT
    2:  Target1->options -> C51和A51里面的 Include Paths->加入ucos
    4:  Target1 -> options->Target的MemoryModel和CodeRomSize都用Large

編譯: 有四個警告 'OSIntCtxSw': missing function-prototype
                  'OSStartHighRdy': missing function-prototype
                  'OSCtxSw': missing function-prototype
                   UCOS\OS_CORE.C(1356): warning C275: expression with possibly no effect
      第四個警告是由于OS_TaskIdle()里面
     (void)p_arg;        /* Prevent compiler warning for not using 'parg'      */
    沒有起到作用 改成p_arg = p_arg;即可。 至此,是在ucos里面的[第二處修改]


3:加入 OS_CPU_C.C  不要問這個文件哪里來的 地球人都知道
   在不管它通不通前 還有修改
    1: 最前面保持跟其他.c文件一致 加入
#ifndef  OS_MASTER_FILE
#include <ucos_ii.h>
#endif


    2:加入若干個函數(shù)的函數(shù)體 大體都是帶"hook"的, 這些個函數(shù)只在ucos_ii.h有個聲明,但由于只有頭文件有定義沒有函數(shù)體 ,keil會

把它編譯成LJMP STARTUP1的語句。知道有什么后果了吧
注意#if的條件頭文件和c文件要一致  

   在這里感覺ucos是不是搞了點”技術(shù)處理“?反正n個函數(shù)頭文件和c文件的#if條件不一致
一不小心會造成LJMP STARTUP1!  注意把os_core.c ucos_ii.h和os_cpu_c里面都要改完
至此,是在ucos里面的[第三處修改]  要改的地方還不少

//in ucos_ii.h
#if OS_CPU_HOOKS_EN
void          OSInitHookBegin       (void);
void          OSInitHookEnd         (void);
void          OSTCBInitHook         (OS_TCB          *ptcb);
void          OSTaskCreateHook      (OS_TCB          *ptcb);
void          OSTaskDelHook         (OS_TCB          *ptcb);
void          OSTaskStatHook        (void);
void          OSTaskIdleHook        (void);    
#endif

#if OS_TASK_SW_HOOK_EN
void          OSTaskSwHook          (void);
#endif

#if OS_TIME_TICK_HOOK_EN
void          OSTimeTickHook        (void);
#endif


4: 現(xiàn)在開始改OS_CPU_C.C里面的函數(shù)
    將OSTaskStkInit()改成跟ucos_ii.h里面一樣。具體就是原來里面yy大蝦的函數(shù)是
void *OSTaskStkInit (void (*task)(void *pd), void *ppdata, void *ptos, INT16U opt)
   總之網(wǎng)上各個版本都是ppdata..呵呵 。ucos2.83里面用的是p_arg.我們把它修改成
OS_STK       *OSTaskStkInit         (void           (*task)(void *p_arg) ,
                                     void            *p_arg,
                                     OS_STK          *ptos,
                                     INT16U           opt)
編譯能通過 先不管運行起來對不對



5: 在ucos組里面加入os_cpu_a.a51 不要問這個文件哪里來的 地球人都知道
編譯  會出現(xiàn)錯誤: *** ERROR L102: EXTERNAL ATTRIBUTE MISMATCH
   這是因為os_cpu_a.a51里面
        EXTRN IDATA (OSTCBHighRdy)
        EXTRN IDATA (OSRunning)
        EXTRN IDATA (OSPrioCur)
        EXTRN IDATA (OSPrioHighRdy)
   對引用的外部變量作了idata的定義,而ucos_ii.h里面沒有

在這里 os_cpu.h里面  先增加一個#define DATATYPE_1  idata
在ucos_ii.h找到這四個變量 增加idata定
2樓: >>參與討論
roguebear
附件在這里
../uploadfile/200705151419265928.jpg

點這里下 擴展名改rar

3樓: >>參與討論
桂電飛天鼠
謝謝分享!
寫得非常詳細呀~~!
回學校試試!

4樓: >>參與討論
roguebear

帖子居然在這里找到了。。。

現(xiàn)在有了更新。。2.86  結(jié)構(gòu)調(diào)整了。不用在改那些內(nèi)容。直接copy就可以。待會傳上來

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教內(nèi)存SPD結(jié)構(gòu)中第23和25字節(jié)是什么意思?請大蝦指點,謝謝!
推薦
S3C2440 的測試代碼
發(fā)布一個ARM核心通用的內(nèi)存管理程序和上位機模擬測試程序
ARM RealView 開發(fā)工具代理,需要的進
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號