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