μClinux下SDRAM數據交換區的生成和使用

發(fā)布時(shí)間:2010-9-3 21:38    發(fā)布者:conniede
關(guān)鍵詞: SDRAM , μClinux , 數據交換
引言
 
數據交換區是指程序執行中使用到的各種數據所存放的內存空間。本文提出了在μClinux操作系統下為嵌入式工業(yè)網(wǎng)絡(luò )服務(wù)器開(kāi)辟數據交換萄思想和解決方案。嵌入式工業(yè)網(wǎng)絡(luò )服務(wù)器項目的開(kāi)發(fā)目的是構建一個(gè)以Client/Server模式工作的工業(yè)遠程監控系統,其前端是一個(gè)嵌入式服務(wù)器,它安裝在工業(yè)現場(chǎng),可以與三菱PLC組成的控制系統接口,對該系統實(shí)施實(shí)時(shí)監控。其中數據交換區部分起到承上啟下的樞紐作用,向上負責對客戶(hù)端交互現場(chǎng)設備數據,向下負責與接口緩沖區交互設備實(shí)時(shí)數據。系統以Motorola公司的32位控制器Cold Fire5307為CPU,使用2個(gè)現代公司的HY57V641620型(4M×16bit)的SDRAM拼成4M×32位的SDRAM,使系統具有16 bytes的RAM空間。

1 μClinux操作系統

系統選取μClinux操作系統為開(kāi)發(fā)平臺,為有2個(gè)SDRAM(4M×16bit)的嵌入式工業(yè)網(wǎng)絡(luò )服務(wù)器開(kāi)辟數據交換區。

Cold Fire 5307微處理器上可以運行很多操作系統,但是可以說(shuō)μClinux是最合適、性?xún)r(jià)比最高的操作系統。目前商用的實(shí)時(shí)操作系統,如VxWorks和Nuclesus等價(jià)格比較昂貴,而且需要附加的C編譯器和相關(guān)的調試工具。而μCOS等免費的實(shí)時(shí)操作系統又沒(méi)有很好的文件系統和TCP/IP協(xié)議的支持,就嵌入式工業(yè)網(wǎng)絡(luò )服務(wù)器的應用特點(diǎn)而言,μClinux內核采用模塊化設計,很多功能塊可以獨立地加載或卸載,在設計內核時(shí)可以把這些內核模塊作為可選項,編譯系統內核時(shí)指定。一種較通用的做法是對μClinux內核重新編譯,在編譯時(shí)仔細的選擇嵌入式系統所需要的功能支持模塊,同時(shí)刪除不需要的功能模塊。通過(guò)對內核的重新配置,可以使系統運行所需要的內核顯著(zhù)減小,從而縮減需要的控制器RAM和ROM資源。

μClinux同標準Linux的最大區別在于內存管理,對SDRAM數據交換區的管理就屬于內存管理范疇。標準Linux使用虛擬存儲器技術(shù),對于μClinux來(lái)說(shuō),其設計針對沒(méi)有MMU(memory management unit)的處理器。但μClinux仍然采用存儲器的分頁(yè)管理,系統在啟動(dòng)時(shí)把實(shí)際存儲器進(jìn)行分頁(yè)。在加載應用程序時(shí)程序分頁(yè)加載。但是由于沒(méi)有MMU管理,所以實(shí)際上μClinux采用實(shí)存儲器管理策略(real memory management)。μClinux系統對于內存的訪(fǎng)問(wèn)是直接的,它對地址的訪(fǎng)問(wèn)不需要經(jīng)過(guò)MMU,而是直接送到地址線(xiàn)上輸出,所有程序中訪(fǎng)問(wèn)的地址都是實(shí)際的物理地址。μClinux對內存的管理從編譯內核開(kāi)始,從而系統將在啟動(dòng)的初始化階段對內存進(jìn)行分頁(yè),并且標記已使用的和未使用的內存。系統將在運行應用時(shí)使用這些分布內存。另外由于采用實(shí)存儲器管理策略,用戶(hù)程序同內核以及其他用戶(hù)程序在一個(gè)地址空間,程序開(kāi)發(fā)時(shí)要保證不侵犯其他程序的地址空間,以使得程序不至于破壞系統的正常工作,或導致其他程序的運行異常。

