基于eCos在基于A(yíng)RM7硬件平臺上的應用

發(fā)布時(shí)間:2010-8-20 14:27    發(fā)布者:lavida
關(guān)鍵詞: ARM7 , eCos , 硬件平臺
eCos(Embedded Configurable Operating System)最初是由Cygnus Solutions公司為面向嵌入式領(lǐng)域而開(kāi)發(fā)的源碼公開(kāi)、具有很強的可移植性和可配置性的,適合于深度嵌入式開(kāi)發(fā)的實(shí)時(shí)操作系統,F在eCos主要由eCosCentric公司和eCos開(kāi)源社區共同開(kāi)發(fā)維護。eCos的特性,特別是它的可配置性,能有效縮短嵌入式產(chǎn)品的開(kāi)發(fā)周期并降低成本。  

1 eCos的體系結構及可配置性  

1.1 eCos體系結構  

eCos采用模塊化設計,將不同功能的軟件分成不同的組件,使其分別位于系統的不同層次。這種層次結構實(shí)現了eCos的可配置性、可移植性、兼容性和可擴展性。圖1是eCos系統的層次結構框圖。硬件抽象層(HAL)使其上層次結構不必關(guān)心具體的硬件結構,因此只需對HAL進(jìn)行修改就可以使整個(gè)eCos的應用移植到新的硬件平臺上。  


  
圖1 eCos的層次結構框圖  

內核是eCos的一個(gè)核心組件,也是系統的一個(gè)可選組件,一些較為復雜的應用需要內核的支持。內核提供了多個(gè)可供選擇的調度算法,可以很好地支持多任務(wù)處理。eCos內核提供了一組豐富的同步源語(yǔ),完全能滿(mǎn)足各種嵌入式應用的需求。內核還負責對中斷和例外進(jìn)行處理,它的中斷滯后處理機制保證了系統的實(shí)時(shí)性。此外,內核還具有內存分配機制和定時(shí)機制,并提供多線(xiàn)程GDB調試支持。內核為上層軟件和應用軟件提供了豐富的API接口函數。  

RedBoot是一個(gè)無(wú)內核的系統引導程序,是eCos的一個(gè)特殊應用。RedBoot可以加載eCos應用程序,并提供Debug支持,是開(kāi)發(fā)eCos系統時(shí)非常有用的工具。設備驅動(dòng)程序負責對硬件設備進(jìn)行控制和管理,并完成設備數據的讀/寫(xiě)操作。設備驅動(dòng)程序自身也采用層次結構,上層驅動(dòng)程序(相當于一個(gè)虛設備)可以調用下層驅動(dòng)程序(物理設備)。驅動(dòng)程序為上層軟件提供標準的API函數,應用程序可以使用這些API函數對設備進(jìn)行訪(fǎng)問(wèn)。  

eCos包含的網(wǎng)絡(luò )支持包支持完整的TCP/IP網(wǎng)絡(luò )協(xié)議棧。eCos還提供了標準庫(ANSI C庫和數學(xué)庫)、兼容層(POSIX兼容和uITRON兼容)、文件系統等。作為一種開(kāi)放軟件,eCos還可以很方便地容納第三方軟件。  

1.2 可配置性原理  

eCos的一個(gè)主要特性就是其可配置特性?膳渲眯宰罱K是靠代碼中的條件編譯來(lái)完成的,條件編譯是編程語(yǔ)言的特點(diǎn),并不是eCos的原創(chuàng )。當一個(gè)軟件工程中的條件編譯項的數目和復雜性達到一定程度時(shí),其中有一些條件編譯項就會(huì )因為存在邏輯上的依賴(lài)關(guān)系而使條件編譯產(chǎn)生沖突。而如何發(fā)現并有效解決這種沖突才是eCos可配置性的特點(diǎn),如圖2所示,其可配置特性的實(shí)現主要由組件定義語(yǔ)言CDL(Component Definition Language)、組件倉庫ecos.db、圖形配置工具configtool三者共同完成。  


  
圖2 可配置機制  

(1) 組件定義語(yǔ)言CDL  

