gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Linux中cmd文件是什么

在Linux中,cmd文件即鏈接命令文件,是存放鏈接器的配置信息的,可簡(jiǎn)稱(chēng)為命令文件;cmd文件的作用是指明如何鏈接程序的。cmd文件由MEMORY和SECTIONS兩部分組成:MEMERY用于定義每個(gè)存儲(chǔ)器塊的名字、起始地址和長(zhǎng)度;SECTIONS主要用于描述哪個(gè)段映射到了哪段存儲(chǔ)空間。

Linux中cmd文件是什么

本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。

什么是cmd文件?

cmd文件即鏈接命令文件(Linker Command Files),以后綴.cmd結(jié)尾。

CMD的專(zhuān)業(yè)名稱(chēng)叫鏈接器配置文件,是存放鏈接器的配置信息的,我們簡(jiǎn)稱(chēng)為命令文件。從其名稱(chēng)可以看出,該文件的作用是指明如何鏈接程序的。

那么我們知道,在編寫(xiě)TI DSP程序時(shí),是可以將程序分為很多段,比如text、bss等,各段的作用均不相同。實(shí)際在片中運(yùn)行時(shí),所處的位置也不相同。比如text代碼一般應(yīng)該放在flash內(nèi),而bss的變量應(yīng)該放在ram內(nèi)。等等。但是對(duì)于不同的芯片,其各存儲(chǔ)器的起止地址都是不一樣的,而且,用戶(hù)希望將某一段,尤其是自定義段,放在什么存儲(chǔ)器的什么位置,這也是鏈接器不知道的。為了告訴鏈接器,即將使用的芯片其內(nèi)部存儲(chǔ)空間的分配和程序各段的具體存放位置,這就需要編寫(xiě)一個(gè)配置文件,即CMD文件了。

cmd文件由MEMORY(即:內(nèi)存)和SECTIONS(即:段)兩部分組成。MEMERY用于定義每個(gè)存儲(chǔ)器塊的名字、起始地址和長(zhǎng)度。SECTIONS主要用于描述哪個(gè)段映射到了哪段存儲(chǔ)空間。MEMORY中又可分為PAGE0(程序存儲(chǔ)空間)和PAGE1(數(shù)據(jù)存儲(chǔ)空間),PAGE(即:幀)。

上文所提及的段,又可分為兩大類(lèi):已初始化的段和未初始化的段。已初始化的段含有真實(shí)的指令和數(shù)據(jù),存放于程序存儲(chǔ)空間。未初始化的段只是保留變量的地址空間,未初始化的段并不具有真實(shí)的內(nèi)容,在程序運(yùn)行過(guò)程中才向變量?jī)?nèi)寫(xiě)數(shù)據(jù)進(jìn)去,存放于數(shù)據(jù)存儲(chǔ)空間。C語(yǔ)言中,有許多定義好的段,如“.text”,“.const”,“.system”。對(duì)于這些定義好的段,在網(wǎng)上有許多關(guān)于他們的講解,故這里筆者不再贅述。本文接下來(lái)會(huì)給讀者介紹作為用戶(hù),來(lái)自己定義段的方法。

MEMORY和SECTION

cmd文件中可以寫(xiě)上注釋?zhuān)?quot;/*"和“*/”,包圍起來(lái),但不允許使用“//”,這點(diǎn)與c語(yǔ)言不同。

編寫(xiě)cmd文件我們需要借助兩條偽指令MEMORY和SECTIONS(必須大寫(xiě))。

MEMORY和SECTION的語(yǔ)法可在自行網(wǎng)上查找,本文將結(jié)合具體例子對(duì)MEMORY和SECTION中的內(nèi)容進(jìn)行講解。

結(jié)合筆者使用的F28335的cmd文件對(duì)MEMORY進(jìn)行講解。

