国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Andes 的分散聚合(SAG)機制

發布時間:2015-11-12 15:30    發布者:designapp
關鍵詞: Andes , SAG
嵌入式系統設計中,通常使用不同的存儲器,如Flash、SRAM、SDRAM,并位于不同的物理地址空間,怎樣更好地利用這些不同的存儲器并讓系統高效地運行呢?通常這需要復雜的link script來管理實現,而Andes提供了分散聚合(SAG, Scattering-And-Gathering)機制,SAG機制能夠將加載和運行時存儲器中的代碼和數據描述在一個SAG格式的文本描述文件中,并通過link generator tool將SAG文件轉化為標準GNU的link script文件,以供鏈接時使用。采用Andes的分散聚合機制,不僅可以幫助工程師清晰的描述存儲器的使用情況,更可以避免使用復雜的標準linker腳本語言 。本文詳細介紹了SAG語法格式,并以實際工程為例,闡述SAG的使用方法和益處。
1.Andes ELF 的目標文件的構成
Andes使用標準的GNU link script格式,Andes的目標文件也遵行標準的ELF(Executable and Linking Format)格式。
ELF目標文件主要由 .text段 .data段 .bss段,還有一些其它的段如:.debug .comment段。
下面以一個簡單的link script的例子作為說明:
  


SECTIONS是link script語法中的關鍵command,它用來描述輸出文件的內存布局。例如上例中就含.text, .data, .bss三個部分。
.=0x10000; 其中的.是location counter(LC)。表示.text段虛擬地址從0x10000開始的。
AT用來說明加載地址,AT(0)表示.text段的加載地址是0。{ *(.text) },這個表示輸出文件的.text段內容由所有輸入文件()的.text段組成。后面的一個. = 0x40000。如果沒有這個賦值,那么LC應該等于0x10000+sizeof(text段),這里強制指定LC=0x40000.表明后面的.data段的虛擬地址從0x40000開始。
LOADADDR用來得到加載地址,此處.data段的加載地址是AT(LOADADDR (.text) + SIZEOF (.text)),它緊接著.text段,.data為所有輸入目標文件的.data段構成。同理,.bss段的虛擬地址是緊接著.data段虛擬地址之后,而加載地址是緊接著.data段加載地址之后的。.bss段由所有輸入目標文件的.bss段組成。
通常在實際使用中的link script會更加的復雜,SAG機制能夠很好的簡化link script的設計,那接下來將對SAG機制作介紹。
2.Andes SAG語法
SAG使用巴科斯范式(BNF notation)中的以下幾種符號表示:
  


SAG 格式總覽
SAG語法格式由:load regions,execution regions,input sections等幾部分組成,如下圖所示:
  


2.1 關于LMA和VMA
一般在嵌入式系統中,程序存儲和運行在不同的地址空間,LMA表示的是程序裝載地址,VMA表示的是程序運行地址,LMA不等于VMA時程序在加載后不可直接運行,程序運行前,要把程序的內容,拷貝到對應的內存地址處,才能正確地運行。
2.2 header格式
  


當要使用用戶自定義的section時,須要使用USER_SECTIONS這個關鍵字。
2.3 Load Region(加載區)
Load Region格式為:
  


load_region_name用來表示某個程序加載區的名稱。
address表示的是LMA。
offset表示的是偏移量,當此時是第一個load region時表示的是與0地址的偏移量,當表示的不是第一個load region時,表示的是與前一個load region結尾處的偏移量。
load_attr 表示屬性,現在可以設置為ALIGN alignment, 如ALIGN 0x4
max_size 表示該加載區域的最大值。
例子:
LOAD_ROM_1 0x0000 ALIGN 0x4 0x10000
在這個例子中load_region_name是:LOAD_ROM_1,LMA是0x0000,以4-byte對齊,
max_size是64k
2.4 Execution Region(執行區)
Execution Region格式為:
  


exe_region_name 用于表示某個程序執行區的名稱
address表示的是VMA。
offset當表示的是第一個execution region,表示的是與該加載區的偏移量,當表示的不是第一execution region時,offset表示的是前一個execution region結尾處的偏移量。
exe_attr表示屬性,如可以設置為ALIGN alignment,如ALIGN 0x4
max_size表示該execution region的最大值。
例子:
EXEC_ROM_1 0x0000 ALIGN 0x4 0x8000
在這個例子中exe_region_name是EXEC_ROM_1,它的VMA是0x0000, 以4-byte對齊,max_size是32k
2.5 Input Section(輸入段)
Input Section的描述格式為:
  


此處:
module_select_pattern 可以是目標文件名
input_attr 可以是KEEP,該屬性可以保證該section在鏈接時不會被remove掉,或者是SORT,用于排序。
例子如:
program1.o KEEP(+RO)
此時該input section將包含目標文件program1.o中所有的read-only section,由于加了KEEP,所以所添加的section在鏈接的時候不會被gc-section刪除掉。
input_section_selector中最常用的是input section_attr。
input section_attr有以下幾種:
  