CDL是eCos組件框架中的一個(gè)關(guān)鍵部分,eCos所有模塊的程序包中都包含一個(gè)CDL腳本對該包進(jìn)行描述并提供配置選項。以本系統中的串口驅動(dòng)程序包為例,在該包對應的CDL中定義了一個(gè)名為CYGPKG_IO_SERIAL_ARM_AT91的cdl_package。在這個(gè)cdl_package中詳細列出了該包的一些屬性,如該包必須在工程已經(jīng)包含了硬件抽象層包CYGPKG_HAL_ARM_AT91和上層串口I/O包CYGPKG_IO_SERIAL的情況下才會(huì )被使能。另外,串口的一些常用特性,如波特率、設備名、緩沖區大小等配置選項也是必不可少的。在一些復雜的CDL中還會(huì )包含對該包中的源程序進(jìn)行編譯時(shí)的一些編譯選項。在進(jìn)行配置的時(shí)候,該包還會(huì )產(chǎn)生一個(gè)包含了各個(gè)可配置參數數值的頭文件。當其他包使用由CYGPKG_IO_SERIAL_ARM_AT91包提供的可配置參數時(shí),這個(gè)新產(chǎn)生的頭文件就會(huì )被相關(guān)的源文件通過(guò)#include語(yǔ)法包含。  

(2) 組件倉庫ecos.db  

ecos.db是一個(gè)包含了所有可用程序包和配置模版的文本文件。在該文件中,需要注冊所有的CDL包。在注冊時(shí)以package關(guān)鍵字提供相應包的名稱(chēng)、CDL腳本文件的文件路徑以及對該包的一個(gè)簡(jiǎn)單描述。在ecos.db中還會(huì )以target關(guān)鍵字生成配置模版,從而提供目標平臺的一些基本組成結構,使目標平臺包括所需要的已經(jīng)注冊了的CDL配置包。  

(3) 圖形配置工具configtool  

configtool是利用MFC編寫(xiě)的Windows程序,是eCos可配置性的執行者,也可以理解成是CDL腳本的解釋器。一方面它讀取ecos.db文件中的目標平臺和已注冊的配置包信息,根據配置包的路徑找到相應的CDL腳本,然后根據腳本中給出的屬性向程序員提供圖形化的配置信息;另一方面,它還可以接受用戶(hù)的輸入,包括單選按鈕、復選框、下拉列表、文本輸入等。當用戶(hù)保存一個(gè)配置時(shí),configtool會(huì )根據CDL語(yǔ)言的提示生成相應的頭文件,也會(huì )將指定的頭文件從配置包中復制到配置文件所在的工作目錄。無(wú)論是生成的頭文件還是拷貝的頭文件,都會(huì )在編譯時(shí)被源程序所引用。對于內核源程序,configtool又可以理解成編譯器。當用戶(hù)的配置選項被保存并且對工程進(jìn)行編譯時(shí),configtool會(huì )在后臺調用真正的編譯器GCC,根據配置包CDL中的編譯選項控制GCC對所有需要的內核源文件進(jìn)行編譯并生成庫文件和對應的鏈接腳本。當然configtool只是對eCos內核進(jìn)行編譯,用戶(hù)的應用程序只需在編譯時(shí)和由configtool編譯生成的庫文件進(jìn)行鏈接就可以得到最終的可執行映像文件。  

2 系統硬件框架  

本系統是一個(gè)以ARM7為核心構成的測控系統,通過(guò)對傳感器的脈沖信號進(jìn)行處理而得到待測物料的流量,并通過(guò)控制給料器的給料速度達到流量控制的目的。對于一個(gè)有實(shí)用價(jià)值的測控系統,必須具有人機交互、閉環(huán)控制、數據通信和存儲等功能。本課題所研制的流量測控系統的硬件框圖如圖3所示。  


  
圖3 流量測控系統硬件框圖  

圖3中,處理器為ARM7內核的工業(yè)級芯片AT91M55800,其強大的功能保證了系統的實(shí)時(shí)性和穩定性的要求。2 MB的Flash SST39VF160用來(lái)保存程序代碼、測量所需的一些參數以及測量結果的簡(jiǎn)單統計信息。在工業(yè)生產(chǎn)中,經(jīng)常需要對一次測量中的數據進(jìn)行歷史再現,以便對一些事故或故障進(jìn)行排查。本系統通過(guò)采用1 MB的大容量RAM來(lái)實(shí)現這一功能:除了用來(lái)作為程序運行時(shí)的內存外,RAM還用來(lái)實(shí)時(shí)保存每一時(shí)刻的測量數據。USB總線(xiàn)的通信口用來(lái)和現場(chǎng)計算機進(jìn)行通信,以實(shí)現一些更加完善的處理,如數據打印、結果分析、實(shí)時(shí)數據的硬盤(pán)保存等。分辨率為320×240的LCD用來(lái)作為系統的顯示終端配合4×5的鍵盤(pán)來(lái)完成系統的人機交互操作。對變頻器的控制和對溫度信號的采集通過(guò)485總線(xiàn)完成。6路脈沖信號是本系統測量功能的核心,通過(guò)對這6路脈沖進(jìn)行處理可以得到流量相關(guān)的所有信息。4"20 mA電流信號用來(lái)控制給料系統,以實(shí)現閉環(huán)控制。由于在工業(yè)環(huán)境中使用,對于一些長(cháng)線(xiàn)連接必須采取隔離措施。本系統對測量脈沖、485通信信號和4"20 mA電流信號都采取了光電隔離措施。  