2 數據交換區硬件架構

系統采用Motorola公司的Cold Fire 5307型32位控制電路為CPU,用2個(gè)現代公司的HY57V641620型的SDRAM(4M×16bit)拼成4M×32位的SDRAM,使系統具有16M bytes的RAM空間。

Clod Fire系列微處理器是Motorola公司繼其M68K系列微處理器之后推出的新一代內核的32位高位能嵌入式微處理器。Clod Fire系列微處理器繼承了M68K系列優(yōu)秀的指令集設計和CISC架構的優(yōu)點(diǎn),融入了RISC架構,在速度和架構之間得到了很好的平衡。Cold Fire 5307型微處理器運行在外部總線(xiàn)時(shí)鐘45MHz,內部總線(xiàn)時(shí)鐘90MHz,速率可達75MIPS。

與Flash存儲器相比較,SDRAM不具有掉電保存數據的特性,但其存取速度大大高于Flash存儲器,且具有讀/寫(xiě)的屬性。因此,SDRAM在系統中主要用于程序的運行空間、數據交換區及堆棧區。當系統啟動(dòng)時(shí),CPU首先從復位地址0x0處讀取啟動(dòng)代碼,在完成系統初始化后,程序代碼一般應調入SDRAM中運行 ,以提高系統的運行速度,同時(shí),系統及用戶(hù)堆棧、運行數據也都放在SDRAM中。SDRAM具有單位空間存儲容量大價(jià)格便宜的優(yōu)點(diǎn),已廣泛應用在各種嵌入式系統中。SDRAM的存儲單元可以理解為一個(gè)電容器,總是傾向于放電,為避免數據丟失,必須定時(shí)刷新(充電)。

嵌入式工業(yè)網(wǎng)絡(luò )服務(wù)器項目中的數據交換區根據數據交換匹配置文件生成。向上負責與客戶(hù)端交互現場(chǎng)設備數據,向下負責與接口緩沖區交互設備實(shí)時(shí)數據。每個(gè)SDRAM由4M×16bit的內部Bank組成,這個(gè)Bank的選擇由SDRAM外部引腳BA0和BA1來(lái)完成,筆者將BA0和BA1都連接在Cold Fire 5307的高端地址線(xiàn)上;其他信號和Cold Fire 5307都一一對應。UDQM和LDQM是SDRAM的高低字節片選信號,因為每個(gè)SDRAM都是16位架構,所以將二片SDRAM拼成32位時(shí),除數據線(xiàn)和這二個(gè)片選信號之外,其他信號線(xiàn)對二個(gè)SDRA來(lái)說(shuō)都是共用的。這二個(gè)信號分別接Cold Fire 5307的CAS0、CAS1和CAS2、CAS3。SDRAM與MCF5307的連接如圖1所示。



Cold Fire 5307可以支持二個(gè)Bank的SDRAM,在本系統中只使用了第一個(gè)Bank,另外一個(gè)Bank的控制信號懸空不使用。其中,SDRAM和FlashRom以及其他外設一同使用32位數據總線(xiàn)D0-D31;SDRAM映射到內部物理地址,但是因為SDRAM的特殊性,并不需要所有的地址線(xiàn)信號A0-A31,而是使用其中一部分信號線(xiàn),這個(gè)地址映射的工作由DRAM控制器來(lái)完成;RAS0-RAS1是Bank片選信號,本設計中只使用RAS0來(lái)片選所使用的SDRAM Bank;CAS0-CAS3是SDRAM 32位數據線(xiàn)中4個(gè)8位數據線(xiàn)(Byte)獨立的片選信號;SCAS和SRAS分別是SDRAM的行、列地址鎖存信號;DRAMW是DRAM寫(xiě)信號;BCLK0是系統時(shí)鐘輸出,連接到SDRAM的時(shí)鐘輸入引腳CLK端;SCKE是SDRAM時(shí)鐘使能信號,來(lái)使能輸入給SDRAM的時(shí)鐘信號,高電平時(shí)SDRAM自動(dòng)進(jìn)入休眠狀態(tài)。

3 數據交換區軟件實(shí)現

