新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式實時操作系統的現場總線網關的設計

        基于嵌入式實時操作系統的現場總線網關的設計

        作者: 時間:2012-08-21 來源:網絡 收藏

        opt=opt;
        stk= (unsigned int * ) Ptos;
        *--stk= (unsigned int) task;
        *- -stk=0;
        *--stk=0,
        *--stk=0,
        *--stk=0,
        *--stk=0;
        *--stk=0;
        *--stk=0;
        *--stk=0;
        *--stk=0;
        *--stk=0;
        *--stk=0;
        *--stk=0;
        *--stk=0 (unsigned int) Pdata;
        *--stk= (SVCMODE | OxO);
        *--stk= (SVCMODE | OxO);
        return( (void*) stk);
        在 OSTaskCreate( )或 OSTaskCreateEXt( )中調用該函數來初始化任務的堆棧,返回堆棧指針STK。
        (三)OS_CPU_A.S
        μC/OS-Ⅱ的移植工作的重點和難點主要體現在O_CPU_A.S文件的實現上,主要編寫下面四個匯編語言函數:
        OSStanHighRdy( )
        OSCtxSw( )
        OSIntCtxSw( )
        OSTickISR( )
        其中最困難的工作又集申在OSIntCtxSw( )和OSTickISR( )兩個函數,因為這兩個函數不僅和相關硬件定時器、中斷積存器的設置有關,而且集中體現了移植的思路。下面分別介紹(具體代碼限于篇幅不詳細列出)。
        1.OSStartHighRdy( )
        此函數只在多任務啟動時由OSStart( )函數調用一次,功能是從最高優先級任務的TCB中得到該任務的堆棧指針sp,并用該指針恢復CPU現場,使得最高優先級任務處于就緒狀態。
        2.OSCtxSw( )
        該函數實現了任務級的任務切換,流程如圖4所示。任務級的任務切換是通過發軟中斷指令來完成的,軟中斷矢量指向該函數。在μC/OS-Ⅱ系統中,如果一個任務調用了某個函數而使得更高優先級任務進入了就緒狀態,系統就會通過發SWI來找到OSCtxSw( );在該任務的最后,系統會調用OSShed( )將最高優先級任務的地址加載到OSTCBHighRdy中,再調用OS_TASK_SW( )來執行軟中斷調用OSCtxSw( )進行任務切換。
        3.0SIntCtxSw( )
        該函數實現了中斷級任務切換,流程如圖4(b)所示。在ISR中,可能會引起任務的切換,如果需要進行任務切換,則在ISR的最后通過0S_IntEXit( )調用OSIntCtxSw( )實現中斷級任務切換。此函數和OSCtxSw( )函數類似,不同的是該函數進行的是中斷級任務切換,在系統進入中斷時,CPU現場己被保存過了,因此在該函數中不再進行CPU現場保護,只需對堆棧指針做相應的調整即可。
        4.OSTickISR( )
        該函數用來實現定時器時鐘中斷處理,但在本系統的設計過程中,把定時器中斷設為IRQ中斷模式,并且IRQ中斷包括好多中斷源。因引,把該函數作為IRQ中斷的ISR,再根據中斷號來調用具體的各個中斷服務程序(如定時器中斷、MAC中斷等)。
        另外,在系統的啟動文件中,需要建立每種異常的異常向量表,并強制ARM處理器狀態位svc管理模式。
        五、總 結
        本設計在s3c451Ob的硬件平臺上成功移植了μC/OS-Ⅱ,并且移植了TCP/IP協議棧LwIP,實現了WorldFIP現場總線和Internet之間的相互通信,使得WorldFIP現場總線成為真正開放的工業現場總線。在網關的整體設計中,由于系統比較大,任務數較多,用實時內核來管理調度這些任務,要消耗較多的CPU使用率和系統的內存,具有一定的局限性,但在CPU足夠快,內存足夠大的情況下,使用網關設計,在保證了工業現場總線的實時性和可靠性的基礎上,更有利于系統的集成度和再次開發。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 全南县| 台中市| 嘉义县| 洛川县| 奉新县| 都兰县| 西华县| 厦门市| 南开区| 丹寨县| 西青区| 玛沁县| 县级市| 行唐县| 临泽县| 信丰县| 新源县| 安阳县| 礼泉县| 吴桥县| 汶川县| 宁国市| 施秉县| 图木舒克市| 阳新县| 张家港市| 加查县| 通河县| 临沂市| 五莲县| 彝良县| 西宁市| 武清区| 葫芦岛市| 武邑县| 铅山县| 含山县| 平遥县| 离岛区| 邛崃市| 闽侯县|