input_section_selector中另外一種用的是input_section_pattern,
它的表示方法是 input_section_pattern ::= (.text | .data|…)。
ADDR variable 用于得到該處的VMA賦給variable。
LOADADDR variable 用于得到該處的LMA賦給variable。
STACK "=" num 為sp準備一個初始值num。
VAR 用于設定并初始化一個變量。如VAR _ILM_BASE = 0x00600000。
2.6 Execution Overlay Region(overlay的執行區)
當使用overlay功能時,需要設定Execution Overlay Region,設定格式為:
  


它在后面加了個:OVERLAY的關鍵字。
pagesize后面表示Overlay的大小,當是0時,表示software Overlay,其它的設置和前面的execution region相同。
2.7 Overlay Input Section(overlay的輸入段)
當使用overlay功能時,要設置Overlay Input Section,它和前面的Input Section類似。
3.例子
如下例子所示的效果是:
在一個系統中,從0x0000開始,大小為0x2000的是ROM1, 從0x4000開始,大小為0x8000的是ROM2,此時我們需要將目標文件program1.o的RO和RW,ZI data。 存放在ROM1中,將其它目標文件的 .text,RO,RW, ZI存放在ROM2中。此時的LMA效果對應于下圖的左側。
同時需要將目標文件program1.o中的RW, ZI的運行地址設置在從0x10000開始的大小為0x8000的DRAM上,將其它目標文件的RW,ZI的運行地址設置在從0x18000開始,大小為0x8000的SRAM上。此時的VMA效果對應于下圖的右側。
  


該例子中program1.o中的RO和其它目標文件中的.text, RO的LMA和VMA是相等的,此時所有的RW,ZI的加載區域是分別在ROM1和ROM2上,但是運行地址是分別在DRAM和SRAM上,所以RW,ZI的LMA不等于VMA,所以在程序使用到RW, ZI所代表的.data,.bss段之前需要將它們從加載區復制到運行區,以達到所圖中右側所示的效果。
  


對應的SAG可以這樣設計:
利用SAG機制,除了快速設計上列所示的系統中存儲的分配機制,還可以快速的進行overlay程序的設計,overlay程序主要是用于分時重復利用快速但存儲空間有限的存儲器。
關于如何在Andes上進行overlay程序的編寫,請參考我們另外一篇文檔:http://www.andestech.com/cn/news-events/technical-article/2013/2013-12-04.pdf
4、將SAG文件轉化成linker script
在AndeSight 或者BSP package中提供了叫做nds_ldsag的工具,該工具可以將SAG文件轉化成標準的GUN link script文件。在cygwin下,執行方法如下,filename.ld就是我們希望獲得的link script文件。
./nds_ldsag.exe filename.sag -o filename.ld
5、結語
Andes提供的通俗、易用的SAG描述語言,可以幫助工程師根據系統中的存儲設備的特點,對程序的加載與運行區域進行很方便的設計和描述,甚至可以快速的進行更為復雜的overlay程序的設計,然后通過自動化工具nds_ldsag將SAG描述文件轉成標準link腳本供連接器使用,從而大大提高在Andes core平臺上的軟件開發效率。
參考文檔:
1: BSP321 programming guide link generator
2: The GNU Linker Manual
本文地址:http://www.qingdxww.cn/thread-156266-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區
  • 無線充電基礎知識及應用培訓教程2
  • 基于CEC1712實現的處理器SPI FLASH固件安全彈性方案培訓教程
  • 5分鐘詳解定時器/計數器E和波形擴展!
  • 想要避免發生災難,就用MPLAB® SiC電源仿真器!
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一级在线播放 | 两个人免费观看高清视频图 | 国产在线观看精品 | 久久只有精品 | 国产高清免费在线观看 | 精品亚洲一区二区 | 日本黄网站 | 色樱桃影院亚洲精品影院 | 国产高清视频青青青在线 | 在线观看 亚洲 | 久操视频网| japanese日本老妇 | 国产成人青青热久免费精品 | 国产亚洲精品91 | 97精品国产高清自在线看超 | 国产精品视频观看 | 日本特黄高清免费大片爽 | 日韩欧美一区二区在线观看 | 精品视频日本 | 欧美视频高清在线观看 | 一区二区三区久久精品 | 精品视频一区二区三三区四区 | 国产成人精品本亚洲 | 国产在线视频91 | 亚洲男人的天堂在线视频 | 99r在线| 香蕉视频在线播放 | 欧美性另类高清 | 噜噜噜噜色 | 欧美呻吟 | 落跑甜心电视剧全集免费观看在线 | 青青色在线视频 | 黄色片免费在线 | www.日本在线视频 | 日韩精品一区二区三区中文字幕 | 欧美精品免费线视频观看视频 | 麻豆专区 | 国产无卡一级毛片aaa | 国产一区二区三区不卡免费观看 | 亚洲一区二区三区首页 | 亚洲欧洲日产国码二区在线 |