日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 懷著好奇的心情在網(wǎng)上搜索關(guān)于UCOSII移植到51單片機(jī)的資料,步驟都是一樣的,好多都是轉(zhuǎn)載、轉(zhuǎn)載,但是具體的內(nèi)容并沒有說清楚,好不容易搜到一個(gè)把移植過程說的很清楚的帖子,但是后面又說編譯和運(yùn)行過程中出現(xiàn)

懷著好奇的心情在網(wǎng)上搜索關(guān)于UCOSII移植到51單片機(jī)的資料,步驟都是一樣的,好多都是轉(zhuǎn)載、轉(zhuǎn)載,但是具體的內(nèi)容并沒有說清楚,好不容易搜到一個(gè)把移植過程說的很清楚的帖子,但是后面又說編譯和運(yùn)行過程中出現(xiàn)很多問題,我又絕望了。因?yàn)橹皩?duì)51單片機(jī)只是簡(jiǎn)單的學(xué)了一下,對(duì)于移植UCOSII系統(tǒng),還是得花點(diǎn)功夫的。由于我快畢業(yè)了,如果專研于UCOSII移植到51單片機(jī),又得花上我一周的時(shí)間,想想那我的移動(dòng)機(jī)器人得多久才能成功啊,于是,在CSDN上下載已經(jīng)移植到51單片機(jī)上的源代碼,起初我只是試著下來學(xué)習(xí)一下,學(xué)習(xí)怎樣編寫那些與cpu有關(guān)的函數(shù)的,我下載的那個(gè)源代碼是將UCOSII移植到AT91系列上的,我果斷編譯了一下,成功編譯,看一下輸出的hex文件,才19kb。果然我又對(duì)源代碼產(chǎn)生興趣。我從始至終還是沒有靠自己一步一步的將原版的UCOSII移植到51單片機(jī)上。我下面說說移植UCOSII需要做哪些工作吧,也是看書知道的。


一、準(zhǔn)備工作


1. 開發(fā)環(huán)境: Keil C集成開發(fā)環(huán)境


2. 源代碼:UCOSII的源代碼,網(wǎng)上可以自己下載


3. 文件分析:


1)UCOSII文件中與處理器無關(guān)的文件:


OS_CORE.C


OS_FLAG.C


OS_MBOX.C


OS_MEM.C


OS_MUTEX.C


OS_Q.C


OS_SEM.C


OS_TASK.C


OS_TIME.C


UCOS_II.C


UCOS_II.H


以上這些文件在c51移植過程中只需給函數(shù)加上可重入性即可,即在每個(gè)函數(shù)后面添加關(guān)鍵字:reentrant


2)與應(yīng)用相關(guān)的文件:


INCLUDES.H——其中包含51單片機(jī)頭文件和相關(guān)應(yīng)用頭文件


OS_CFG.H——這個(gè)文件對(duì)于要應(yīng)用系統(tǒng)中的相關(guān)工具,如郵箱,信號(hào)等,都要在這個(gè)頭文件中把相關(guān)宏設(shè)置為1


3)與處理器相關(guān)的文件:


OS_CPU.H——相關(guān)的數(shù)據(jù)類型、關(guān)中斷、任務(wù)堆棧方向、任務(wù)切換宏定義等


OS_CPU_A.ASM——一堆的匯編和偽指令,我表示沒去深究,但是是整個(gè)移植的關(guān)鍵所在


OS_CPU_C.C——OSTaskStkInit()函數(shù)和系統(tǒng)中斷定時(shí)器的編寫。


還有一個(gè)重要的思想就是c51堆棧的設(shè)計(jì),我對(duì)于這個(gè)有點(diǎn)頭大,不清楚。


二、開始修改和編寫代碼移植。


我沒有經(jīng)歷過移植的過程,所以我沒有發(fā)言權(quán),我只參考51單片機(jī)牛人的代碼,學(xué)著應(yīng)用就行


由于在CSDN上忘記移植者是誰了,我在這將重要文件中的代碼貼出參考參考,只做交流使用。


includes.h


#ifndef __INCLUDES__

#define __INCLUDES__


#include "uCosiios_cpu.h"

#include "uCosiios_cfg.h"

#include "uCosiiucos_ii.h"

#include"reg51.h"


#endif


OS_CFG.H


#ifndef __OS_CFG_H

#define __OS_CFG_H


#define MaxStkSize 64 /*根據(jù)修改,每個(gè)任務(wù)使用同樣大小的堆棧,這就是每個(gè)堆棧的大小*/


#define OS_MAX_EVENTS 1 /* Max. number of event control blocks in your application ... */

/* ... MUST be > 0 */

#define OS_MAX_FLAGS 1 /* Max. number of Event Flag Groups in your application ... */

/* ... MUST be > 0 */

#define OS_MAX_MEM_PART 1 /* Max. number of memory partitions ... */

/* ... MUST be > 0 */

#define OS_MAX_QS 1 /* Max. number of queue control blocks in your application ... */

/* ... MUST be > 0 */

#define OS_MAX_TASKS 3 /* Max. number of tasks in your application ... */

/* ... MUST be >= 2 */


#define OS_LOWEST_PRIO 4 /* Defines the lowest priority that can be assigned ... */

/* ... MUST NEVER be higher than 63! */


#define OS_TASK_IDLE_STK_SIZE MaxStkSize /* Idle task stack size (# of OS_STK wide entries),使用相同的棧大小*/


#define OS_TASK_STAT_EN 0 /* Enable (1) or Disable(0) the statistics task */

#define OS_TASK_STAT_STK_SIZE MaxStkSize /* Statistics task stack size (# of OS_STK wide entries),使用相同的棧大小*/


#define OS_ARG_CHK_EN 0 /* Enable (1) or Disable (0) argument checking */

#define OS_CPU_HOOKS_EN 1 /* uC/OS-II hooks are found in the processor port files */



/* ----------------------- EVENT FLAGS ------------------------ */

#define OS_FLAG_EN 0 /* Enable (1) or Disable (0) code generation for EVENT FLAGS */

#define OS_FLAG_WAIT_CLR_EN 0 /* Include code for Wait on Clear EVENT FLAGS */

#define OS_FLAG_ACCEPT_EN 0 /* Include code for OSFlagAccept() */

#define OS_FLAG_DEL_EN 0 /* Include code for OSFlagDel() */

#define OS_FLAG_QUERY_EN 0 /* Include code for OSFlagQuery() */



/* -------------------- MESSAGE MAILBOXES --------------------- */

#define OS_MBOX_EN 1 /* Enable (1) or Disable (0) code generation for MAILBOXES */

#define OS_MBOX_ACCEPT_EN 0 /* Include code for OSMboxAccept() */

#define OS_MBOX_DEL_EN 0 /* Include code for OSMboxDel() */

#define OS_MBOX_POST_EN 1 /* Include code for OSMboxPost() */

#define OS_MBOX_POST_OPT_EN 0 /* Include code for OSMboxPostOpt() */

#define OS_MBOX_QUERY_EN 0 /* Include code for OSMboxQuery() */



/* --------------------- MEMORY MANAGEMENT -------------------- */

#define OS_MEM_EN 0 /* Enable (1) or Disable (0) code generation for MEMORY MANAGER */

#define OS_MEM_QUERY_EN 0 /* Include code for OSMemQuery() */



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