3 eCos在系統上的移植與應用軟件編寫(xiě)  

3.1 eCos內核的移植  

由于eCos內核采用了可配置的模塊化設計思想,因此只要修改硬件抽象層HAL的代碼和CDL腳本并且在ecos.db中注冊就可以應用于新的目標系統。HAL又可以細分為3個(gè)層次: ① 體系結構抽象層。eCos是可以應用于多種體系結構平臺上的操作系統,如ARM、MIPS、POWERPC等,在eCos發(fā)布時(shí)已經(jīng)將這些體系結構層的移植包一同發(fā)布了出來(lái)。本系統的體系結構抽象層是ARM7體系結構抽象層。② 變體抽象層。對于同一種體系結構的處理器,各生產(chǎn)廠(chǎng)家會(huì )有不同的系列和型號(如Atmel的AT91系列、Philips的LPC系列等),雖然它們都采用ARM7體系結構,但是不同的寄存器配置模式和中斷處理方法也會(huì )影響到eCos的移植。本系統所使用的處理器AT91M55800使用較為普遍,在eCos開(kāi)源社區已經(jīng)有移植好的AT91M55800變體抽象層的代碼和CDL腳本,只需作系統啟動(dòng)后對I/O口的賦值情況等少許的改動(dòng)即可完成對變體抽象層的移植。③ 平臺抽象層。平臺抽象層是對目標系統的整個(gè)硬件平臺進(jìn)行抽象,包括平臺的啟動(dòng)、芯片配置、定時(shí)、I/O寄存器及中斷寄存等等。  

系統需要進(jìn)行的移植工作主要是平臺抽象層的移植,而平臺抽象層中最重要的是Flash驅動(dòng)包和內存布局文件的移植。主要的步驟為:  

① 安裝AT91M55800變體抽象層包。從eCos開(kāi)源社區下載好的變體抽象層包在一個(gè)名為eb55的文件夾中,在這個(gè)文件夾中還有cdl、include、src等子文件夾分別包含了CDL腳本、頭文件,源文件。由于eCos的軟件包有嚴格的層次結構,所以在安裝軟件包時(shí)應遵循這一結構以便于維護。AT91M55800屬于A(yíng)RM7的一個(gè)變體,同AT91系列的其他CPU處于同一層次,所以變體抽象層軟件包文件夾eb55的具體路徑應為/hal/arm/at91/eb55。接下來(lái)還應在ecos.db中注冊變體抽象層包,以package關(guān)鍵字注冊名為CYGPKG_HAL_ARM_AT91_EB55的包,這個(gè)名字必須和包中CDL文件hal_arm_at91_eb55.cdl中的所定義的包名完全一致。在包名后面的花括號中登記hal_arm_at91_eb55.cdl文件的路徑及文件名,以及對該包的簡(jiǎn)單文字說(shuō)明。  

② 編寫(xiě)Flash的底層驅動(dòng)軟件包,以便能夠操作目標系統的Flash存儲器。由于本系統在前期調試和代碼固化時(shí)利用了RedBoot,而RedBoot通過(guò)Flash驅動(dòng)程序操作目標Flash,所以必須先移植好Flash驅動(dòng)程序才能進(jìn)行更進(jìn)一步的開(kāi)發(fā)工作。  

