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