基于Lonworks總線(xiàn)的嵌入式智能節點(diǎn)的設計
OS_CPU_C.C要求編寫(xiě)六個(gè)簡(jiǎn)單的c函數:OSTaskSiklnit();OSTaskCreateHook();OSTaskDelHook();OSTaskSwHook();OSTaskStatHook();OSTimeTickHook()唯一必要的函數是OSTaskStklnit(),其它五個(gè)函數必須聲明但沒(méi)必要包含。對于OSTaskStklnit()而言,OSTaskCreate()和OSTaskCreateExt()通過(guò)調用OSTaskStkInit()來(lái)初始化任務(wù)的堆棧結構,OSTaskStkInit()返回堆棧指針所指的地址,OSTaskCreate()會(huì )獲得該地址并將它保存到任務(wù)控制塊(OS TCB)中。
本文引用地址:http://dyxdggzs.com/article/87438.htmCPU_ A.ASM要求編寫(xiě)四個(gè)簡(jiǎn)單的匯編語(yǔ)言函數:OSStartHighRdy();OSCtxSw();
OSIntCtxSw();OSTickISR()。將所有與處理器相關(guān)的代碼放到OS_CPU_C.C文件中,而不必放在一些分散的匯編語(yǔ)言文件中。
(1)OSStartHighRdy():運行高優(yōu)先級就緒任務(wù)函數OSStartHighRdy()必須調用OSTaskSwHook(),因為OSTaskSwHook()可以通過(guò)檢查OSRunning而確定是OSStartHighRdy()在調用它(OSRunning為FALSE)還是正常的任務(wù)切換在調用它(OSRunning為T(mén)RUE)。OSStartHighRdy()還必須在最高優(yōu)先級任務(wù)恢復之前和調用OSTaskSwHook()之后設置OSRunning為T(mén)RUE。
(2)OSCtxSw()、OSIntCtxSw():上下文切換函數任務(wù)級的切換是通過(guò)發(fā)軟中斷命令來(lái)完成的,其中斷向量地址必須指向OSCtxSw()。中斷級的切換由OSIntExit()通過(guò)調用OSintCtxSw()來(lái)執行切換功能。
(3)OSTickISR():定時(shí)中斷函數OSTickISR()函數主要負責進(jìn)人中斷時(shí)保存處理器寄存器內容,完成任務(wù)切換退出時(shí)恢復處理器寄存器內容并返回,相當于中斷服務(wù)程序的入口。
4 μc/os_Ⅱ與ShortStack的結合
因為μc/os_Ⅱ嵌入式操作系統代碼和ShortStack應用程序代碼的固有的特征,兩者可以有機的結合在一起。μcos_Ⅱ由系統服務(wù),如郵箱、內存管理、消息隊列、信號量管理等,對于這些服務(wù)是在OS_CFG.h定義了的,當設計的系統要使用這些服務(wù)時(shí)只需要將定義的值改為1即可。將ShortStack應用程序中的常量定義全部放在OS_CFG.h中。這樣可以同時(shí)對操作系統各種服務(wù)函數和ShortStack 的API和APP函數實(shí)現了裁減。
將ShortStack應用程序當作μcos_Ⅱ操作系統的一個(gè)任務(wù)運行。先定義堆棧,以便保存本任務(wù)在任務(wù)切換時(shí)單片機的寄存器的當前值,當μcos_Ⅱ下次調度到該任務(wù)運行時(shí)就可以從堆?;謴虲PU的值,從而該任務(wù)繼續運行。程序如下:
OS_STK TaskStartStk[TASK_STK_SIZE]; //任務(wù)Task1的任務(wù)堆棧
OS_STK ShortStackStk[TASK_STK_SIZE]; //ShortStack的任務(wù)堆棧
… //其他任務(wù)堆棧
Void main(void)
{
OSInit();
OSTaskCreat(Task1,(void *)0,& TaskStartStk[TASK_STK_SIZE-1],0);
OSTaskCreat(ShortStack,(void *)0,& ShortStackStk[0],2);
… //創(chuàng )建其他任務(wù)
OSStart();
return 0;
}
void ShortStack(void)
{
lonInit();
for(; ; )
{
lonEventHandler();//周期性調用檢查是否有任何LonWorks事件要處理
}
}
由于μc/os_Ⅱ操作系統沒(méi)有任何的硬件驅動(dòng),所以用戶(hù)自己將ShortStack串口驅動(dòng)、輸入輸出隊列操作部分擴展為該操作系統的一部分。此外,系統可以添加其他特定的任務(wù),通過(guò)系統調度,實(shí)現節點(diǎn)的合理利用,增加節點(diǎn)的實(shí)用性。如圖4所示。
最后,將帶有TP/FT-10F控制模塊的MSP430F149芯片接入Gizmo4開(kāi)發(fā)板,通過(guò)Nodebuilder開(kāi)發(fā)工具編譯,進(jìn)入調試界面,利用LonMaker連接為兩節點(diǎn)網(wǎng)絡(luò ),測試兩節點(diǎn)是否通訊。
圖4 軟件結構圖
5 結束語(yǔ)
MSP430F149是16bit的RISC微處理器,該處理器特別適用于手持式設備以及高性?xún)r(jià)比、低功耗的網(wǎng)絡(luò )設備,它集成了中斷控制、功率控制、存儲控制、UART、PWM、ADC等豐富的資源。由于工業(yè)、家庭網(wǎng)絡(luò )化的需求,以及LonWorks總線(xiàn)便捷的入網(wǎng)方式,可以使該多用途智能節點(diǎn)分散自制,每個(gè)節點(diǎn)一方面分散地解決其特定的任務(wù),另一方面通過(guò)點(diǎn)對點(diǎn)、點(diǎn)對多點(diǎn)的通訊,解決節點(diǎn)之間的信息傳輸,實(shí)現分散基礎上的融合。上位機要完成對LON 網(wǎng)絡(luò )的監控與管理功能,二者之間必須能進(jìn)行動(dòng)態(tài)數據交換。LON 總線(xiàn)技術(shù)還提供了DDE Server 軟件。DDE Server 能夠實(shí)現LON網(wǎng)絡(luò )和任何具有DDE 功能的Windows 應用程序間交換網(wǎng)絡(luò )變量和信息。系統提供給用戶(hù)一個(gè)十分友好的人機界面,用戶(hù)可通過(guò)上位機設置各節點(diǎn)實(shí)時(shí)運行情況以及歷史運行記錄、打印等。
本文作者創(chuàng )新點(diǎn):運用ShortStack技術(shù),設計了以MSP149為主處理器,Neuron芯片為微處理器的通用節點(diǎn),與Lonworks總線(xiàn)實(shí)現通訊連接,并可擴展多種用途,具有很好的實(shí)用和經(jīng)濟價(jià)值。
參考文獻
[1] David E.Simon著(zhù),陳向群等譯,嵌入式系統軟件教程[M].北京:機械工業(yè)出版社,2005
[2] ShortStack User’s Guide,Echelon, 2002
[3] Jean J.Labrosse著(zhù),邵貝貝譯,μC/OS_II源碼公開(kāi)的實(shí)時(shí)嵌入式操作系統[M].北京:中國電力出版社,2001
[4] 胡大可 MSP430系列FLASH型超低功耗16位單片機[M].北京:北京航空航天大學(xué)出版社 ,2001
[5] 賈慧瀟,王振臣.基于LonWorks 的高性能溫濕度測控系統[J].微計算機信息,2006,8-1:30-34。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論