《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > μC/OS-II在C8051F上的移植
μC/OS-II在C8051F上的移植
摘要: 在嵌入式應用中,使用RTOS的最主要原因是提高系統的可靠性,其次是提高開發效率、縮短開發周期。μC/OS-II 是一個基于優先級的搶占式實時內核,支持56 個用戶任務,90%的代碼使用標準的ANSI C語言書寫,程序可讀性強,移植性好,代碼可固化,可裁剪,非常靈活。C8051F是美國Cygnal公司生產的與51系列兼容的微控制器,流水線指令結構70%的指令的執行時間為1個或2個系統時鐘周期。當時鐘頻率為25MHz時,速度可達25MIPS,是一款不錯的片上系統。
關鍵詞: 軟件 μC/OS-II C8051F
Abstract:
Key words :
  在嵌入式應用中,使用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文件中定義了數據類型及與硬件相關的基本信息。其中改動部分如下:
typedef unsigned char OS_STK; /*
堆棧的寬度為8 */
OS_CPU_EXT INT8U IE_SHADOW;
#define OS_ENTER_CRITICAL() IE_SHADOW = IE; IE &= 0x7F /*
關中斷 */
#define OS_EXIT_CRITICAL() IE = IE_SHADOW
/*
恢復中斷 */
#define OS_STK_GROWTH 0
#define OS_TASK_SW() OSCtxSw()

  在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()。
//-------------------------------------------------
//-- www.icwin.net
//-------------------------------------------------
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文件中看出。程序中聲明引用的五個全局變量為OSTCBCurOSTCBHighRdyOSRunning、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、DPLDPH、R0~R7,出棧的次序與入棧相反。
·                           PUSHALL MACRO
IRP REG,
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類型的變量,也不能定義局部位標量。移植中最好是將可能被多個任務使用的函數定義成可重入函數。

                  參考文獻

