μC/OS-Ⅱ在ATmega128上的移植St
發(fā)布時間:2008/5/27 0:00:00 訪問次數(shù):678
    
    
    本文詳細介紹了把μc/os-ⅱ移植到atmel公司的8位微控制器atmega128上的全過程。所謂移植,就是使一個實時內(nèi)核能在
    某個微處理器或微控制器上運行。在移植之前,希望讀者能熟悉所用微處理器和c編譯器的特點。
    1 atmega128的內(nèi)核特點
    之所以要先介紹atmega128 mcu內(nèi)核特點,是因為在μc/os-ⅱ的移植過程中,仍需要用戶用c語言和匯編語言編寫一些與微
    處理器相關(guān)的代碼。這里主要介紹atmega128與μc/os-ⅱ移植相關(guān)的內(nèi)核特點。如果讀者已經(jīng)對atmega128 比較了解了,
    那就不必閱讀這一部分了。
    1.1微控制器 (mcu)
    atmega128的mcu包括一個算術(shù)邏輯單元(alu),一個狀態(tài)寄存器(sreg),一個通用工作寄存器組和一個堆棧指針。狀態(tài)
    寄存器(sreg)的最高位i是全局中斷允許位。如果全局中斷允許位為零,則所有中斷
    都被禁止。當系統(tǒng)響應(yīng)一個中斷后,i位將由硬件自動清“0”;當執(zhí)行中斷返回(reti)指令時,i位由硬件自動置“1”
    ,從而允許系統(tǒng)再次響應(yīng)下一個中斷請求。
    通用工作寄存器組是由32個8位的通用工作寄存器組成。其中r26~r31這6個寄存器還可以兩兩合并為3個16位的間接
    地址寄存器。這些寄存器可以用來對數(shù)據(jù)存儲空間進行間接尋址。這3個間接地址寄存器的名稱為:x寄存器、y寄存器、z
    寄存器。其中z寄存器還能用作對程序存儲空間進行間接尋址的寄存器。有些avr c語言編譯器還把y寄存器作為軟件堆棧的
    堆棧指針,比如icc- avr,codevisionavr。
    堆棧指針(sp)是一個指示堆棧頂部地址的16位寄存器。在iccavr中,它被用作指向硬件堆棧的堆棧指針。avr單片
    機上電復(fù)位后,sp指針的初始值為0x0000,由于avr單片機的堆棧是向下生長的(從高地址向低地址生長),所以系統(tǒng)程序
    一開始必須對堆棧指針sp進行初始化,即將sp的值設(shè)為數(shù)據(jù)存儲空間的最高地址。iccavr編譯器在鏈接c程序文件的時
    候,會自動在程序頭鏈入startup文件。startup文件里面的程序?qū)プ龀跏蓟痵p指針的工作。鏈入startup文件是iccavr
    這個編譯器的特點,在用其它編譯器的時候,希望讀者確認所使用的編譯器是否帶有自動初始化sp的功能,若沒有,應(yīng)在
    用戶程序中初始化sp。
    1.2 數(shù)據(jù)存儲空間(僅內(nèi)部)
    avr單片機的數(shù)據(jù)存儲器是線形的,從低地址到高地址依次是cpu寄存器區(qū)(32個通用寄存器),i/o寄存器區(qū),數(shù)據(jù)存儲區(qū)
    。
    iccavr編譯器又將數(shù)據(jù)存儲區(qū)劃分為全局變量和字符串區(qū),軟件堆棧區(qū)和硬件堆棧區(qū)三個空間。如下圖:
    高地址
    硬件堆棧區(qū)
    軟件堆棧區(qū)
    全局變量和字符串區(qū)
    i/o寄存器區(qū)
    cpu寄存器區(qū)
    低地址
    iccavr編譯器將堆棧分成了兩個功能不同的堆棧來處理(這一點與8051系列的單片機編譯器處理方式不同)。硬件堆
    棧用于儲存子程序和中斷服務(wù)子程序調(diào)用時的函數(shù)返回地址。這塊數(shù)據(jù)區(qū)域由堆棧指針sp進行尋址,數(shù)據(jù)的進棧和出棧有
    專門的匯編指令(pop,push等)支持,所以叫做硬件堆棧區(qū)。軟件堆棧用于傳遞參數(shù),儲存臨時變量和局部變量。這塊數(shù)
    據(jù)區(qū)域是用軟件模擬堆棧儲存數(shù)據(jù)的方式進行數(shù)據(jù)存儲,對該區(qū)域?qū)ぶ返闹羔樣捎脩糇约憾x,所以叫做軟件堆棧區(qū)。
    avr單片機的硬件堆棧的生長方向是向下的(從高地址向低地址生長),所以軟件堆棧在定義的時候,也采取相同的
    生長方向。
    這里沒有用atmega128而采用avr單片機的提法是因為atmega128屬于avr系列單片機中的一種,而所有的avr單片機的
    數(shù)據(jù)存儲器組織方式都是一致的。在創(chuàng)建μc/os-ⅱ的任務(wù)棧時,需要了解所用微處理器數(shù)據(jù)存儲空間尤其是堆?臻g的組
