久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

實時操作系統(tǒng)uC/OS一Ⅱ在ARM上的移植—軟件仿真

 寢鄉(xiāng)園 2011-12-28

實時操作系統(tǒng)uCOS一Ⅱ在ARM上的移植—軟件仿真

 

摘 要:介紹了實時操作系統(tǒng)uCOSII的特點 ,,討論了其在 LPC2106上移植的可能性,, 成功通過軟件仿真地將uCOSII移植到LPC2106上, 并通過例程驗證了移植代碼的正確性,。

 

注:本文是引用期刊“實時操作系統(tǒng)uCOSIIARM上的移植,,作者:王曉鳴,、王樹新 、張宏偉”結(jié)合了網(wǎng)上的程序?qū)崿F(xiàn)了對系統(tǒng)移植的軟件仿真,。

 

0:引 

目前嵌入式系統(tǒng)在家電,、移動電話、PDA等各種領(lǐng)域的應(yīng)用日益廣泛,,程序設(shè)計也越來越復(fù)雜,,這就需要采用一個通用的嵌入式操作系統(tǒng)來對其進行管理和控制。移植 了操作系統(tǒng) 的嵌入式系統(tǒng)開發(fā),,可大大減 輕程序員的負擔(dān),,操作系統(tǒng)提供了多任務(wù)的管理功能,  只需專注于每個任務(wù)的管理,。對于不同的應(yīng)用,,可以按照相同的步驟完成系統(tǒng)設(shè)計。如果更換硬件平臺,,則只需要對操作系統(tǒng)進行少量的移植工作,與硬件無關(guān)的應(yīng)用代碼完全無需修改,,同時,,可增強代碼的可讀性、可維護性和可擴展性,。uCOSII是一個可裁減的,、源代碼開放 的、結(jié)構(gòu)小巧,、可剝奪型的實時多任務(wù)內(nèi)核,,它提供任務(wù)調(diào)度、任務(wù)間的通信與同步,、 任務(wù)管理,、 時間管理和內(nèi)存管理 等基本功能。將uCOSII移植到嵌入式處理器上,,  對于提高產(chǎn)品質(zhì)量,、 縮短開發(fā)周期和降低成本等方面有著重 要的意 義。本 文主要介 紹uCOSII在飛利浦的一款AR M7TDMI的嵌入式處理器LPC2106應(yīng)用,。  

 

1 嵌入式操作系統(tǒng) uCOSII

1.1    uCOSII簡介

uCOSII是一種性能優(yōu)良源碼公開且被廣泛應(yīng)用的免費嵌入式操作系統(tǒng),,它結(jié)構(gòu)小巧、具有基于優(yōu)先級的搶占式實時多任務(wù)內(nèi)核,,絕大部分代碼是用ANSI C語言編寫的,,與硬件相關(guān)部分用匯編語言編寫,使之可供不同構(gòu)架的微處理器使用,。只要有標(biāo)準(zhǔn)的ANSI C交叉編譯器,,有匯編器,、鏈接器等軟件工具,就可以將 uCOSII嵌入到開發(fā)的產(chǎn)品中,。

uCOSII是面向中小型嵌入式系統(tǒng),,具有執(zhí)行效率高、占用空間小,、實時性能優(yōu)良和可擴展性強等特點,,包含全部功能模塊的內(nèi)核大約為10kB。如果經(jīng)過裁減只保留核心代碼,,則可壓縮到3kB左右,。嚴格地 說uCOSII只是一個實時操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,、任務(wù)管理,、時間管理、內(nèi)存管理和任務(wù)間的通信和同步等基本功能,,沒有提供輸入輸出管理,、文件系統(tǒng)、網(wǎng)絡(luò)等額外的服務(wù),。但由于uCOSII良好的可擴展性和源碼開放,,這些非必需的功能完全可以由用戶自己根據(jù)需要分別實現(xiàn)。 

1.2    uCOSII的工作原理

