基于A(yíng)tmel-View的電子相框實(shí)現
4 Nucleus操作系統的嵌入
Nucleus Plus是美國源代碼操作系統商ATI公司推出的新一代嵌入式操作系統,屬于搶先式實(shí)時(shí)多任務(wù)操作系統內核, 95%的代碼使用ANSI C編寫(xiě),非常便于移植于各種處理器家族。在通訊、國防、工業(yè)控制、航空/航天、鐵路、網(wǎng)絡(luò )、POS、自動(dòng)化控制、智能家電等領(lǐng)域的廣泛應用。
Nucleus Plus通常作為一個(gè)C 庫文件實(shí)現。實(shí)時(shí)的Nucleus Plus應用被鏈接到Nucleus Plus庫。目標文件可以下載到目標機,或者放到ROM 里。在一個(gè)典型的目標環(huán)境,假設所有服務(wù)被應用,Nucleus Plus指令集的二進(jìn)制映象文件需要大概20K 字節的內存。
總的來(lái)說(shuō),Nucleus Plus極大的提高了實(shí)時(shí)應用程序的開(kāi)發(fā)工作。這些可以轉變成更低的開(kāi)發(fā)投資和更短的開(kāi)發(fā)周期。自從Nucleus Plus支持應用程序移值到新的處理器系列上以來(lái),應用的開(kāi)發(fā)投資已經(jīng)被保障了。
4.1多任務(wù)系統的實(shí)現
Atmel-View實(shí)質(zhì)上還是一個(gè)單任務(wù)的嵌入式定制系統,現有功能的運用主要基于串行運行。但隨著(zhù)應用的深入功能模塊的擴展,單任務(wù)系統逐漸顯得力不從心。
藍牙模塊的運行需要多任務(wù)系統的支持,在藍牙服務(wù)的開(kāi)啟狀態(tài)下,需要不斷監聽(tīng)無(wú)線(xiàn)請求,在接受到藍牙傳輸請求后進(jìn)行傳輸處理。使用單任務(wù)方式來(lái)支持藍牙服務(wù)的監聽(tīng)顯然是不合理的,那樣Atmel-View將停止運行其功能。
本設計使用Nucleus Plus提供系統級的多任務(wù)調度,將Atmel-View模塊和藍牙模塊作為同等的任務(wù)進(jìn)行加載運行。選擇Nucleus Plus作為任務(wù)調度系統,在于其易用性、代價(jià)小、嵌入式特性。
4.2 初始化
INT_Initialize 子程序在Nucleus Plus系統中是最先運行的。對大多數的目標環(huán)境,硬件復位向量必須包含在INT_Initialize 地址中。INT_Initialize 負責所有與目標硬件相關(guān)的初始化。與目標硬件相關(guān)的初始化通常包括設置不同種類(lèi)的處理器控制寄存器,中斷向量表,全局的C 數據元素,一些Nucleus Plus變量和系統堆棧指針。當INT_Initialize 完成,控制轉移到高級Nucleus Plus初始化子程序INC_Initialize上。注意控制不會(huì )返回INT_Initialize。
INC_Initialize 調用每個(gè)Nucleus Plus組件的初始化子程序。在所有Nucleus Plus初始化完成之后,INC_Initialize 調用用戶(hù)供應的初始化子程序Application_Initialize。
Application_Initialize 子程序負責定義初始化應用環(huán)境。初始化應用任務(wù),郵箱,隊列,管道,信號量,事件集,內存池和其他Nucleus Plus對象都在子程序中被定義。在A(yíng)pplication_Initialize 返回后,INC_Initialize 開(kāi)始初始化任務(wù)調度表。
4.3 任務(wù)
任務(wù)就是目的明確的半獨立程序段。大多數現代實(shí)時(shí)應用都要求多任務(wù)。另外,這些任務(wù)的重要等級經(jīng)常變化。管理這些競爭、實(shí)時(shí)任務(wù)的運行是Nucleus Plus的主要目的。每個(gè)任務(wù)都有五種狀態(tài):運行、就緒、掛起、中止、完成。
4.4 任務(wù)通信與同步
Nucleus Plus 為通信目的提供郵箱(mailbox),隊列(queues),管道(pipes)。郵箱,隊列,管道是獨立的公共設備。任務(wù)之間和其他系統設備之間的聯(lián)系由應用程序確定。這些通信設備之間主要的差別是數據通信的類(lèi)型。在A(yíng)tmel-View模塊和藍牙模塊的進(jìn)程間通信方式,這里選擇使用隊列和信號量來(lái)實(shí)現。
4.4.1 隊列的應用
在菜單系統的應用中,需要加入對藍牙模塊的支持。除了構建藍牙設定菜單外,在藍牙進(jìn)程開(kāi)啟并實(shí)時(shí)運行的狀態(tài)下,需要通過(guò)隊列方式的進(jìn)程間通信來(lái)獲取藍牙進(jìn)程的傳輸請求狀況。當傳輸請求發(fā)生后,菜單系統將及時(shí)進(jìn)行反應,提示用戶(hù)當前處于藍牙傳輸過(guò)程并且程序阻塞于此。當傳輸結束后,同樣通過(guò)隊列消息來(lái)得到通知,繼續菜單系統的程序邏輯。
藍牙進(jìn)程進(jìn)行藍牙傳輸服務(wù)的監控工作,一旦外部傳輸請求發(fā)生,藍牙進(jìn)程將通過(guò)調用BTUI_UpdateResponse函數來(lái)通知Atmel-View任務(wù),并開(kāi)始數據接收寫(xiě)入工作。此函數主要是作為藍牙任務(wù)端響應藍牙傳輸相關(guān)事件,進(jìn)而與Atmel-View進(jìn)行及時(shí)有效的溝通、協(xié)調工作。當藍牙任務(wù)端事件響應時(shí),就調用NU_Send_To_Queue函數,將信息傳遞到隊列Task_bt_queue中。
在MenuMode進(jìn)行完初始界面繪制后,即刻開(kāi)始不斷監聽(tīng)與藍牙模塊共享的隊列Task_bt_queue,在調用函數NU_Receive_From_Queue接收到藍牙傳輸請求后,即彈出信息框通知用戶(hù)藍牙傳輸進(jìn)行中,同時(shí)關(guān)閉影響藍牙傳輸的紅外接收并設置藍牙傳輸狀態(tài)為T(mén)RUE,以避免按鍵處理模塊的進(jìn)行。如此,程序將在藍牙傳輸期間不斷進(jìn)行while循環(huán)隨時(shí)監聽(tīng)Task_bt_queue的新信息情況。直至接收到來(lái)自藍牙模塊的傳輸完畢信息,標識著(zhù)藍牙傳輸工作的完畢,則更新顯示區,重開(kāi)啟紅外接收并將藍牙傳輸狀態(tài)設為FALSE以讓按鍵處理模塊重新進(jìn)行。
4.4.2 Semaphore的應用
Nucleus Plus 提供信號量(semaphores),事件集(event groups)和信號(signals)解決信號同步問(wèn)題。信號量和事件集都是獨立的,公用的設備。任務(wù)和其他系統設備的聯(lián)系由應用程序決定。在A(yíng)tmel-View模塊和藍牙模塊的進(jìn)程間同步方式,這里選擇使用信號量來(lái)實(shí)現。
在A(yíng)tmel-View的UI應用中,加載媒體文件訪(fǎng)問(wèn)存儲卡在所難免,而藍牙模塊的傳輸工作也將把接收到的文件寫(xiě)入存儲卡中。在藍牙進(jìn)程和Atmel-View進(jìn)程同時(shí)訪(fǎng)問(wèn)存儲卡設備時(shí),由于資源重入的不支持將導致資源沖突程序癱瘓的發(fā)生。因而,這里使用Nucleus的Semaphore來(lái)解決資源競爭問(wèn)題。
聲明了NU_SEMAPHORE變量后,此變量將在A(yíng)tmel-View進(jìn)程和藍牙進(jìn)程間共享,在訪(fǎng)問(wèn)沖突資源的時(shí)候,調用NU_Obtain_Semaphore和NU_Release_Semaphore函數來(lái)將資源訪(fǎng)問(wèn)模塊包住,從而保證在得到Semaphore后,直至釋放Semaphore前,資源訪(fǎng)問(wèn)都是安全的,因為另一正要訪(fǎng)問(wèn)此資源的進(jìn)程將由于得不到唯一的Semaphore而暫時(shí)被自動(dòng)懸掛起來(lái)。
5總結展望
隨著(zhù)電子相框市場(chǎng)的日趨成熟,技術(shù)的不斷發(fā)展,功能模塊日益增多,系統架構也變得越發(fā)復雜。這使得軟件產(chǎn)品的可用性、易用性、友好性顯得更為重要起來(lái),UI的設計實(shí)現是否合理將直接影響這些因素。
市面上流行的不少電子相框的UI設計存在著(zhù)架構簡(jiǎn)陋、復用性差、可擴展性差的問(wèn)題。本論文的方案主要基于Atmel-View,完成了一套層次化、結構化、易擴展的菜單系統,實(shí)現效果良好。并嵌入Nucleus Plus操作系統,實(shí)現了菜單系統和藍牙模塊間的進(jìn)程通信和同步,有效得支持了藍牙模塊。
電磁爐相關(guān)文章:電磁爐原理
評論