首先需要編寫(xiě)底層驅動(dòng)程序源文件。不同的Flash的塊空間大小以及寫(xiě)操作一般是不一樣的。本系統所用的Flash SST39VF160是2 MB的16位NOR Flash,共有512(0x200)個(gè)塊空間,其塊大小為4K(0x1000),寫(xiě)操作的命令碼符合JEDEC標準。這些特點(diǎn)與Atmel公司AT49系列Flash比較類(lèi)似,因此Flash驅動(dòng)程序可以從eCos發(fā)布時(shí)自帶的AT49系列Flash的驅動(dòng)程序修改得到。最重要的地方是修改描述Flash特性的結構體flash_dev_info_t變量中成員block_size和block_count的值,使其分別為0x1000和0x200。  

接下來(lái)需要編寫(xiě)與Flash底層驅動(dòng)對應CDL腳本,使配置工具configtool能夠正確配置編譯Flash驅動(dòng)程序。這個(gè)CDL文件完全可以參照AT49驅動(dòng)包中的CDL文件編寫(xiě)。以cdl_package關(guān)鍵字定義名為CYGPKG_DEVS_Flash_SST_39VF160的包,在命令體中給出具體的配置參數。由于底層驅動(dòng)包必須結合上層驅動(dòng)才能工作,所以在命令體中用active_if CYGPKG_IO_Flash命令告訴configtool,必須在上層驅動(dòng)包CYGPKG_IO_Flash已經(jīng)被包含的情況下底層驅動(dòng)包才會(huì )使能。  

最后,需要在ecos.db中注冊底層驅動(dòng)軟件包。具體做法和變體抽象層包的注冊方法相同。  

③ 修改內存布局文件,使configtool能夠正確定位程序在系統存儲器中的位置。eCos提供3種不同的運行方式,即ROM方式、RAM方式、ROMRAM方式。每種模式都有兩個(gè)相應的布局文件,如RAM方式的mlt_arm_at91_eb55_ram.ldi和mlt_arm_at91_eb55_ram.h。*.ldi和常見(jiàn)的ARM開(kāi)發(fā)環(huán)境ADS中scattered鏈接方式下的*.scf文件的作用類(lèi)似,即用來(lái)對不同段分別指定不同的鏈接地址。在*.ldi中需要修改MEMORY和SECTI*兩部分。對于代碼在RAM中運行的內核及應用程序,需要根據系統RAM的實(shí)際情況修改內存布局文件中相關(guān)參數的值。本系統具有1 MB的RAM,但有一半用來(lái)存放測量數據,根據系統實(shí)際的硬件情況,其起始地址為0x02000000,大小為0x80000,所以這個(gè)內存塊定義為ram: RIGIN=0x02000000, LENGTH=0x80000。處理器內部集成了8 KB SRAM,其起始地址為0,大小為0x2000,所以這個(gè)內存塊定義為sram: RIGIN=0x00000000,LENGTH=0x2000。這樣系統的MEMORY部分就由名為ram和sram的兩個(gè)內存塊構成。系統比較重要的兩處SECTI*部分的修改為SECTION_fixed_vectors (sram, 0x20, LMA_EQ_VMA) 和SECTION_rom_vectors (ram, 0x02008000, LMA_EQ_VMA),第一處表示fixed_vectors段分配在從0x20開(kāi)始的sram中,且LMA_EQ_VMA指定其加載地址等于虛擬地址。由于RedBoot運行時(shí)需要占用從0x02000000開(kāi)始的一定空間的RAM,所以第二處使程序代碼從0x02008000開(kāi)始的ram中運行。*.ldi文件修改完畢后需要相應地修改*.h文件中的宏,如#define CYGMEM_REGION_ram (0x02000000)。  

④ 在組件倉庫ecos.db中為以關(guān)鍵字target添加名為Flow55的新目標平臺。在這個(gè)目標平臺中還必須用關(guān)鍵字packages包括ARM7體系結構層包和AT91M55800變體抽象層包,同時(shí)為了實(shí)現調試還必須包括串口驅動(dòng)包和Flash驅動(dòng)包及其上層驅動(dòng)包。除了這些被包含的軟件包外,根據不同的選擇configtool還會(huì )為目標平臺包添加一些默認的包,如內核包、數學(xué)庫包等。另外,還應加入一些對該平臺的簡(jiǎn)單描述。  

3.2 內核的配置  

移植完成以后,一個(gè)最基本的目標平臺就產(chǎn)生了。在configtool中可以看到Templates菜單的硬件平臺列表中新增了Flow55目標平臺模版,以default方式打開(kāi)這個(gè)模版。各個(gè)軟件包的CDL腳本中都給出了默認的配置值,有些值需要根據具體的應用要求重新配置。本系統一些重要的配置情況如下:  