1 Labrosse Jean J. μC/OS-II
源碼公開的實時嵌入式操作系統. 邵貝貝譯. 北京:中國電力出版社, 2001
此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美激情网站在线观看| 欧美日本在线播放| 国产精品一区二区三区四区| 亚洲一区二区视频| 日韩视频在线免费观看| 亚洲欧洲日产国码二区| 国产一区二区三区久久久久久久久| 99精品热6080yy久久| 欧美日韩国产精品一区| 欧美日韩免费一区二区三区视频| 国产精品三上| 中文无字幕一区二区三区| 亚洲国产视频一区| 欧美一级午夜免费电影| 欧美日韩视频| 亚洲免费在线精品一区| 欧美一级专区免费大片| 久久久精品日韩| 欧美1区视频| 在线观看日韩专区| 午夜视频一区在线观看| 久久久久女教师免费一区| 欧美高清视频www夜色资源网| 午夜久久美女| 亚洲午夜成aⅴ人片| 一区二区激情小说| 国产精品网站视频| 欧美激情一二区| 狠狠综合久久av一区二区小说| 99re热这里只有精品免费视频| 久久九九国产精品| 亚洲图中文字幕| 国内视频精品| 国内精品美女在线观看| 亚洲美女尤物影院| 欧美日本一道本| 亚洲日本电影| 欧美激情第二页| 极品少妇一区二区三区精品视频| 久久全国免费视频| 国产一区二区三区黄| 久久久免费av| 久久中文字幕一区二区三区| 国产午夜久久久久| 久久成人久久爱| 欧美在线播放一区| 亚洲综合清纯丝袜自拍| 在线成人激情视频| 久久国产精品一区二区三区| 欧美.日韩.国产.一区.二区| 久久久综合激的五月天| 久久久久久久久伊人| 国内精品免费午夜毛片| 精品动漫3d一区二区三区免费| 亚洲激情社区| 另类图片综合电影| 亚洲午夜精品国产| 久久综合五月天婷婷伊人| 国产亚洲a∨片在线观看| 国产精品久久久久久久久婷婷| 亚洲午夜激情在线| 亚洲欧美视频在线观看视频| av成人免费观看| 激情久久综艺| 久久精品国产免费看久久精品| 欧美在线视频在线播放完整版免费观看| 国产精品女主播在线观看| 亚洲综合日韩中文字幕v在线| 精品91久久久久| 亚洲国产欧美一区二区三区久久| 欧美日韩大片| 黄色工厂这里只有精品| 在线精品国精品国产尤物884a| 国产色视频一区| 一区二区高清视频在线观看| 亚洲电影免费在线| 国产精品啊v在线| 欧美色图天堂网| 久久综合九色综合网站| 国产精品无码专区在线观看| 亚洲黄色av一区| 国产精品v日韩精品v欧美精品网站| 激情偷拍久久| 国产精品免费区二区三区观看| 久久精品中文字幕一区| 国产精品永久| 一二三四社区欧美黄| 一区二区三区日韩欧美| 欧美三级黄美女| 免费成人黄色av| 欧美日韩在线精品| 在线亚洲免费| 欧美**字幕| 亚洲国产精品ⅴa在线观看| 卡一卡二国产精品| 国产精品激情| 国产精品久久久久久亚洲调教| 蜜臀久久久99精品久久久久久| 亚洲国产综合在线看不卡| 国产区精品在线观看| 亚洲精品日韩激情在线电影| 在线精品视频在线观看高清| 欧美精品一区二区三区蜜臀| 久久综合久色欧美综合狠狠| 欧美日韩中文精品| 亚洲日本欧美天堂| 欧美另类99xxxxx| 亚洲激情偷拍| 国产麻豆午夜三级精品| 欧美午夜片在线观看| 欧美三级日本三级少妇99| 欧美精品一区二区三区高清aⅴ| 国产三级欧美三级| 国产精品v片在线观看不卡| 欧美日本久久| 亚洲欧美卡通另类91av| 国产一区二区激情| 欧美黄色视屏| 亚洲图片在区色| 欧美人牲a欧美精品| 国产精品99久久99久久久二8| 国产一区二区高清不卡| 在线观看免费视频综合| 欧美日韩国产综合在线| 国产日产欧美a一级在线| 欧美区视频在线观看| 欧美aⅴ99久久黑人专区| 亚洲精品1234| 欧美视频精品在线观看| 一本久久知道综合久久| 亚洲一区二区三区免费视频| 久久精品一区二区三区不卡牛牛| 国产精品中文字幕在线观看| 欧美激情一区二区| aⅴ色国产欧美| 久久久激情视频| 国产欧美日韩视频一区二区三区| 欧美高清影院| 国产精品日韩欧美综合| 欧美韩日亚洲| 亚洲午夜国产成人av电影男同| 欧美成人午夜影院| 亚洲人成艺术| 国产一区二区在线观看免费播放| 一本色道综合亚洲| 国产欧美日韩另类视频免费观看| 亚洲高清一区二| 欧美黄免费看| 夜夜夜精品看看| 国产精品免费观看在线| 欧美亚韩一区| 亚洲免费av片| 欧美午夜视频一区二区| 欧美成人精精品一区二区频| 国产一区二三区| 亚洲少妇在线| 亚洲国产小视频在线观看| 亚洲日韩欧美视频| 欧美日韩在线播放一区| 一区二区视频免费在线观看| 亚洲黄网站黄| 国产曰批免费观看久久久| 欧美天堂在线观看| 欧美精品一区三区| 黄色一区二区三区| 亚洲精品国产精品乱码不99| 一区二区三区偷拍| 亚洲欧美日韩国产一区二区三区| 国产精品进线69影院| 久久动漫亚洲| 极品av少妇一区二区| 久久久夜色精品亚洲| 国产精品区免费视频| 亚洲综合色视频| 国产人成一区二区三区影院| 久久女同互慰一区二区三区| 亚洲午夜一区二区三区| 国产日韩在线一区二区三区| 国产精品av免费在线观看| 欧美国产综合一区二区| 在线免费观看一区二区三区| 国产精品日韩欧美一区| 国语对白精品一区二区| 国模私拍一区二区三区| 国产精品久久久久秋霞鲁丝| 国产日韩欧美综合一区| 伊人狠狠色j香婷婷综合| 一区二区三区久久| 国产精品久久久久久一区二区三区| 久久蜜桃资源一区二区老牛| 亚洲欧美激情一区二区| 国产精品毛片在线看| 久久国产精品久久久久久电车| 久久久夜夜夜| 你懂的视频欧美| 在线电影院国产精品| 欧美国产精品中文字幕| 国产一区二区三区久久精品| 国产精品视频最多的网站| 亚洲娇小video精品| 亚洲一区日韩在线| 99av国产精品欲麻豆| 欧美视频在线观看 亚洲欧| 亚洲中无吗在线| 亚洲人成亚洲人成在线观看| 亚洲欧美一区在线| 欧美大成色www永久网站婷| 国户精品久久久久久久久久久不卡| 欧美色欧美亚洲另类二区| 久久久成人网| 亚洲国产欧美久久| 久久免费99精品久久久久久| 久久亚洲春色中文字幕久久久| 亚洲成色精品| 亚洲精品一区二区三区婷婷月| 国产精品久久久久久模特| 久久国内精品视频| 日韩一级二级三级| 国产一区二区三区四区五区美女| 国产精品九九| 亚洲另类春色国产| 国产精品丝袜xxxxxxx| 亚洲图片欧美日产| 欧美理论在线| 宅男精品导航| 亚洲一区二区三区四区五区午夜| 国产主播一区二区三区四区| 国产精品一区二区在线观看| 国产欧美日韩免费| 久久精品二区| 国产精品美女www爽爽爽视频| 久久女同精品一区二区| 亚洲欧美日本国产专区一区| 欧美一区二区视频在线观看| 亚洲永久视频| 国产精品呻吟| 欧美国产一区二区三区激情无套| 欧美午夜精品久久久久久浪潮| 国产欧美一区二区三区久久人妖| 亚洲国产高清aⅴ视频| 欧美有码在线观看视频| 久久综合亚州| 欧美成人久久| 国产欧美日韩精品丝袜高跟鞋| 夜夜嗨网站十八久久| 亚洲国产精品久久久久秋霞影院| 亚洲高清成人| 国产精品chinese| 亚洲精品乱码| 开元免费观看欧美电视剧网站| 久久精品久久99精品久久| 国产欧美一区二区三区久久人妖| 国产精品一区二区你懂的| 欧美了一区在线观看| 欧美在线影院在线视频| 欧美激情1区2区| 欧美激情一二区| 性色av一区二区怡红| 欧美三级免费| 久久久久久久激情视频| 欧美福利一区| 国产在线国偷精品产拍免费yy| 国产日韩精品一区二区| 亚洲一区二区三区免费观看| 亚洲尤物影院| 国产亚洲精品久| 国产精品五区| 一区二区激情视频| 亚洲国产精品一区二区www| 久久成人综合网| 欧美国产日韩一区二区三区| 国产午夜精品在线| 亚洲淫片在线视频| 欧美国产精品人人做人人爱| 狠狠久久亚洲欧美| 欧美激情91| 亚洲黄色一区| 欧美无砖砖区免费| 亚洲精选在线观看| 国产日本欧洲亚洲| 欧美日韩亚洲系列| 老色鬼精品视频在线观看播放| 久久午夜精品一区二区| 在线日韩中文| 国产真实久久| 亚洲欧美www| 欧美高清视频免费观看| 亚洲在线视频免费观看| 国产情人节一区| 久久免费国产精品1| 一区二区三区无毛| 欧美午夜视频在线| 亚洲精品国产精品国自产在线| av成人激情| 在线免费一区三区| 激情小说亚洲一区| 欧美淫片网站| 在线成人小视频| 亚洲最新视频在线播放| 亚洲精品国产精品国自产观看浪潮| 国产精品永久免费观看| 国产喷白浆一区二区三区| 亚洲国产精品ⅴa在线观看| 欧美一区网站| 欧美激情中文字幕乱码免费| 欧美片在线播放| 韩日欧美一区二区| 黄色日韩网站视频| 国产视频一区欧美| 在线播放中文字幕一区| 欧美精品少妇一区二区三区| 久久中文字幕一区| 国产精品久久夜| 欧美人与禽性xxxxx杂性| 亚洲黄色天堂| 香蕉久久a毛片| 在线观看91精品国产入口| 欧美激情精品久久久久久免费印度| 亚洲精品乱码久久久久久按摩观| 久久婷婷av| 欧美怡红院视频一区二区三区| 欧美色综合天天久久综合精品| 一区二区三区免费观看| 久久精品国产清自在天天线| 亚洲女人av| 欧美大片在线观看一区二区| 久久天天综合| 久久久久久午夜|