在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于C8051F015芯片在開發板上實現μC/OS-II的移植

電子設計 ? 來源:單片機與嵌入式系統應用 ? 作者:江平新 , 容太平 ? 2020-09-11 17:40 ? 次閱讀

嵌入式應用中,使用RTOS的最主要原因是提高系統的可靠性,其次是提高開發效率、縮短開發周期。μC/OS-II 是一個基于優先級的搶占式實時內核,支持56 個用戶任務,90%的代碼使用標準的ANSI C語言書寫,程序可讀性強,移植性好,代碼可固化,可裁剪,非常靈活。C8051F是美國Cygnal公司生產的與51系列兼容的微控制器,流水線指令結構70%的指令的執行時間為1個或2個系統時鐘周期。當時鐘頻率為25MHz時,速度可達25MIPS,是一款不錯的片上系統。

1 開發工具和運行環境

實現μC/OS-II的移植,要求所用的C編譯器支持混合編程KEIL C51可為眾多的8051派生器件編程。我們選用的是KEIL7.02集成開發環境,仿真板基于C8051F015芯片。

2 移植中所需修改的文件

CPU相關的文件主要有三個,分別是匯編文件OS_CPU_A.ASM、C語言文件 OS_CPU_C.C和頭文件OS_CPU.H。

2.1 OS_CPU.H文件

OS_CPU.H文件中定義了數據類型及與硬件相關的基本信息。其中改動部分如下:

基于C8051F015芯片在開發板上實現μC/OS-II的移植

在C8051F中,堆棧都是按字節操作的,故數據類型OS_STK聲明為8位。方向從低地址向高地址方向遞增,所以OS_STK_GROWTH設置為 0。μC/OS-II在進入系統臨界代碼區之前要關中斷,等到退出臨界區后再打開,以保護核心數據不被多任務環境下的其它任務或中斷破壞。開、關中斷可通過設置SFR中的中斷屏蔽位實現。在關中斷時,先將IE的內容保存在全局變量IE_ SHADOW中,然后關中斷;退出臨界區時,還原IE_SHADOW的值。OS_TASK_SW()用來實現任務切換。就緒任務的堆棧初始化應該模擬一次中斷發生后的樣子,堆棧中應該按入棧次序設置好各個寄存器。OS_TASK_SW()函數模擬一次中斷過程,在中斷返回的時候進行任務切換。由于 C8051F015沒有軟中斷,故直接定義宏OS_TASK_SW()為函數OSCtxSw()。

2.2 OS_CPU_A.ASM文件

編譯器將每個文件作為一個模塊,編譯模塊以主名命名,稱為編譯模塊名,用NAME 來聲明。因此,應在文件頭部聲明NAME OS_CPU_A。

函數有程序部分和局部變量部分,它們分別放在獨立的段中。在大模式下,段名聲明的固定格式為 ?PR?函數名?模塊名 SEGMENT CODE。因此需要將OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()用上面的格式一一聲明。如?PR?OSStartHighRdy?OS_CPU_A SEGMENT CODE,本模塊實現的函數需要用PUBLIC聲明,如PUBLIC OSStartHighRdy等。

C51將所有定義說明的數據標識符轉換為大寫字符,對函數則根據有無寄存器參數傳送和函數是否可重入進行換名,如:void OSIntEnter(void) reentrant函數的名字OSIntEnter換成_?OSIntEnter。這些規則可從編譯后的LST文件中看出。程序中聲明引用的五個全局變量為OSTCBCur、OSTCBHighRdy、OSRunning、OSPrioCur、OSPrioHighRdy,聲明格式是EXTRN IDATA (OSTCBCur)等。調用四個外部子程序OSTaskSwHook()、OSIntEnter()、OSIntExit()、 OSTimeTick(),固定格式為:EXTRN CODE (_?OSTaskSwHook)等。

由于C8051F的堆棧指針只有8位,只能指向內部數據區的256個字節,因此,當前運行的任務的堆棧在IDATA區,堆棧大小為40H(64字節),堆棧起點由KEIL決定。通過標號可以獲得KEIL分配的SP起點,代碼如下:

?STACK SEGMENT IDATA

RSEG ?STACK

OSStack:

DS 40H

OSStkStart IDATA OSStack-1

為簡化子程序特定義壓棧出棧宏。壓棧的次序為PSW、ACC、B、DPL、DPH、R0~R7,出棧的次序與入棧相反。