uCOSII的工作流程如圖 1所示:首先進行操作系統(tǒng)初始化,,主要完成任務(wù)控制塊(TCB)初始化,;然后就可以開始創(chuàng)建新任務(wù)、初始化任務(wù)堆棧區(qū),;最后調(diào)用OSSTART()函數(shù),, 啟動多任務(wù)調(diào)度 。在多任務(wù)調(diào)度開始后,,啟動時鐘節(jié)拍源開始計時,。此節(jié)拍源為系統(tǒng)提供周期性的時鐘中斷信號、實現(xiàn)延時和超時確認,。當(dāng)時鐘中斷來臨時,,系統(tǒng)把當(dāng)前正在執(zhí)行的任務(wù)掛起,保護現(xiàn)場,,進行中斷處理,,判斷有無任務(wù)延時到期。若有,,則使該任務(wù)進入就緒態(tài),,并對所有進入就緒態(tài)的任務(wù)的優(yōu)先級進行比較,通過任務(wù)切換去執(zhí)行最高優(yōu)先級的任務(wù),。若沒有別的任務(wù)進入就緒態(tài),,則恢復(fù)現(xiàn)場繼續(xù)執(zhí)行原任務(wù) ,。另一種調(diào)度方式是任務(wù)級的調(diào)度,即通過發(fā)軟中斷命令或依靠處理器在任務(wù)執(zhí)行中調(diào)度,。如任務(wù)要等待信號量或一個正在執(zhí)行的任務(wù)被掛起時,,就需要在此任務(wù)中調(diào)度,找出目前處于就緒態(tài)的優(yōu)先級最高的任務(wù)去執(zhí)行,。當(dāng)沒有任何任務(wù)進入就緒態(tài)時,,就去執(zhí)行空任務(wù)。

 

1.3  UC/OS的移植要求

UC/OS的正常運行需要處理器平臺滿足以下要求:
a)
處理器的C編譯器能產(chǎn)生可重入代碼,。                                                    
b)
C語言就可以打開和關(guān)閉中斷,。
c)
處理器支持中斷,并且能產(chǎn)生定時中斷(通常在10100Hz之間),。         
d)
處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧,。
e)
處理器有將堆棧指針和其它CPU寄存器讀出和存儲到堆棧或內(nèi)存中的指令,。

我們的KEILADS均支持UC/OS的要求,。因此可以在LPC2000系列上移值。

 

 

2     基于LPC1602的軟件仿真電路

LPC1602PHILIPS公司推出的一款功能強大,、超低功耗且具有ARM7TDMI內(nèi)核的32位微控制器,。 它具有豐富的片上資源,完全可以滿足一般的工業(yè)控制需要,,同時還可以減少系統(tǒng)硬件設(shè)計的復(fù)雜度,提高系統(tǒng)的穩(wěn)定性,。它的工作原理主要是用ARM7芯片LPC1602為內(nèi)核,,與一系列外圍器件連接起來。這里所用到的電路圖如下:

仿真是的結(jié)果:

ADS1.2編譯運行后生成的test.hex文件導(dǎo)入到ARM芯片中去,,按下key1按鍵的結(jié)果,。

 

 

 

 

3     軟件部分

這次仿真我用了老師上課講的ADS1.2,和protues軟件來實現(xiàn)的,,ADS1.2是用來編寫程序并生成目標(biāo)代碼,。用Protues來模擬真實的開發(fā)板。

ADS1.2中的程序示意(編譯后屋錯誤):

主要看一下主函數(shù)程序:

/****************************************************************************

* FileMain.C

* 功能:計數(shù)器,通過兩個按鍵來控制加減計數(shù)器,并輸出數(shù)碼管顯示.,。

****************************************************************************/

#include  "config.h"

#define CON 0x000000ff    //控制P0.0~P0.7

 

 

#define  TASK_STK_SIZE                  64

OS_STK        Main_TaskStk[TASK_STK_SIZE];

OS_STK        Task0Stk[TASK_STK_SIZE];

 

 

void  Main_Task(void *data);

void  Task0(void *data);