MEMORY { PAGE 0:    /* Program Memory */            /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */      ZONE0       : origin = 0x004000, length = 0x001000     /* XINTF zone 0 */    RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */    RAML1       : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */    RAML2       : origin = 0x00A000, length = 0x001000     /* on-chip RAM block L2 */    RAML3       : origin = 0x00B000, length = 0x001000     /* on-chip RAM block L3 */    ZONE6       : origin = 0x0100000, length = 0x100000    /* XINTF zone 6 */     ZONE7A      : origin = 0x0200000, length = 0x00FC00    /* XINTF zone 7 - program space */     FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */    FLASHG      : origin = 0x308000, length = 0x008000     /* on-chip FLASH */    FLASHF      : origin = 0x310000, length = 0x008000     /* on-chip FLASH */    FLASHE      : origin = 0x318000, length = 0x008000     /* on-chip FLASH */    FLASHD      : origin = 0x320000, length = 0x008000     /* on-chip FLASH */    FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */    FLASHA      : origin = 0x338000, length = 0x007F80     /* on-chip FLASH */    CSM_RSVD    : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */    BEGIN       : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */    CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */    OTP         : origin = 0x380400, length = 0x000400     /* on-chip OTP */    ADC_CAL     : origin = 0x380080, length = 0x000009     /* ADC_cal function in Reserved memory */        IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */    IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */      FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */    ROM         : origin = 0x3FF27C, length = 0x000D44     /* Boot ROM */            RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM  */    VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM  */   PAGE 1 :   /* Data Memory */            /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */            /* Registers remain on PAGE1                                                  */        BOOT_RSVD   : origin = 0x000000, length = 0x000050     /* Part of M0, BOOT rom will use this for stack */    RAMM0       : origin = 0x000050, length = 0x0003B0     /* on-chip RAM block M0 */    RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */    RAML4       : origin = 0x00C000, length = 0x001000     /* on-chip RAM block L1 */    RAML5       : origin = 0x00D000, length = 0x001000     /* on-chip RAM block L1 */    RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L1 */    RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L1 */    ZONE7B      : origin = 0x20FC00, length = 0x000400     /* XINTF zone 7 - data space */    FLASHB      : origin = 0x330000, length = 0x008000     /* on-chip FLASH */ }
登錄后復(fù)制

可以看到MEMORY中通常包含PAGE0和PAGE1,PAGE0中的RAML0代表起始地址為0x008000,存儲(chǔ)空間長(zhǎng)度為0x001000的存儲(chǔ)空間。同理可知其他存儲(chǔ)空間名稱(chēng)所代表的含義。

對(duì)照TI28335芯片數(shù)據(jù)手冊(cè)(僅截取了部分)可以看到,以上cmd文件的編寫(xiě)是基于TI28335芯片數(shù)據(jù)手冊(cè)內(nèi)存映射一節(jié)所編寫(xiě)的。我們也可參考芯片數(shù)據(jù)手冊(cè)上的內(nèi)存映射一節(jié)進(jìn)行cmd文件的編寫(xiě)。

Linux中cmd文件是什么

接下來(lái),筆者對(duì)SECTION所包含的內(nèi)容進(jìn)行講解,同樣以F28335的cmd文件為例

SECTIONS {      /* Allocate program areas: */    .cinit              : > FLASHA      PAGE = 0    .pinit              : > FLASHA,     PAGE = 0    .text               : > FLASHA      PAGE = 0    codestart           : > BEGIN       PAGE = 0    ramfuncs            : LOAD = FLASHD,                           RUN = RAML0,                           LOAD_START(_RamfuncsLoadStart),                          LOAD_END(_RamfuncsLoadEnd),                          RUN_START(_RamfuncsRunStart),                          LOAD_SIZE(_RamfuncsLoadSize),                          PAGE = 0      csmpasswds          : > CSM_PWL     PAGE = 0    csm_rsvd            : > CSM_RSVD    PAGE = 0        /* Allocate uninitalized data sections: */    .stack              : > RAMM1       PAGE = 1    .ebss               : > RAML4       PAGE = 1    .esysmem            : > RAMM1       PAGE = 1      /* Initalized sections go in Flash */    /* For SDFlash to program these, they must be allocated to page 0 */    .econst             : > FLASHA      PAGE = 0    .switch             : > FLASHA      PAGE = 0            /* Allocate IQ math areas: */    IQmath              : > FLASHC      PAGE = 0                  /* Math Code */    IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD         /* Uncomment the section below if calling the IQNexp() or IQexp()       functions from the IQMath.lib library in order to utilize the        relevant IQ Math table in Boot ROM (This saves space and Boot ROM        is 1 wait-state). If this section is not uncommented, IQmathTables2       will be loaded into other memory (SARAM, Flash, etc.) and will take       up space, but 0 wait-state is possible.    */    /*    IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD     {                   IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)        }    */        FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD               /* Allocate DMA-accessible RAM sections: */    DMARAML4         : > RAML4,     PAGE = 1    DMARAML5         : > RAML5,     PAGE = 1    DMARAML6         : > RAML6,     PAGE = 1    DMARAML7         : > RAML7,     PAGE = 1        /* Allocate 0x400 of XINTF Zone 7 to storing data */    ZONE7DATA        : > ZONE7B,    PAGE = 1      /* .reset is a standard section used by the compiler.  It contains the */     /* the address of the start of _c_int00 for C Code.   /*    /* When using the boot ROM this section and the CPU vector */    /* table is not needed.  Thus the default type is set here to  */    /* DSECT  */     .reset              : > RESET,      PAGE = 0, TYPE = DSECT    vectors             : > VECTORS     PAGE = 0, TYPE = DSECT        /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */    .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD   }
登錄后復(fù)制

