• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            1·什么是cmd文件,它有什么作用。

            更新時間:2023-12-06 14:14:59 閱讀: 評論:0

            2023年12月6日發(fā)(作者:蔬菜兒歌順口溜)

            -

            1·什么是cmd文件,它有什么作用。

            1·什么是CMD文件,它有什么作用。

            CMD文件是用來說明對應的對應的代碼、數(shù)據(jù)、變量的存放空間。

            它包括兩個指令SECTOINS和MEMORY。

            如果把RAM和ROM看成是兩個倉庫的話,那MEMORY指令就是把這兩個倉庫再分成不同的區(qū)域。如果把不同的代碼段是看成一件件貨物的話,那么SECTOINS指令則指出了這些貨物對應的存放位置。

            .cmd文件

            由匯編器產(chǎn)生的COFF格式的OBJ文件中的段作為構(gòu)造塊,當有多個文件進行鏈接時,鏈接器會將輸入段結(jié)全在一起產(chǎn)生可執(zhí)行的COFF輸出模塊,然后鏈接器為各輸出段選擇存儲器地址。

            1.1 MEMORY指令說明

            存儲器(MEMORY)偽指令,用來定義目標系統(tǒng)的存儲器空間。MEMORY可以定義存儲器的區(qū)域,并指定起始地址和長度。

            MEMORY偽指令的一般語法:

            MEMORY

            {

            PAGE 0: name1[(attr)]:origin=constant, length=constant;

            PAGE n: name1[(attr)]:origin=constant, length=constant;

            }

            PAGEn中的頁號n最大為255。每個PAGE代表一個完全獨立的地址空間。通常PAGE0為程序存儲器,PAGE1為數(shù)據(jù)存儲器。

            Name1:存儲器區(qū)間名。可包含8個字符。不同PAGE可以取同樣的name1,但在同一個PAGE內(nèi)區(qū)間名不可以相同。

            Attr:可選項。規(guī)定存儲器屬性。

            R,可以對存儲器執(zhí)行讀操作

            W,可以對存儲器執(zhí)行寫操作

            X,破除可以裝入可執(zhí)行的程序代碼

            I,規(guī)定可以對存儲器進行初始化

            Origin:起始地址。

            Length:區(qū)間長度。

            初始化段用SECTIONS可定位兩次:裝入和運行。如:一些關(guān)鍵的執(zhí)行代碼必須裝在系統(tǒng)的ROM中,但希望在較快的RAM中運行。

            未初始化段只可被定位一次。

            自己寫的關(guān)于LF2406A的.cmd文件

            MEMORY

            {

            PAGE 0: VECS:

            origin=0h,

            length=40h

            ;中斷向量表,40h~43h為安全代碼

            ;或保留代碼區(qū),復位向量是0h和1h

            FLASH: origin=44h, length=0ffbch ;32Kflash

            SARAM: origin=8000h, length=800h ;當PON=1&&DON=0,

            ;SARAM映射為程序存儲空間

            B0: origin=ff00h, length=100h ; 256 WORD DARAM,CNF=1時

            PAGE 1: MMRS: origin=0h, length=60h ;內(nèi)部映射寄存器,或保留區(qū)間

            B2:

            B0:

            B1:

            origin=60h, length=20h ;32 WORD DARAM

            origin=200h, length=100h ;256 WORD DARAM,CNF=0時

            origin=300h, length=100h ;256 WORD DARAM

            SARAM: origin=800h, length=800h ;2K WORD SARAM,DON=1&&PON=0

            PF1: origin=7000, length=230h ;外設(shè)幀1

            EVA:

            EVB:

            origin=7400, length=32h

            origin=7500, length=32h

            ;外設(shè)幀2

            ;外設(shè)幀3

            內(nèi)部的所有的存儲器都定義過了,最后的三個PF1、EVA、EVB可以不用定義的,因為是這外設(shè)的寄存器映射。

            1.2 SECTOINS指令說明

            段(SECTOINS)偽指令,告訴鏈接器如何將輸入段結(jié)合成輸出段并告訴鏈接器將輸出段放在存儲器的何處。

            SECTIONS

            {

            Name:[property,property,…]

            Name:[property,property,…]

            Name:[property,property,…]

            }

            Name:源程序中的段名。如.text

            Property:段的屬性參數(shù)。一個段的屬性參數(shù)包括下列五種:

            1.2.1 Load allocation,由它定義將輸出段加載到存儲器中的什么位置。

            語法:load: allocation、allocation、>allocation (allocation是將邏輯段定位的地址說明)

            例如:.text: load=0x1000 ;將輸出段定位到一個特定的地址

            .text: load>ROM ;將輸出段定位到命名為ROM的存儲區(qū)

            .text: align=0x80

            .text: block(128)

            ;關(guān)鍵詞align規(guī)定輸出段.text定位到從地址邊界0x80開始

            ;關(guān)鍵詞bolck規(guī)定段必須在兩個地址邊界之內(nèi),如果段太

            ;大,就從一個地址邊界開始

            .text: PAGE0 ;將輸出段定位到PAGE0

            如果輸出段只定位一個位置,則可省去關(guān)鍵字load。如:.text: >ROM

            如果要用到一個以上參數(shù),可以將它們排成一行。如:.text: >ROM align 16 PAGE 2

            或.text: load(ROM align(16) PAGE(2))

            (地址邊界是2的N次方冪的地址,如地址邊界定為16,則其地址為xxx0h。)

            定邊界地址用在什么情況下?

            1.2.2 Run allocation,由它定義輸出段在存儲器的什么位置開始運行。 語法:run=allocation或run>allocation

            鏈接器為每個輸出段在目標存儲器中分配兩個地址:加載地址和執(zhí)行地址。通常這兩個地址是相同的。但如要先將程序加載到ROM,然后在RAM中以較快的速度運行。則可兩次定位,如:

            .fir: load=ROM,run=RAM

            1.2.3 Input ctions,由它定義哪些輸入段組成輸出段。

            語法:{input_ctions}

            .text: {*(.text)} 等價于 .text: {}

            這樣就把所有的.text段鏈接成.text段輸出。

            也可以明確的用文件名和段名來確定輸入段:

            .text:

            {

            (.text,ct) ;鏈接的.text、.ct段

            (ct) ;這里的ct前面的點是本來就不用寫還是書上的錯誤?

            ;鏈接的所有段

            }

            1.2.4 Section type,用它為輸出段定義特殊形式的標志

            語法:Type=COPY、Type= DSECT、Type=NOLOAD

            1.2.5 Fill value,當初始化段中存在未初始化的存儲區(qū)間時,對其填充一指定值。

            語法:fill: value 或name:…{…}=value

            1.3問題

            1.3.1如果不同頁中定義了相同的名字,又不指定PROG,這時默認在哪個空間呢?

            如:PAGE 0: B0: origin=0ff00h, length=100h ; 256 WORD DARAM,CNF=1時

            PAGE 1: B0: origin=200h, length=100h ;256 WORD DARAM,CNF=0時

            這明 .const: {} >B1 是指向那個空間?

            1.3.2

            -o

            -m

            以上兩個語句用來生成.out和.map文件。如果沒寫這,也沒有關(guān)系,CCS->project->Build

            options菜單下的Linker選項頁里面還可以設(shè)置。

            2·代碼中關(guān)于對段的定義

            對段定義目的:上面已經(jīng)說明了CMD文件的作用是倉庫分區(qū)和指定貨物的存放位置,而對代碼中段的定義則是給代碼,數(shù)據(jù),變量這些貨物起名字,使它對應CMD文件里的段名存放。

            2.1 段的分類

            2.1.1目標文件至少包含三個默認段:

            .text

            .data

            .bss

            文本段

            數(shù)據(jù)段

            通常包含可執(zhí)行代碼

            通常包含初始化的數(shù)據(jù)

            保留空間段 通常為沒有初始化的變量保留空間

            2.1.2自定義段:

            .uct 保留空間段 為沒有初始化的數(shù)據(jù)保留空間的自定義段

            .ct 初始化段 自定義段

            和默認段的使用相同,但它們被單獨匯編。例如,重復使用.text段在目標文件中創(chuàng)建單個.text段,在鏈接時,這個.text段作為單個單元分配到存儲器中。假中有一部分可執(zhí)行代碼(如初始化程序)不希望和.text段分配在一起,可以將它們匯編進一個自定義段,這樣就可以分配在與.text段不同的地方。

            不能用不同的偽指令定義相同的段。如.uct和.ct用同一個段名。

            2.1.3初始化段

            .text

            .data

            .ct “ction name(段名)”

            當匯編器第一次遇到一個.data時,.data段為空的。跟在第一個.data偽指令后的指令被匯編進.data段,直到遇到.text、.ct、.act。如果后面還遇到.data,則將跟在這些.data后面的語句匯編時已經(jīng)存在的.data段。這樣就形成了單個可被連續(xù)分配到存儲器中的.data段。

            2.1.4未初始化段

            .bss symbol(符號),

            symbol .uct

            size in words(字數(shù))[blocking flag]

            “ction name(段名)”size in words,[blocking flag]

            symbol:指向.bss或.uct偽指令所保留的存儲空間的第一個字。這個符號與保留空間所使用的變量名相對應。這個符號可以讓其化段引用,并且也可以用一個全局符號(.global)來聲明。

            相當于C中定義 unsigned char symbol[size in words];

            Size in words:保留空間大小。

            Blocking flag:可選項。如果該參數(shù)指定一個大于0的值,則匯編器會將size in words指定的字數(shù)連續(xù)存放,分配的空間不跨頁面的邊界,除非字數(shù)超過一頁的長度,此時將從一個頁面邊界開始。 Section name:為保留空間的自定義段的段名。0~8個字符。最多可產(chǎn)生32767個不同的自定義段。

            和symbol有什么不同?

            段名是用來匯編器聯(lián)接用的,程序里用不到;而符號是地址,程序里可以引用。

            自定義的段名第一個字符也可以是 . ,如:ct “.cinit”。

            初始化段定義偽指令告訴匯編器停止匯編進入當前的段,而開始匯編進入指定的段,但未初始化段定義偽指令不終止當前的段而開始一個新段,它們只是簡間的臨時離開當前的段。所以.bss和.uct可以出現(xiàn)在初始化段的任何地方而不會影響它的內(nèi)容。

            2.1.5 作用

            鏈接器將段重新定位到目標系統(tǒng)的存儲器映射。大多數(shù)系統(tǒng)包含幾種存儲器,使用段可以使目標存儲器的使用更為有效。所有段都可獨立地重新定位,可將任意段放到目標存儲器任何已經(jīng)分配的塊。

            2.2 問題

            2.2.1

            .data

            .word 011h,022h,033h

            .bss var1,1

            .bss buffer,10

            .word 0123

            .text

            LAC 0FH

            Coeff

            Ptr

            Add:

            Aloop: SBLK 1

            BLEZ aloop

            Ivals

            Var2

            Inbuf

            SACL

            .data

            .word

            .uct

            .uct

            .text

            ADD

            var1,0

            0aah,0bbh

            “newvars”,1

            “newvars”,7

            #0FFH

            .text

            .data

            7(WORDS)

            5

            .bss 11

            .newvars 8(由.uct創(chuàng)建的段)

            在兩本書中看到這個例子,其中.data段都是5個字的目標碼。

            Ptr .word 0123不算是.data段嗎?那是什么段?為什么沒有計算進去,是書上寫錯了?

            查看.map文件,可以看出.data 段是6個字的目標碼,應該是書本錯了。 2.2.2

            編譯連接都通過,為什么生成的.out文件無法下載,提示0x0地址數(shù)據(jù)錯誤。

            查看Disasmbly,8000h前面的數(shù)據(jù)全為FF,8000h~87ffh即SARAM區(qū)里有程序PRG_inti,8800H后的數(shù)據(jù)全和87FFH里的數(shù)據(jù)相同。

            8000h~87ffh里的程序是否是用來清除、擦除、燒寫FLASH用的?其只要打開CSS就存在。

            答:SECTOINS段里的load指出的是LOAD PROGRAM與FLASH燒寫時的共同地址。

            所以如果LOAD PROGRAM時把load地址定到FLASH空間就會出現(xiàn)上面的錯誤。而FLASH燒寫當然就不會了。

            所以LOAD PROGRAM與FLASH燒寫要寫不同的CMD文件。

            SECTOINS段里的run指出的是軟件調(diào)試運行時的地址,如:

            MEMORY

            {

            PAGE 0: VECS: origin=0h, length=40h /*中斷向量表*/

            FLASH: origin=100h, length=7000h /*;32Kflash*/

            SARAM: origin=8000h, length=800h /*;當PON=1&&DON=0,*/

            /*;SARAM映射為程序存儲空間*/

            }

            SECTIONS

            {

            vectors: {} load=VECS,

            .asminti: {} load=FLASH,

            .text: {} load=FLASH,

            PAGE 1: MMRS: origin=0h,

            B2:

            B0:

            B1:

            length=60h /*;內(nèi)部映射寄存器,或保留區(qū)間*/

            /*;32 WORDS DARAM*/

            /*;256 WORDS DARAM,CNF=0時*/

            /*;256 WORDS DARAM*/

            origin=60h, length=20h

            origin=200h, length=100h

            origin=300h, length=100h

            run=SARAM PAGE 0

            run=SARAM PAGE 0/**/

            run=SARAM PAGE 0

            .data: {} >SARAM PAGE 0

            .bss : {} >B2 PAGE 1

            }

            燒寫完FLASH后,復位,地址定位到0000H。單步執(zhí)行,跳轉(zhuǎn)到主程序入口。.text段燒寫在100H地址處開始,但程序卻跳到了8043H處,這是關(guān)鍵字run映射的地址。把

            vectors: {} load=VECS,

            .asminti: {} load=FLASH,

            run=SARAM PAGE 0

            run=SARAM PAGE 0/**/

            run=SARAM PAGE 0 .text: {} load=FLASH,

            改成

            vectors: {} load=VECS PAGE 0

            .asminti: {} load=FLASH PAGE 0/**/

            .text: {} load=FLASH PAGE 0

            從0000H執(zhí)行后就跳到了100H。

            從中可以看出run指定的只是軟件仿真時程序段的映射地址。

            -

            1·什么是cmd文件,它有什么作用。

            本文發(fā)布于:2023-12-06 14:14:58,感謝您對本站的認可!

            本文鏈接:http://www.newhan.cn/zhishi/a/1701843299239024.html

            版權(quán)聲明:本站內(nèi)容均來自互聯(lián)網(wǎng),僅供演示用,請勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除。

            本文word下載地址:1·什么是cmd文件,它有什么作用。.doc

            本文 PDF 下載地址:1·什么是cmd文件,它有什么作用。.pdf

            標簽:地址   存儲器   定義
            留言與評論(共有 0 條評論)
               
            驗證碼:
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網(wǎng)旗下知識大全大全欄目是一個全百科類寶庫! 優(yōu)秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 亚洲大尺度视频在线播放| 日韩在线视频线观看一区| 日韩乱码人妻无码中文字幕视频| 少妇激情一区二区三区视频小说| 国产美女MM131爽爽爽| 亚洲高清激情一区二区三区| 青青青爽在线视频观看| 亚洲综合久久成人av| 久久香蕉国产亚洲av麻豆| 欧美18videosex性欧美tube1080| 久久久久四虎精品免费入口| 99re在线视频观看| 国产旡码高清一区二区三区| 国产网友愉拍精品视频手机 | 久久综合色之久久综合色| 老熟妇乱子交视频一区| 国产成人拍精品视频午夜网站| 一区二区中文字幕av| 日韩av片无码一区二区三区不卡| 中文字幕日韩精品国产| 欧美日韩精品免费一区二区三区 | 成人网站在线进入爽爽爽| 精品人妻一区二区三区蜜臀| 伊人欧美在线| 欧美人与动牲交a免费| 日本久久久www成人免费毛片丨| 国产乱码精品一区二区三| 亚洲人成网站18禁止无码| 亚洲精品人成在线观看| 五月天天天综合精品无码| 国产女人高潮叫床视频| 午夜免费无码福利视频麻豆| 国产国产成人久久精品| 国产av一区二区不卡| 亚洲精品无码不卡| 一本一道av中文字幕无码| 国产xxxxx在线观看免费| 精品亚洲综合一区二区三区| 日韩淫片毛片视频免费看| 国产肥妇一区二区熟女精品| 免费看国产精品3a黄的视频|