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