/****************************************************************************

* 名稱:main()

* 功能:主函數(shù),啟動多任務(wù)環(huán)境

****************************************************************************/

 int main (void)

{

    OSInit();

 

    OSTaskCreate(Main_Task, (void *)0, &Main_TaskStk[TASK_STK_SIZE - 1], 0);

    OSStart();

    return 0;

}

/****************************************************************************

* 名稱:Main_Task()

* 功能:初始化目標(biāo)板,建立其他任務(wù)

****************************************************************************/

 void  Main_Task(void *pdata)

      {

      pdata=pdata;

      TargetInit();

      OSTaskCreate(Task0, (void *)0, &Task0Stk[TASK_STK_SIZE - 1], 1);

      PINSEL0=0x0;

      IODIR=CON;

      IOCLR=CON;

      OSTaskSuspend(OS_PRIO_SELF);

      }

/****************************************************************************

* 名稱:Task0()

* 功能:任務(wù)

****************************************************************************/

void  Task0(void *pdata)

{   uint16 temp;

    pdata=pdata;

    temp=0;

   for(;;)

           {

           if((IOPIN&0x00030000)!=0x00030000)

            OSTimeDly(OS_TICKS_PER_SEC/50);

           if((IOPIN&0x00030000)!=0x00030000)

                 {

                 if((IOPIN&0x00030000)==0x00020000)

                      temp++;

                 if((IOPIN&0x00030000)==0x00010000)

                      temp--;

                 while((IOPIN&0x00030000)!=0x00030000);

                 IOCLR=CON;

                 IOSET=temp;

                 }    

           }

OSTaskResume(0);

}

該程序中一共啟用的兩個任務(wù):

第一個任務(wù),,其實只要是用來啟用第二個任務(wù)Task0(按鍵任務(wù)),然后就自己掛起了,。

void  Main_Task(void *pdata)

      {

      pdata=pdata;

      TargetInit();

      OSTaskCreate(Task0, (void *)0, &Task0Stk[TASK_STK_SIZE - 1], 1);

      PINSEL0=0x0;

      IODIR=CON;

      IOCLR=CON;

      OSTaskSuspend(OS_PRIO_SELF);

      }

第二個任務(wù):查詢兩個按鍵,,如果上面那個按鍵按下則顯示增1,按下下面的則相反,。

部分程序:

if((IOPIN&0x00030000)!=0x00030000)

{

      if((IOPIN&0x00030000)==0x00020000)

           temp++;

      if((IOPIN&0x00030000)==0x00010000)

           temp--;

      while((IOPIN&0x00030000)!=0x00030000);

           IOCLR=CON;

           IOSET=temp;

      }    

這里顯示沒有用另外的任務(wù),,而是使用IOSET來實現(xiàn)的,。

 

4     總結(jié)

由于沒有開發(fā)板一直不能進行移植實驗,且之前沒有學(xué)習(xí)過操作系統(tǒng)移植方面知識,,對具體怎樣移植很是迷惑,,之前(考慮到電腦的裝系統(tǒng)和軟件安裝)認為系統(tǒng)移植是不是先把系統(tǒng)下載到RAM中,然后再把編寫好的程序再下載到ARM中,,思路很是混亂,。經(jīng)過長時間的上網(wǎng)查資料,下相關(guān)的文檔,、軟件以及程序現(xiàn)在才稍微理解了些,。

 

我對系統(tǒng)移植的理解:

系統(tǒng)移植就是利用一些編程好的程序來輔助運行我們要實現(xiàn)的功能。比如說那些OS_CPU.H,、OS_CPU_a.s,、OS_CPU.c函數(shù)并不是用來直接下載到ARM版中的,而是你編寫的具體函數(shù)在運行的時候會用到這些函數(shù),。而使用這些函數(shù)的好處時,,實現(xiàn)切換任務(wù)之間的控制,而不在是像單片機那時的中斷響應(yīng)方式,。

 

這里不能添加附件,,所以程序沒有全部給出,如果需要可以問我要,。,。。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多