可以看到SECTION中包含了各種段名。以“.text”為例 ,“.text” 為編譯后生成的二進(jìn)制指令代碼段,可以看到,我們將“.text”中的內(nèi)容分配到FLASHA中存儲(chǔ),而FLASHA位于MEMORY中的PAGE0。

SECTION中的ramfuncs與28335的啟動(dòng)有關(guān),其本質(zhì)就是上電運(yùn)行時(shí)通過(guò)“引導(dǎo)程序”把用戶(hù)代碼從FLASH中讀出,保存在RAM中并在RAM中運(yùn)行,從而解決ROM讀寫(xiě)速度慢,難以滿(mǎn)足高速智能芯片和RAM掉電丟失數(shù)據(jù)的問(wèn)題。

自定義段

而知道了段的這些信息對(duì)于我們用戶(hù)來(lái)說(shuō)有什么用呢?最直接的用處就是,當(dāng)編譯器提示存儲(chǔ)器內(nèi)存不足時(shí),我們可以通過(guò)對(duì)應(yīng)的段名,找到對(duì)應(yīng)的存儲(chǔ)空間,修改其存儲(chǔ)空間的大小來(lái)滿(mǎn)足我們程序的需要。甚至我們可以通過(guò)自定義段名來(lái)存放我們的代碼和數(shù)據(jù)。

通過(guò)#pragma DATA_SECTION(函數(shù)名或全局變量名,"用戶(hù)自定義在數(shù)據(jù)空間的段名")或#pragma CODE_SECTION(函數(shù)名或全局變量名,"用戶(hù)自定義在程序空間的段名")可實(shí)現(xiàn)自定義段名,從而自由的分配存儲(chǔ)空間。

#pragma DATA_SECTION(用于變量)

#pragma CODE_SECTION(用于函數(shù))

但使用以上指令時(shí)需注意:不能在函數(shù)體內(nèi)聲明必須在定義和使用前聲明,#pragma可以阻止對(duì)未調(diào)用的函數(shù)的優(yōu)化。

下面結(jié)合實(shí)際使用例子來(lái)具體講解:

#pragma DATA_SECTION(FFT_output, "FFT_buffer1"); float FFT_output[FFT_SIZE];
登錄后復(fù)制

筆者聲明了一個(gè)數(shù)據(jù)段,段名為FFT_buffer1,段的內(nèi)容在變量FFT_ouput里。而聲明后才定義變量FFT_output的大小。

我們?nèi)绻胍褂眠@個(gè)自定義的段,接下來(lái)我們還要在CMD文件的SECTION中指定FFT_buffer1的存儲(chǔ)空間。

FFT_buffer1		: > RAML4,     PAGE = 1
登錄后復(fù)制

通過(guò)以上幾條語(yǔ)句,筆者實(shí)現(xiàn)了將變量的內(nèi)容存放入指定的RAML4存儲(chǔ)空間的操作。