① 由于系統線(xiàn)程數量較少(小于10),所以選擇效率更高的位圖調度器Bitmap scheduler,并將線(xiàn)程數numbers of priority levels限定為16,以提高任務(wù)切換的速度。當點(diǎn)擊位圖調度器的單選按鈕時(shí),configtool會(huì )檢測到一個(gè)配置沖突。由于時(shí)間片輪轉是默認使能的,而時(shí)間片輪轉僅僅對應于多級隊列調度器,所以出現配置沖突。Configtool會(huì )給出一個(gè)推薦的解決沖突的方法,即禁止時(shí)間片輪轉,按照這個(gè)推薦的解決方法可以安全地解決這個(gè)沖突。這個(gè)地方可以充分體現出eCos強大的可配置性。  

② 由于配合RedBoot一起使用,所以?xún)群伺渲脼镽AM啟動(dòng)方式。這樣,系統上電后程序將由RedBoot復制到RAM中運行,以提高速度。  

③ 系統的晶振頻率為16 MHz,經(jīng)PLL倍頻后為32 MHz,所以需將Clock speed配置為32000000;RTC是系統的時(shí)鐘節拍發(fā)生器,本系統的時(shí)鐘節拍時(shí)間選為20 ms,所以也需要對RTC相關(guān)項進(jìn)行配置。具體參數為Real?time clock numerator配置為2000000000,Real?time clock denominator配置為100,Real?time clock period配置為20000。  

其余的配置選項使用默認的配置值即可。完成配置工作后,對內核進(jìn)行編譯可以產(chǎn)生內核庫文件和鏈接腳本以及相關(guān)頭文件。這些生成的文件再同應用程序一起編譯、鏈接,生成最終的可執行映像文件。  


  
圖4 應用軟件結構  

3.3 基于eCos操作系統的應用軟件的編寫(xiě)  

eCos是一個(gè)單進(jìn)程多線(xiàn)程的操作系統,多個(gè)線(xiàn)程在宏觀(guān)上可以認為是并發(fā)運行的,而且各線(xiàn)程之間耦合低,便于軟件的編寫(xiě)和維護。針對這一特點(diǎn),本系統的軟件結構如圖4所示。  

本系統主要有兩種程序運行方式,分別稱(chēng)為方式A和方式B。方式A中,硬件中斷產(chǎn)生后,相應的ISR(Interrupt Service Routine)程序運行,由于ISR中是禁止中斷的,所以在ISR中只進(jìn)行最簡(jiǎn)單的操作,ISR退出后內核調用相應的DSR(Deferred Service Routine)。DSR中中斷是使能的,所以可以進(jìn)行一些稍復雜的處理,如簡(jiǎn)單的數據運算、內核調用(發(fā)送信號量和郵箱等)。在得到相應的信號量或消息郵箱后,相應的線(xiàn)程進(jìn)入就緒態(tài)被內核調度運行。本系統中對鍵盤(pán)的處理就是基于這種方式——按鍵產(chǎn)生硬件中斷、ISR執行,接著(zhù)在DSR中進(jìn)行相應的運算得到具體的鍵值后以消息郵箱的方式通知并喚醒鍵盤(pán)處理線(xiàn)程,鍵盤(pán)處理線(xiàn)程在完成任務(wù)后進(jìn)入休眠直到再次有按鍵發(fā)生而被喚醒。方式B中,各線(xiàn)程只是周期性地被內核調度運行,如測量數據顯示線(xiàn)程,在顯示一次數據后調用延時(shí)函數進(jìn)入休眠,直到延時(shí)完畢后再次進(jìn)入就緒態(tài)被內核調用。  

根據測控系統的實(shí)際情況,具體的線(xiàn)程編寫(xiě)如下: 方式A為流量計算線(xiàn)程、溫度測量線(xiàn)程、鍵盤(pán)處理線(xiàn)程、USB通信處理線(xiàn)程。方式B為測量數據顯示和曲線(xiàn)繪制線(xiàn)程、流量控制線(xiàn)程、初始標定線(xiàn)程。  

4 結論  

經(jīng)過(guò)實(shí)踐,本系統運行穩定,實(shí)時(shí)性能良好。由于eCos的強大可配置性使得系統的軟硬件可維護性強,在進(jìn)行硬件改動(dòng)或應用要求改動(dòng)后可方便地進(jìn)行升級。
本文地址:http://selenalain.com/thread-22746-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页