&
    
    
    本文詳細介紹了把μc/os-ⅱ移植到atmel公司的8位微控制器atmega128上的全過程。所謂移植,就是使一個實時內(nèi)核能在
    某個微處理器或微控制器上運行。在移植之前,希望讀者能熟悉所用微處理器和c編譯器的特點。
    1 atmega128的內(nèi)核特點
    之所以要先介紹atmega128 mcu內(nèi)核特點,是因為在μc/os-ⅱ的移植過程中,仍需要用戶用c語言和匯編語言編寫一些與微
    處理器相關(guān)的代碼。這里主要介紹atmega128與μc/os-ⅱ移植相關(guān)的內(nèi)核特點。如果讀者已經(jīng)對atmega128 比較了解了,
    那就不必閱讀這一部分了。
    1.1微控制器 (mcu)
    atmega128的mcu包括一個算術(shù)邏輯單元(alu),一個狀態(tài)寄存器(sreg),一個通用工作寄存器組和一個堆棧指針。狀態(tài)
    寄存器(sreg)的最高位i是全局中斷允許位。如果全局中斷允許位為零,則所有中斷
    都被禁止。當系統(tǒng)響應(yīng)一個中斷后,i位將由硬件自動清“0”;當執(zhí)行中斷返回(reti)指令時,i位由硬件自動置“1”
    ,從而允許系統(tǒng)再次響應(yīng)下一個中斷請求。
    通用工作寄存器組是由32個8位的通用工作寄存器組成。其中r26~r31這6個寄存器還可以兩兩合并為3個16位的間接
    地址寄存器。這些寄存器可以用來對數(shù)據(jù)存儲空間進行間接尋址。這3個間接地址寄存器的名稱為:x寄存器、y寄存器、z
    寄存器。其中z寄存器還能用作對程序存儲空間進行間接尋址的寄存器。有些avr c語言編譯器還把y寄存器作為軟件堆棧的
    堆棧指針,比如icc- avr,codevisionavr。
    堆棧指針(sp)是一個指示堆棧頂部地址的16位寄存器。在iccavr中,它被用作指向硬件堆棧的堆棧指針。avr單片
    機上電復(fù)位后,sp指針的初始值為0x0000,由于avr單片機的堆棧是向下生長的(從高地址向低地址生長),所以系統(tǒng)程序
    一開始必須對堆棧指針sp進行初始化,即將sp的值設(shè)為數(shù)據(jù)存儲空間的最高地址。iccavr編譯器在鏈接c程序文件的時
    候,會自動在程序頭鏈入startup文件。startup文件里面的程序?qū)プ龀跏蓟痵p指針的工作。鏈入startup文件是iccavr
    這個編譯器的特點,在用其它編譯器的時候,希望讀者確認所使用的編譯器是否帶有自動初始化sp的功能,若沒有,應(yīng)在
    用戶程序中初始化sp。
    1.2 數(shù)據(jù)存儲空間(僅內(nèi)部)
    avr單片機的數(shù)據(jù)存儲器是線形的,從低地址到高地址依次是cpu寄存器區(qū)(32個通用寄存器),i/o寄存器區(qū),數(shù)據(jù)存儲區(qū)
    。
    iccavr編譯器又將數(shù)據(jù)存儲區(qū)劃分為全局變量和字符串區(qū),軟件堆棧區(qū)和硬件堆棧區(qū)三個空間。如下圖:
    高地址
    硬件堆棧區(qū)
    軟件堆棧區(qū)
    全局變量和字符串區(qū)
    i/o寄存器區(qū)
    cpu寄存器區(qū)
    低地址
    iccavr編譯器將堆棧分成了兩個功能不同的堆棧來處理(這一點與8051系列的單片機編譯器處理方式不同)。硬件堆
    棧用于儲存子程序和中斷服務(wù)子程序調(diào)用時的函數(shù)返回地址。這塊數(shù)據(jù)區(qū)域由堆棧指針sp進行尋址,數(shù)據(jù)的進棧和出棧有
    專門的匯編指令(pop,push等)支持,所以叫做硬件堆棧區(qū)。軟件堆棧用于傳遞參數(shù),儲存臨時變量和局部變量。這塊數(shù)
    據(jù)區(qū)域是用軟件模擬堆棧儲存數(shù)據(jù)的方式進行數(shù)據(jù)存儲,對該區(qū)域?qū)ぶ返闹羔樣捎脩糇约憾x,所以叫做軟件堆棧區(qū)。
    avr單片機的硬件堆棧的生長方向是向下的(從高地址向低地址生長),所以軟件堆棧在定義的時候,也采取相同的
    生長方向。
    這里沒有用atmega128而采用avr單片機的提法是因為atmega128屬于avr系列單片機中的一種,而所有的avr單片機的
    數(shù)據(jù)存儲器組織方式都是一致的。在創(chuàng)建μc/os-ⅱ的任務(wù)棧時,需要了解所用微處理器數(shù)據(jù)存儲空間尤其是堆?臻g的組
&
上一篇:ZILOG
熱門點擊
- 51單片機定時器實驗
- 單片機C51串口中斷接收和發(fā)送測試
- 用單片機制作通用型電視遙控器
- 51單片機的串行口擴展方法
- 24C04在2051系統(tǒng)中的使用
- 大家一起來學(xué)單片機:LED花樣燈
- 帶ADC、PWM和比較器的單片機-EM78P
- 基于AVR的VGA顯示和激光打印系統(tǒng)
- 無觸點云臺鏡頭通訊控制電路的設(shè)計
- 51單片機串-并轉(zhuǎn)換實驗
推薦技術(shù)資料
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究