從上可以得出,當(dāng)全局變量所占內(nèi)存過(guò)大時(shí),我們可以通過(guò)自定義段選擇有所余裕的存儲(chǔ)空間的方式,從而來(lái)解決內(nèi)存不足的問(wèn)題。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
日本大片免费看| 国产成人无码精品久久久性色| 日本中文字幕在线视频观看 | 欧美视频亚洲图片| 少妇高清精品毛片在线视频| 加勒比成人在线| 人妻av中文系列| 北条麻妃在线视频观看| 播放灌醉水嫩大学生国内精品| 国产高清不卡无码视频| www.69av| 日本丰满少妇xxxx| 欧美 国产 小说 另类| 日本成人在线免费视频| jizz欧美性11| 国产乱叫456| 久久福利一区二区| 99热在线这里只有精品| 国产av人人夜夜澡人人爽| 中文字幕网av| 日本精品福利视频| 欧美三级一级片| 红桃视频 国产| 日本一区午夜艳熟免费| 国产欧美在线一区| 中文字幕第17页| 免费在线黄网站| 无码人妻精品一区二区三区66| 手机av在线网| 亚洲国产精品无码av| 熟女少妇精品一区二区| 亚洲国产精品影视| 国产熟女高潮视频| 欧美另类videosbestsex日本| 日韩中文字幕三区| 免费在线观看污污视频| 黄色国产精品视频| 中文字幕在线乱| 中文字幕第36页| 久久久久免费看黄a片app| 亚洲一区日韩精品| 播放灌醉水嫩大学生国内精品| 麻豆一区二区三区视频| 欧美三级在线观看视频| 樱空桃在线播放| 男人插女人下面免费视频| 欧美亚洲色图视频| 国产毛片久久久久久| 三级4级全黄60分钟| 精品视频在线观看一区二区| 欧美精品aaaa| 国产91在线免费| 青青在线免费观看| 97在线免费视频观看| 在线观看免费视频高清游戏推荐| www插插插无码视频网站| 亚洲一区二区三区四区精品| 五月婷婷丁香综合网| 免费看的黄色大片| 日韩精品―中文字幕| 国产乱淫av片杨贵妃| 中文字幕乱码免费| 国产91av视频在线观看| 中文字幕第100页| 尤物国产在线观看| 日韩在线不卡一区| 欧美特级aaa| 色婷婷成人在线| 中文字幕在线视频精品| 国产一区二区在线观看免费视频| 91高清国产视频| 香蕉视频999| 深夜做爰性大片蜜桃| 佐佐木明希av| 国产一级爱c视频| 国产又黄又大又粗视频| 精品一卡二卡三卡| 色国产在线视频| 欧美一级xxxx| 日本丰满大乳奶| 欧美日韩不卡在线视频| a√天堂在线观看| 香蕉视频禁止18| av电影一区二区三区| 欧美一级视频免费看| 成人一对一视频| 艹b视频在线观看| 日本一二三区视频在线| 91丨porny丨探花| xxxx一级片| 97av中文字幕| 久久国产色av免费观看| 三级性生活视频| 欧美无砖专区免费| 妺妺窝人体色www在线观看| 偷拍盗摄高潮叫床对白清晰| 日韩极品视频在线观看| 国产一级特黄a大片免费| 中文字幕一区二区三区四区五区人| a级免费在线观看| 亚洲第一狼人区| 无码日本精品xxxxxxxxx| 密臀av一区二区三区| 亚洲中文字幕无码一区二区三区| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 日韩视频一二三| 天堂av在线网站| 人人干视频在线| 性鲍视频在线观看| 88av.com| 日本手机在线视频| 999热精品视频| 爱情岛论坛亚洲首页入口章节| 国内自拍中文字幕| 亚洲午夜激情影院| 男人插女人下面免费视频| 黄色一级大片免费| 吴梦梦av在线| 青青草原国产在线视频| 手机看片福利盒子久久| 丰满少妇大力进入| 中国女人做爰视频| 91精品999| 91欧美视频在线| 午夜激情福利在线| 国模无码视频一区二区三区| 日韩在线视频在线| 日韩欧美视频免费在线观看| 在线播放免费视频| 午夜免费一级片| 五月天开心婷婷| 日韩高清在线一区二区| 亚洲三级在线观看视频| 欧美第一页浮力影院| 久久人人爽av| 小早川怜子一区二区三区| 色播五月综合网| www.亚洲自拍| 男女啪啪免费观看| 日本黄色片一级片| 国产男女免费视频| 免费无码国产v片在线观看| 日日碰狠狠添天天爽超碰97| 大肉大捧一进一出好爽视频| 国产精品无码av在线播放| 国产欧美在线一区| 91插插插插插插插插| 天天综合中文字幕| 欧美亚洲日本一区二区三区| 缅甸午夜性猛交xxxx| www.色就是色| 国产高潮呻吟久久久| 成人性生活视频免费看| 激情综合在线观看| 91视频这里只有精品| 久久久无码中文字幕久...| 日韩网站在线免费观看| 黑人粗进入欧美aaaaa| 91大神免费观看| 女人喷潮完整视频| 亚洲欧美一区二区三区不卡| 国产日本在线播放| 精品综合久久久久| 六月婷婷在线视频| 天堂av8在线| 欧美综合在线播放| 日本三级福利片| 国产性xxxx18免费观看视频| 国产高清999| avav在线看| 少妇高潮大叫好爽喷水| 欧美伦理视频在线观看| 中文字幕日韩精品无码内射| 青青青在线视频免费观看| 欧妇女乱妇女乱视频| 亚洲色图 在线视频| 久久亚洲中文字幕无码| 中文字幕综合在线观看| 成年人免费在线播放| 欧洲精品在线播放| 日韩av加勒比| 欧美日韩大尺度| 鲁一鲁一鲁一鲁一色| 韩国无码av片在线观看网站| 91香蕉视频导航| 日韩福利视频在线| 任你操这里只有精品| 婷婷五月综合缴情在线视频| 2021国产视频| 一本二本三本亚洲码| 中文字幕免费高清在线| 成人性做爰aaa片免费看不忠| 日本天堂免费a| xxxxxx在线观看| 在线观看18视频网站| 中文字幕第一页亚洲| 亚洲高清av一区二区三区| 中文字幕资源在线观看| 亚洲视频第二页| 欧美一级免费在线|