娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

基于ARM7(LPC2131)平臺的μC/OS-Ⅱ的移植

發布者:CreativeMind最新更新時間:2024-11-08 來源: cnblogs關鍵字:ARM7  LPC2131  μC  OS-Ⅱ  移植 手機看文章 掃描二維碼
隨時隨地手機看文章

        CMP     R1, #1

        LDREQ   SP, =StackUsr

        BL      $IRQ_Exception_Function         ; 調用c語言的中斷處理程序

        MSR     CPSR_c, #(NoInt | SYS32Mode)    ; 切換到系統模式

        LDR     R2, =OsEnterSum                 ; OsEnterSum,使OSIntExit退出時中斷關閉

        MOV     R1, #1

        STR     R1, [R2]

        BL      OSIntExit

        LDR     R2, =OsEnterSum                 ; 因為中斷服務程序要退出,所以OsEnterSum=0

        MOV     R1, #0

        STR     R1, [R2]

        MSR     CPSR_c, #(NoInt | IRQ32Mode)    ; 切換回irq模式

        LDMFD   SP, {R3, SP, LR}^               ; 恢復用戶狀態的R3,SP,LR,注意不能回寫

                                                ; 如果回寫的是用戶的SP,所以后面要調整SP

        LDR     R0, =OSTCBHighRdy

        LDR     R0, [R0]

        LDR     R1, =OSTCBCur

        LDR     R1, [R1]

        CMP     R0, R1

        ADD     SP, SP, #4*3                    ; 

        MSR     SPSR_cxsf, R3

        LDMEQFD SP!, {R0-R3, R12, PC}^          ; 不進行任務切換

        LDR     PC, =OSIntCtxSw                 ; 進行任務切換

    MEND

    END

2.注意事項:

(1)OS_STK_GROWTH中指定堆棧的生長方式:為1表示堆棧從下往上生長,0表示堆棧從上往下生長。

(2)在OSTaskStkInt初始化堆棧的函數必須保存CPU相關資源,如寄存器。

3.其他的都在移植源代碼中有相關注釋及說明。

   三.完成項目

1.源代碼編譯通過,完成了所有的移植工作,項目也達到預期的效果,操作系統正常的跑起來了。

2.通過應用程序的測試,下面是運行成功后的第一個應用的主程序:

/****************************************Copyright(c)**************************************

**                            FreshAir嵌入式軟件開發團隊

**                                      FreshAir

**                                 http://www.FreshAir.com

**--------------File Info------------------------------------------------------------------

** File name: main.c

** Last modified Date:  2009-07-22

** Created by: 吳友強

**Created date:2009年7月21日0:00

** Version: V1.0

** Descriptions:成功移植uCOSII操作系統后的第一個應用程序:GPIO輸出實驗

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

#include 'config.h'

#include 'stdlib.h'

#define LED1 (1 << 18)

#define LED2 (1 << 19)

#define TaskStkLengh 64 //定義用戶任務0的堆棧長度

#define TaskLED1StkSize 128 //定義用戶任務1的堆棧長度

#define TaskLED2StkSize 128 //定義用戶任務2的堆棧長度

 

OS_STK TaskStk [TaskStkLengh]; //定義用戶任務0的堆棧

OS_STK TaskLED1Stk[TaskLED1StkSize];//定義用戶任務1的堆棧

OS_STK TaskLED2Stk[TaskLED2StkSize];//定義用戶任務2的堆棧

void  Task0(void *pdata); //Task0 任務0

void TaskLED1(void *data);

void TaskLED2(void *data);

int main (void)

{

OSInit ();

OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2);

OSStart ();

return 0;

}

/******************************************************************************************                             Task0 任務0

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

void Task0 (void *pdata)

{

pdata = pdata;

TargetInit ();

OSTaskCreate(TaskLED1, (void *)0, &TaskLED1Stk[TaskLED1StkSize - 1], 3);

OSTaskCreate(TaskLED2, (void *)0, &TaskLED2Stk[TaskLED2StkSize - 1], 4);

while (1)

{

OSTimeDly(10);

}

}

void TaskLED1(void *pdata)

{

pdata = pdata;

PINSEL2 = PINSEL2 & (~0x08);

IO1DIR |= LED1;

IO1SET = LED1;

for (; ;)

{

IO1CLR = LED1;

OSTimeDly(OS_TICKS_PER_SEC / 4);

IO1SET = LED1;

OSTimeDly(OS_TICKS_PER_SEC / 2);

}

}

void TaskLED2(void *pdata)

{

pdata = pdata;

PINSEL2 = PINSEL2 & (~0x08);

IO1DIR |= LED2;

IO1SET = LED2;

for (; ;)

{

IO1CLR = LED2;

OSTimeDly(OS_TICKS_PER_SEC / 2);

IO1SET = LED2;

OSTimeDly(OS_TICKS_PER_SEC / 1);

}

}

四.項目經驗總結及心得

1.通過長期的學習相關知識和不斷的嘗試編碼及測試,終于成功的所有的源代碼通過編譯,在看到沒有錯誤提示的那一刻是多么的興奮無法形容。

2.雖然這個項目成功并且是出色的完成了,但這只是開始,是以后做項目的開端,可以把這個項目運用到以后項目中去

3.通過自學和不斷的摸索讓自己的自學能力有很大幅度提高,項目的成功完成也讓我對自己未來的學習更有信心,為自己下一步學習linux操作系統和ARM9及ARM10或ARM11打下了良好的基礎。

4.通過<<嵌入式實時操作系統μC/OS-Ⅱ(第二版)>>閱讀讓我基本掌握了μC/OS-Ⅱ這個操作系統,主要學習里面的設計思想,這個操作系統屬于RTOS,對于這一類設計思想有了一個很好的了解,更重要的一點在閱讀這個系統的源代碼時吸收了許多很好的編程風格和編程思路,當然還有更多的編程技巧。

5.移植過程中遇到主要問題解決:

(1)編譯器產生#error這個地方錯誤,通過查看編譯器的文檔,通過加入-Ep編譯選項成功解決。

(2)頭文件包含錯誤,主要是文件組織結構沒有弄好,最后還是下定決心從新開始,通過解決一個兩個等的編譯錯誤最終成功并且運行 

(3)移植的過程中對于很多宏定義出現錯誤,要不是沒有定義,要不是重復定義,最終通過耐心修改源代碼得以解決

6.通過解決項目過程中遇到的很多問題,提高了自己解決問題的能力,也讓自己相信,只要努力做一件事并且堅持不懈,最終是能夠成功的


[1] [2] [3] [4] [5] [6] [7] [8] [9]
關鍵字:ARM7  LPC2131  μC  OS-Ⅱ  移植 引用地址:基于ARM7(LPC2131)平臺的μC/OS-Ⅱ的移植

上一篇:Windows CE6.0中斷實驗過程
下一篇:arm linux 移植 mtd-utils 1.x

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 左贡县| 南雄市| 扶余县| 油尖旺区| 塔城市| 新田县| 澎湖县| 上饶市| 盐亭县| 宁陕县| 客服| 巢湖市| 咸宁市| 红河县| 乌什县| 南皮县| 无为县| 泰来县| 舟山市| 金溪县| 屏南县| 吉安县| 榆社县| 永清县| 大关县| 屯门区| 南部县| 雷波县| 广宁县| 枝江市| 吉安县| 出国| 巩留县| 鹤山市| 平和县| 木里| 万山特区| 江北区| 新乡市| 崇明县| 教育|