PUSHALL MACRO

IRP REG, 《SW,ACC, B, DPL, DPH, 0, 1, 2, 3, 4, 5, 6, 7》

PUSH REG

ENDM

POPALL MACRO

IRP REG, 《7, 6, 5, 4, 3, 2, 1, 0, DPH, DPL, B, ACC, PSW》

POP REG

ENDM

具體函數的修改部分見本刊網絡補充版(http://www.dpj.com.cn)。

2.3 OS_CPU_C.C文件

移植μC/OS-II 需要在OS_CPU_C.C中定義六個函數,而實際上需要定義的只有OSTaskStkInit()一個函數。該函數用來初始化任務的堆棧。初始狀態的堆棧只須初始化?C_XBP (仿真堆棧指針)、任務地址及堆棧的長度。由于只有INC DPTR指令,故返回棧的最低地址,且最低地址處存放棧的長度,方便用匯編語言實現任務的切換。堆的大小可根據任務的實際情況自行確定,由參數 ppdata所指的值確定。

void *OSTaskStkInit (void (*task)(void *pd), void *ppdata,

void *ptos, INT16U opt) reentrant

{

OS_STK *stk;

INT8U HeapSize;

HeapSize=*(INT8U *)ppdata;

opt = opt;

stk = (OS_STK *)ptos+HeapSize+2;

*stk++ = 15;

*stk++ = (INT16U)task & 0xFF;

*stk++ = (INT16U)task 》》 8;

stk = (OS_STK *)ptos+HeapSize+2;

*--stk = (INT16U) (ptos+HeapSize-1) 》》 8;

*--stk = (INT16U) (ptos+HeapSize-1) & 0xFF;

return ((void *)stk);

}

3 可重入函數

因為51系列堆??臻g的限制, KEIL編譯器沒有像大系統那樣使用調用堆棧。一般C語言調用過程中,會把過程的參數和使用的局部變量入棧。為了提高效率,編譯器沒有提供這種堆棧,而是提供一種壓縮棧,每個過程被給定一個空間用于存放局部變量。過程中的每個變量都放在這個空間的固定位置,當遞歸調用這個過程時,會導致變量被覆蓋。編譯器允許將函數定義成可重入函數,由reentrant關鍵字指定,可重入函數可被單獨保存。因為這些堆棧是模擬的,可重入函數一般都比較大,運行起來也比較慢。模擬棧不允許傳遞bit類型的變量,也不能定義局部位標量。移植中最好是將可能被多個任務使用的函數定義成可重入函數。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7844

    瀏覽量

    153337
  • 芯片
    +關注

    關注

    459

    文章

    51925

    瀏覽量

    433573
  • 開發板
    +關注

    關注

    25

    文章

    5389

    瀏覽量

    100832
收藏 人收藏

    評論

    相關推薦

    基于GP32開發板實現μC/OS-II內核的移植

    80X86CPU移植,相信讀者通信學習,已經對移植的過程和步驟有了一定的了解。ΜC/OS-II最初是為摩托羅拉68HC11系列單片機設計
    的頭像 發表于 10-04 17:15 ?3381次閱讀
    基于GP32<b class='flag-5'>開發板</b><b class='flag-5'>上</b><b class='flag-5'>實現</b>μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>內核的<b class='flag-5'>移植</b>

    μC/OS-II在SOC芯片C8051F041移植

    C8051F041[6]。因此,本文將首先介紹壓力智能控制的硬件電路,然后針對硬件電路,將 μC/OS-II移植到單片機
    發表于 07-23 07:53

    如何實現μC/OS-II在AT89C51移植?

    μC/OS-II在AT89C51移植實現過程是怎樣進行的?μ
    發表于 04-27 07:08

    μC/OS-IIC8051F移植怎么進行?

    μC/OS-IIC8051F移植怎么進行?
    發表于 04-28 06:38

    如何實現μC/OS-II系統的移植?

    如何實現μC/OS-II系統的移植?
    發表于 04-28 06:01

    μC/OS-II 在Nios移植

    首先介紹嵌入式實時操作系統μC/OS-II 和Nios 嵌入式處理器, 分析μC/OS-II 移植對目標處理器的要求, 重點介紹
    發表于 03-08 09:31 ?90次下載

    μC/OS-II 實時內核下的A/D驅動程序設計

    詳細分析在μC/OS-II 實時內核下驅功程序讀取A/D 的三種方法;闡述C8051F015 單片機的A/D 轉換器的配置、轉換特點及其驅動程序讀取A/D 采用的方法; 針對C8051F015
    發表于 04-15 11:01 ?17次下載

    μC OS-II 在Nios 移植1

    首先介紹嵌入式實時操作系統μC/OS-II 和Nios 嵌入式處理器, 分析μC/OS-II 移植對目標處理器的要求, 重點介紹μ
    發表于 05-16 14:32 ?28次下載

    嵌入式μC/OS-II在LPC2104移植及通信設計

    分析了μC/OS-II 操作系統的特點及其在嵌入式系統應用領域的優勢,探討了μC/OS-II 操作系統在LPC2104 處理器
    發表于 06-19 09:12 ?16次下載

    μC/OS-II 在LPC2210移植實現

    對嵌入式實時操作系統μC/OS-II 的組成和LPC2210 微處理器進行了簡單介紹。在此基礎,詳細介紹了將μC/OS-II
    發表于 07-08 08:57 ?41次下載

    uC/OS-IIC8051F020 單片機上的移植

    詳細介紹了uC/OS-II 的V2.52 版本在C8051F020 單片機上的移植。相對V2.51之前的版本,對中斷任務切換函數的移植做了簡化。文章還詳細解釋了一些和編譯器相關的基本概
    發表于 08-15 09:01 ?71次下載

    μC/OS-II在PC機上移植的設計與實現

    本文介紹了μC/OS-II移植到PC機上的過程,使μC/OS-II應用系統程序在PC機上脫離DOS或Windows環境運行。著重介紹了Boo
    發表于 09-02 08:51 ?14次下載

    μC/OS-II在S3C44BOX處理器移植

     摘要:介紹實時操作系統μC/OS-II的特點和內核結構,給出μC/OS-II在Samsung嵌入式S3C44BOX ARM7
    發表于 03-11 12:39 ?1378次閱讀
    μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>在S3<b class='flag-5'>C</b>44BOX處理器<b class='flag-5'>上</b>的<b class='flag-5'>移植</b>

    實時嵌入式操作系統μCOS-II在MPC555移植

    摘要:介紹了實時操作系統μCOS-II的特點和內核結構,并首次實現了μC/OS-II在摩托羅拉處理器MPC555
    發表于 03-11 12:42 ?869次閱讀
    實時嵌入式操作系統μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>在MPC555<b class='flag-5'>上</b>的<b class='flag-5'>移植</b>

    μC/OS-II在EP7312移植

    μC/OS-II在EP7312移植首先介紹μC/OS-II操作系統的特點,重點分析μ
    發表于 06-16 11:24 ?1235次閱讀
    μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>在EP7312<b class='flag-5'>上</b>的<b class='flag-5'>移植</b>
    主站蜘蛛池模板: 在线观看视频你懂得 | 国产成人午夜精品影院游乐网 | 狠狠色伊人亚洲综合第8页 狠狠色依依成人婷婷九月 狠狠色影院 | 伊人久久亚洲综合天堂 | 国产欧美乱码在线看 | 最新eeuss影院第256页 | 国产一区二区三区免费大片天美 | 青草国内精品视频在线观看 | 九九热九九 | 九九九精品视频免费 | 日本乱妇| 亲女乱h文小兰第一次 | 亚洲欧美日韩在线观看你懂的 | 国产精品日韩欧美亚洲另类 | 色噜噜狠狠狠狠色综合久 | 四虎在线成人免费网站 | 色老头影院 | 激情五月综合综合久久69 | 欧美性白人极品1819hd高清 | 亚洲特级毛片 | 久久婷婷影院 | 四虎永久免费地址 | 婷婷亚洲视频 | 色婷婷六月丁香七月婷婷 | 美女一级毛片毛片在线播放 | 欧美色视频在线观看 | 中文永久免费看电视网站入口 | 久久精品综合视频 | 免费观看黄色网址 | 国产精品福利一区二区亚瑟 | 亚洲色啦啦狠狠网站 | 欧美一区福利 | 五月婷婷之婷婷 | 免费看片aⅴ免费大片 | 亚洲视频在线不卡 | 天堂在线视频精品 | 日剧天堂 | 免费无遮挡很爽很污很黄 | 欧美另类69xxxxx性欧 | abc119影院成人免费看 | 国产欧美日韩va |