當前位置: 首頁 > 工業(yè)控制產(chǎn)品 > 自動化控制 > 數(shù)字式溫控器
發(fā)布日期:2022-04-18 點擊率:94
引 言
在當今的嵌入式系統(tǒng)設(shè)計中,ARM處理器以價格便宜、功耗低、集成度高、外設(shè)資源豐富和易于使用的特點而得到廣泛的應用;在速度和性能方面已達到或超過部分PC104嵌入式計算機的性能,而成本卻比相應的PC104計算機低很多,廣泛應用于手機、GPS接收機、地圖導航、路由器、以太網(wǎng)交換機及其他民用和工業(yè)電子設(shè)備。
在一個采用ARM處理器的實時嵌入式系統(tǒng)中,目標硬件常常由Flash、SRAM、SDRAM和NVRAM(非易失性RAM)等存儲器組成,并定位于不同的物理地址范圍,那么,怎樣通過軟件更好地訪問和利用這些不同的存儲器并讓系統(tǒng)高效地運行?分散加載(scatter loading)就提供了這樣一種機制。它可以將內(nèi)存變量定位于不同的物理地址上的存儲器或端口,通過訪問內(nèi)存變量即可達到訪問外部存儲器或外設(shè)的目的;同時通過分散加載,讓大多數(shù)程序代碼在高速的內(nèi)部RAM中運行,從而使得系統(tǒng)的實時性大大增強。
1 ARM ELF目標文件的主要構(gòu)成
ARM ELF(Executable and linking Format)目標文件主要由.Text段、.Data段、.BSS段構(gòu)成,其他段如.debug段、.comment段等與本文關(guān)系不大,不作介紹。
Text段由可執(zhí)行代碼組成,段類型為Code,屬性為RO;
Data段由已初始化數(shù)據(jù)組成,段類型為Data,屬性為RO;
BSS段由未初始化數(shù)據(jù)組成,段類型為Zero,屬性為RW,在應用程序啟動時對該段的數(shù)據(jù)初始化為零。如果在分散加載文件中指定了UNINIT屬性,則在應用程序啟動時不初始化該段。
2 分散加載的基本原理
假設(shè)一個采用ARM處理器的實時嵌入式系統(tǒng)目標硬件的存儲器由ROM存儲器和RAM存儲器組成。當一個嵌入式系統(tǒng)在仿真環(huán)境下調(diào)試完畢,需要脫機運行的時候,就需要將源程序編譯連接成可執(zhí)行目標代碼并燒寫到ROM存儲器中。由于ROM存儲器存取數(shù)據(jù)的速率比RAM存儲器慢,因此,讓程序在ROM存儲器中運行。CPU每次取指令和取數(shù)據(jù)操作都要訪問ROM存儲器,這樣需要在CPU的總線周期中插入等待周期,通過降低總線的速率來滿足訪問慢速的ROM存儲器,這樣勢必會降低CPU的運行速率和效率,因此,分散加載就顯得非常必要。
ARM的連接器提供了一種分散加載機制,在連接時可以根據(jù)分散加載文件(.scf文件)中指定的存儲器分配方案,將可執(zhí)行鏡像文件分成指定的分區(qū)并定位于指定的存儲器物理地址。這樣,當嵌入式系統(tǒng)在復位或重新上電時,在對CPU相應寄存器進行初始化后,首先執(zhí)行ROM存儲器的Bootloader(自舉)代碼,根據(jù)連接時的存儲器分配方案,將相應代碼和數(shù)據(jù)由加載地址拷貝到運行地址,這樣,定位在RAM存儲器的代碼和數(shù)據(jù)就在RAM存儲器中運行,而不再從ROM存儲器中取數(shù)據(jù)或取指令,從而大大提高了CPU的運行速率和效率。分散加載的基本原理如圖1所示。 
在一個實時嵌入式系統(tǒng)中,分散加載文件是對目標硬件中的多個存儲器塊的分塊描述,它直接對應目標硬件存儲器的起始地址和范圍。同時,它在應用程序連接時用于告訴連接器用戶程序代碼和數(shù)據(jù)的加載地址和運行地址,在連接時由連接器產(chǎn)生相應的加載地址和運行地址符號,包括代碼和數(shù)據(jù)的加載起始地址、運行地址和長度等。這些符號用于上電后執(zhí)行啟動代碼的數(shù)據(jù)拷貝工作,啟動代碼根據(jù)這些符號,將指定代碼和數(shù)據(jù)由ROM中的加載地址拷貝到RAM中的運行地址中,從而實現(xiàn)代碼在高速RAM存儲器中的脫機運行。其語法格式如下: 
①每一個分散加載文件必須至少包含一個根區(qū),每個根區(qū)的加載地址等于執(zhí)行
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV