www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導讀]近幾年來,SOC為了支持更大的硬件資源,及更精確的算法,很多應(yīng)用中的軟件程序代碼越來越大,但是售價卻要越來越便宜。各家廠商無不絞盡腦汁尋找降低成本的方法。SRAM在SOC

近幾年來,SOC為了支持更大的硬件資源,及更精確的算法,很多應(yīng)用中的軟件程序代碼越來越大,但是售價卻要越來越便宜。各家廠商無不絞盡腦汁尋找降低成本的方法。

SRAM在SOC上,是一個快速但單位面積較大的組件,而單位面積較大代表成本較高。有一個降低成本的方法,是將程序代碼放在較慢但單位面積較小的flash或ROM上,當系統(tǒng)需要執(zhí)行里面的某些程序代碼時,才加載到內(nèi)存里執(zhí)行。

如果用商店來比喻的話,有一個小店租在都市里的黃金店面里,小店的展示柜很小,當客人想要看架上沒有的商品時,店員才從后面較大的倉庫里,把商品拿出來放到展示柜上。這里的展示柜就像SRAM,昂貴但是有效率,倉庫就像flash,便宜容積大但是存取較麻煩。

本文介紹的是軟件overlay的技術(shù)。除此之外,晶心科技也發(fā)展了硬件overlay的技術(shù),使得overlay執(zhí)行更快,操作更為簡單。期望本文章能對使用者有所幫助,也希望讀者不吝指教提供您寶貴的意見。

1. 軟件Overlay技術(shù)介紹及操作

我們舉一個實際例子作為說明,比方說程序代碼的大小為210KB,RAM只有64KB,我們把RAM規(guī)劃成一格一格的大小,比方說每4KB切成一塊。每4KB的大小可以在不同時間,更換成不同的程序代碼,可以重復利用RAM的空間。程序代碼儲存在ROM或flash里,只有在執(zhí)行之前會將函數(shù)從ROM或flash里動態(tài)加載SRAM里。當這個函數(shù)執(zhí)行完成,下一個函數(shù)要執(zhí)行前,再加載下一個函數(shù)。

值得注意的是,每一格SRAM里可加載的程序代碼是互斥的,比方說有些不會同時使用的功能可以放在同一格里,比方說mp3播放器,錄音和播放不會同時使用,就可以規(guī)劃重復利用同一格SRAM。

1.1 系統(tǒng)架構(gòu)

請參考圖表1,右邊長方形是flash的內(nèi)容。0x0起1MB的空間,flash里存放了程序代碼和.data,及各個即將要被overlay的sections。

圖表1的左邊長方形是SRAM規(guī)劃,地址從0x10000000開始,我們切出三格提供overlay的SRAM,分別是0x10800000, 0x10804000及0x10808000。Overlay要規(guī)劃成幾格,或者每一格要切成多大塊,都是由使用者規(guī)劃。這里的SRAM與flash的地址是以通用型Andes FPGA開發(fā)板作例子。讀者設(shè)計SOC時,可以根據(jù)實際需求定義合理的地址。

程序執(zhí)行時,0x10800000可以加載.ovly0或是.ovly1。0x10804000可以加載.ovly3或是.ovly2。0x10808000可以加載.ovly4或是.ovly5。

1.2 overlay的sag文件編寫

圖表2是范例sag文件。Sag文件是Andes linker script generator所需要的輸入文件,執(zhí)行l(wèi)inker script generator后,輸出會產(chǎn)生GNU linker需要的linker script。詳細語法說明可以參考Andes BSP v3.2.0 User manual第12章。

我們簡單介紹圖表2的語法。第1行關(guān)鍵詞USER_SECTIONS表示后面接的這幾個sections都是由使用者自定義的sections。在后面的章節(jié),筆者會介紹如何把函數(shù)指定為這些自定義sections。

1.3 sag文件轉(zhuǎn)成linker script

如圖表3,在cygwin下執(zhí)行nds_ldsag軟件,將sw-ovly.sag轉(zhuǎn)成sw-nds32.ld文件。參數(shù)-o sw-nds32.ld為指定輸出文件名。nds_ldsag軟件可以在AndeSight 2.0.1 MCU或是BSP v3.2.0里取得。

1.4 程序里指定函數(shù)或變量放在自定義的sections

GNU ld (linker)可連結(jié)目標文件為可執(zhí)行文件,排列上的最小單位是section,基本的sections為.text,.data及.bss這3個sections。為了達成分區(qū)overlay的功能,必須指定函數(shù)或是變量在自定義的sections上。在前一節(jié)里我們介紹了我們切出3個區(qū)域可以做overlay,分別是OVLY0(從0x10800000起),OVLY1(從0x10804000起)及OVLY2(從0x10808000起)三個區(qū)域。指定函數(shù)overlay0放在自定義section .overlay0里,要使用__attribute__((section(".overlay0")))語法,完整寫法請參考圖表4a。圖表4b.是另外一種寫法。

1.5 各sections的LMA與VMA

圖表6,是各個section的LMA和VMA。在這個表上,可以看.andes32_init到.sdata_w的LMA從0x0~0x29dc,這些section的LMA是連續(xù)的。.overlay0與.overlay1做overlay,所以有共同的VMA 0x10800000。同樣的,.overlay2和.overlay3,具有共同的VMA 0x10804000。.Overlay4和.overlay5,也有同樣的VMA 0x18008000。

1.6 overlay程序的加載

前面已經(jīng)介紹overlay section的sag文件寫法。那么如何加載用戶想要用的overlay程序呢?

請看圖表7,這是overlay的執(zhí)行程序代碼。第5行OverlayLoad(0)表示載入section .overlay0。第6行OverlayLoad(4)表示載入section .overlay4。第7行在.overlay0被加載后,執(zhí)行overlay0(),可以正常工作。

再來我們介紹一下Overlay manager的程序運作,Overlay manager即為圖表7中的函數(shù)OverlayLoad。圖表8列出Overlay manager代碼段,主要做了兩件事。一,修改mapped table _ovly_table,標示overlay section是mapped或是unmapped。_ovly_table的用途是讓gdb知道目前加載的是哪一個section,使得gdb在debug時,能自動切換為正確的調(diào)試信息。

二,在程序執(zhí)行時期將函數(shù)加載,函數(shù)ovly_copy是一個memcpy函數(shù),將函數(shù)從LMA復制到VMA上。當OverlayLoad(0)執(zhí)行完后,overlay0函數(shù)主體便存在于VMA上,可正確的執(zhí)行。

 

圖表9為_ovly_table的內(nèi)容,要標示每一個overlay section的vma, size, lma,和是否mapped。必須要注意的一點,_ovly_table要位在一個lma等于vma的區(qū)域里。

2. 調(diào)試Overlay的程序

開啟自動overlay調(diào)試功能的gdb命令是overlay auto。當overlay auto開啟后,對于使用者來說,與一般程序的調(diào)試方法相同。

圖表8的最后一行_ovly_debug_event()的用途是讓gdb能把斷點加在正確的地址上,這一行要寫在OverlayLoad的后面。必須要有這一行,gdb的自動overlay調(diào)試才能正常。

當用戶加一個斷點在被overlay的區(qū)域,gdb會在函數(shù)被加載之后(即為執(zhí)行完OverlayLoad),遇到_ovly_debug_event時,自動的把斷點加到overlay的地址上。

3. 參考數(shù)據(jù)

Overlay Commands https://sourceware.org/gdb/onlinedocs/gdb/Overlay-Commands.html

Automatic Overlay Debugging https://sourceware.org/gdb/onlinedocs/gdb/Automatic-Overlay-Debugging.html#Automatic-Overlay-Debugging

Debugging Programs That Use Overlays

http://davis.lbl.gov/Manuals/GDB/gdb_11.html

Andes BSP v3.2.0 User Manual

Chapter 12 “Linker Script Generation”

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