服務(wù)器依據數據交換區配置文件生成設備數據交換區。服務(wù)器進(jìn)入運行模式之后,首先檢查生成數據交換區與底層緩沖區的配置文件是否存在。如果不存在則打印錯誤信息,存在則依據配置文件在系統SDRAM區開(kāi)辟數據交換區與底層緩沖區。接著(zhù)系統檢查PLC通信協(xié)議交換是否存在,不存在則打印錯誤信息,存在則將COM2口置為PLC通信端口。一切就緒之后,系統啟動(dòng)任務(wù)調度完成各種任務(wù)。數據交換區生成及使用流程圖如圖2所示,數據緩沖區生成子程序流程如圖3所示。



在2.4片μClinux內核中,內核引導時(shí),通過(guò)訪(fǎng)問(wèn)系統所有的物理內存,然后調用各個(gè)子系統的初始化函數進(jìn)行初始化,允許初始化代碼分配私有的緩沖區,并減少了留給常規系統操作的RAM數量。在2.4版μClinux內核中,這種分配通過(guò)調用下列函數之一進(jìn)行:




分配內存空間所使用的函數調用如下:

(1)函數malloc和calloc都用于分配動(dòng)態(tài)內存空間的函數。

(2)函數malloc的參考size表示申請分配的內存空間的大小,以字節計算;

(3)函數calloc的參數nmemb表示分配的內存空間占的數據項數目。參數size表示每一個(gè)數據項的大小,以字節計算。也就是說(shuō),calloc函數分配大小為nmemb*size大小的內存空間。

Calloc函數與malloc函數最大的區別是calloc函數被初始化所分配的內存空間,把所有位置為0。調用成功時(shí),malloc函數為calloc函數的返回值都為被分配的內存空間的指針;調用失敗時(shí),返回值為NULL。動(dòng)態(tài)內存被釋放。  
C語(yǔ)言中,指針是處理許多數據結構的關(guān)鍵。沒(méi)有指針,也許根據不能使用動(dòng)態(tài)內存的諸多特性。在編寫(xiě)程序的時(shí)候,它允許程序員建立復雜的內存系統。提高了處理未知內容或者類(lèi)型數據的靈活性。在C中還有一點(diǎn)對字符串處理和數據的輸入輸出很重要。對指針的徹底了解有助于我們寫(xiě)出更好、更高效的代碼。

如果使用一種算法不夠,鏈表可以解決這個(gè)問(wèn)題。當從未知大小的數據塊中讀入數據時(shí),用戶(hù)不得不把數據讀到內存中。這是因為處理讀入數據的函數必須把數據讀到一塊一定大小的內存中。在讀入以后,必須找到一種接合分離數據的辦法。一般使用fgets()把數據讀到n個(gè)字節大小的內存中。緩沖區是n+1個(gè)字節大,但是請注意必須使用1個(gè)字節放結束標記。然后使用了一簡(jiǎn)單的鏈表保存數據。這個(gè)鏈表中一個(gè)特殊項:一個(gè)名為iscontinuing的整型變量。如果這個(gè)變量有值, 表示當前結構中的數據不是字符串最后的部分,最后的部分將包含在以后的結構后。這個(gè)變量再把數據從內存中調出來(lái),重新組裝的時(shí)候使用。

還有一種更明智的保存數據的方法。逐步處理數據直到達到數據末尾。首先要修改的是結構的定義。在結構中包含字符串。在結構中定義一個(gè)指針,指向動(dòng)態(tài)申請的內存區域。這樣做的好處是,字符串可以很長(cháng),F在產(chǎn)生輸出的代碼更簡(jiǎn)單了。它做的所有的事情就是計算和顯示。不再需要合并字符串。因為已經(jīng)被合并。

4 結束語(yǔ)

數據交換區的生成和使用對嵌入式工業(yè)網(wǎng)絡(luò )服務(wù)器項目尤為重要,它是WEB服務(wù)器正常運行的先決條件,起到承上啟下的樞紐作用。向上負責對客戶(hù)端交互現場(chǎng)設備數據,向下負責與接口緩沖區交互設備實(shí)時(shí)數據。目前,該部分設計工作已經(jīng)完成,并在試運行期間情況良好,達到預期效果。
本文地址:http://selenalain.com/thread-25644-1-1.html     【打印本頁(yè)】

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

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