• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

            Blog @ Blog

            當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

            常用鏈接

            統(tǒng)計

            積分與排名

            BBS

            Blog

            Web

            最新評論

            什么是Intel HEX格式?

            Intel HEX文件是記錄文本行的ASCII文本文件,在Intel HEX文件中,每一行是一個HEX記錄由十六進制數(shù)組成的機器碼或者數(shù)據(jù)常量,Intel HEX文件經(jīng)常被用于將程序或數(shù)據(jù)傳輸存儲到ROM.EPROM,大多數(shù)編程器和模擬器使用Intel HEX文件.

            記錄格式

            一個Intel HEX文件可以包含任意多的十六進制記錄,每條記錄有五個域,下面是一個記錄的格式.

            :llaaaatt[dd...]cc

            每一組字母是獨立的一域,每一個字母是一個十六進制數(shù)字,每一域至少由兩個十六進制數(shù)字組成,下面是字節(jié)的描述.

            :冒號     是每一條Intel HEX記錄的開始

            ll 是這條記錄的長度域,他表示數(shù)據(jù)(dd)的字節(jié)數(shù)目.

            aaaa 是地址域,他表示數(shù)據(jù)的起始地址<如果是數(shù)據(jù)記錄,這表示將要燒錄的這條記錄中的數(shù)據(jù)在EPROM中的偏移地址,對于不支持擴展段地址和擴展線性地址的,如89C51,這就是此條記錄的起始地址>

            tt 這個域表示這條HEX記錄的類型,他有可能是下面這幾種類型
            00 ----數(shù)據(jù)記錄      
            01 ----文件結束記錄
            02 ----擴展段地址記錄
            04 ----擴展線性地址記錄

            dd   是數(shù)據(jù)域,表示一個字節(jié)的數(shù)據(jù),一個記錄可能有多個數(shù)據(jù)字節(jié),字節(jié)數(shù)目可以查看ll域的說明

            cc   是效驗和域,表示記錄的效驗和,計算方法是將本條記錄冒號開始的所有字母對<不包括本效驗字和冒號> 所表示的十六進制數(shù)字<一對字母表示一個十六進制數(shù),這樣的一個十六進制數(shù)為一個字節(jié)>都加起來然后模除256得到的余數(shù)最后求出余數(shù)的補碼即是本效驗字節(jié)cc.
            <例如:
            :0300000002005E9D
            cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x9C=0x9D

            C語言描述:
            UCHAR cc;
            cc=(UCHAR)~(0x03+0x00+0x00+0x00+0x02+0x00+0x5E);
            cc++;
            >
            數(shù)據(jù)記錄

            Intel HEX文件由若干個數(shù)據(jù)記錄組成,一個數(shù)據(jù)記錄以一個回車和一個換行結束
            <回車為0x0d換行為0x0a>

            比如下面的一條數(shù)據(jù)記錄
            :10246200464C5549442050524F46494C4500464C33

            10   是此行記錄數(shù)據(jù)的字節(jié)數(shù)目
            2462   是數(shù)據(jù)在內存<將要燒寫的eprom地址>中的起始地址
            00     是記錄類型00(是一個數(shù)據(jù)記錄)
            464C 到 464C 是數(shù)據(jù)
            33   是此行記錄的效驗和

            擴展線性地址記錄(HEX386)
            擴展線性地址記錄也可稱為 32位地址記錄   和   HEX386記錄,這個紀錄包含高16(16-31位)位數(shù)據(jù)地址,這種擴展的線性記錄總是有兩個字節(jié)數(shù)據(jù),像下面這樣:

            :02000004FFFFFC
            02     是記錄的數(shù)據(jù)字節(jié)數(shù)目
            0000   是地址域這在擴展地址記錄中總是0000
            04     是記錄類型04(擴展地址記錄)
            FFFF   是高16位地址
            FC     是記錄效驗和,計算方法如下:
                    01h + NOT(02h + 00h + 00h + 04h + FFh + FFh)

            當一個擴展線性地址記錄被讀到后,擴展線性地址記錄的數(shù)據(jù)區(qū)域將被保存并應用到后面從Intel HEX文件中讀出的記錄,這個擴展線性記錄一直有效,直到讀到下一個擴展線性記錄.


            絕對內存地址 = 數(shù)據(jù)記錄中的地址 + 移位后的擴展線性地址


            下面舉例說明這個過程

            從數(shù)據(jù)記錄的地址域得到地址           2462
            從擴展線性地址記錄的地址域得到地址   FFFF
            絕對內存地址                           FFFF2462

            擴展段地址記錄 (HEX86)

            擴展段地址記錄也被稱為 HEX86記錄,   包含 4-19位的數(shù)據(jù)地址段,
            這個擴展段地址記錄總是有兩字節(jié)數(shù)據(jù),如下:

            :020000021200EA
            02 是     記錄中的數(shù)據(jù)字節(jié)數(shù)目
            0000           是地址域,在擴展段地址記錄中,這個域總是0000
            02           是記錄類型02(擴展段地址的標示)
            1200     是該段的地址
            EA     是效驗和
            計算如下:
            01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).

            當擴展段地址記錄被讀后,擴展段地址將被存儲并應用到以后從Intel HEX文件讀出的記錄,這個段地址一直有效直到讀到下一個擴展段地址記錄

            絕對內存地址 = 數(shù)據(jù)記錄中的地址 + 移位后的擴展段地址

            數(shù)據(jù)記錄中的地址域       移位后擴展段地址記錄中的地址域

            下面舉例說明這個過程

            從數(shù)據(jù)記錄的地址域得到地址                   2 4 6 2
            從擴展段地址記錄的地址域得到地址           1 2 0 0
            絕對內存地址                         0 0 0 1 4 4 6 2

            文件結束記錄(EOF)
            一個Intel HEX文件必須有一個文件結束記錄,這個記錄的類型域必須是01,
            一個EOF記錄總是這樣:
            :00000001FF
            00是記錄中數(shù)據(jù)字節(jié)的數(shù)目
            0000這個地址對于EOF記錄來說無任何意義
            01記錄類型是01(文件結束記錄標示)
            FF是效驗和計算如下
            01h + NOT(00h + 00h + 00h + 01h).
            ========================
            總結


            形如
            :BBAAAATTHHHH...HHHHCC

            BB: Byte
            AAAA:數(shù)據(jù)記錄的開始地址,高位在前,地位在后
                  因為這個格式只支持8bits,地址被倍乘
                  所以,為了得到實際的PIC的地址,需要將 地址除以2
            TT: Type
                    00 數(shù)據(jù)記錄
                    01 記錄結束
                    04 擴展地址記錄(表示32位地址的前綴,當然這種只能在 INHX32)
            HHHH:一個字(Word)的數(shù)據(jù)記錄,高Byte在前,低Byte在后
                  TT之后,總共有 BB/2 個字 的數(shù)據(jù)
            CC: 一個Byte的CheckSum


            因為PIC16F873A只有4K的程序空間

            所以,不會有 TT=04的 Linear Address Record

            posted on 2007-12-20 14:12 isabc 閱讀(1561) 評論(1)  編輯 收藏 引用

            評論

            # re: 什么是Intel HEX格式? 2007-12-21 17:04 Lee7

            HEX文件和BIN文件是我們經(jīng)常碰到的2種文件格式。下面簡單介紹一下這2種文件格式的區(qū)別:


            1 - HEX文件是包括地址信息的,而BIN文件格式只包括了數(shù)據(jù)本身
            在燒寫或下載HEX文件的時候,一般都不需要用戶指定地址,因為HEX文件內部的信息已經(jīng)包括了地址。而燒寫B(tài)IN
            文件的時候,用戶是一定需要指定地址信息的。


            3 - BIN文件格式
            對二進制文件而言,其實沒有”格式”。文件只是包括了純粹的二進制數(shù)據(jù)。


            4 - HEX文件格式
            HEX文件都是由記錄(RECORD)組成的。在HEX文件里面,每一行代表一個記錄。記錄的基本格式為:
            +---------------------------------------------------------------+
            | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
            | MARK ':' | | OFFSET | | | |
            +---------------------------------------------------------------+
            | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |
            +---------------------------------------------------------------+

            記錄類型包括:
            '00' Data Rrecord:用來記錄數(shù)據(jù),HEX文件的大部分記錄都是數(shù)據(jù)記錄
            '01' End of File Record: 用來標識文件結束,放在文件的最后,標識HEX文件的結尾
            '04' Extended Linear Address Record: 用來標識擴展線性地址的記錄
            '02' Extended Segment Address Record: 用來標識擴展段地址的記錄

            在上面的后2種記錄,都是用來提供地址信息的。每次碰到這2個記錄的時候,都可以根據(jù)記錄計算出一個“基”地址。
            對于后面的數(shù)據(jù)記錄,計算地址的時候,都是以這些“基”地址為基礎的。

            數(shù)據(jù)記錄的具體格式:
            +---------------------------------------------------------------+
            | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM |
            | MARK ':' | | OFFSET | '00' | | |
            +---------------------------------------------------------------+
            | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte |
            +---------------------------------------------------------------+

            看個例子:
            :020000040000FA
            :10000400FF00A0E314209FE5001092E5011092E5A3
            :00000001FF

            對上面的HEX文件進行分析:
            第1條記錄的長度為02,LOAD OFFSET為0000,RECTYPE為04,說明該記錄為擴展段地址記錄。數(shù)據(jù)為0000,校驗和為
            FA。從這個記錄的長度和數(shù)據(jù),我們可以計算出一個基地址,這個地址為0X0000。后面的數(shù)據(jù)記錄都以這個地址為基
            地址。
            第2條記錄的長度為10(16),LOAD OFFSET為0004,RECTYPE為00,說明該記錄為數(shù)據(jù)記錄。
            數(shù)據(jù)為FF00A0E314209FE5001092E5011092E5,共16個BYTE。這個記錄的校驗和為A3。此時的基地址為0X0000,加上OFFSET,
            這個記錄里的16BYTE的數(shù)據(jù)的起始地址就是0x0000 + 0x0004 = 0x0004.
            第3條記錄的長度為00,LOAD OFFSET為0000,TYPE = 01,校驗和為FF。說明這個是一個END OF FILE RECORD,標識
            文件的結尾。

            在上面這個例子里,實際的數(shù)據(jù)只有16個BYTE:FF00A0E314209FE5001092E5011092E5,其起始地址為0x4


            4 - HEX文件和BIN文件大小有區(qū)別
            HEX文件是用ASCII來表示二進制的數(shù)值。例如一般8-BIT的二進制數(shù)值0x3F,用ASCII來表示就需要分別表示字符'3'
            和字符'F',每個字符需要一個BYTE,所以HEX文件需要 > 2倍的空間。
            對一個BIN文件而言,你查看文件的大小就可以知道文件包括的數(shù)據(jù)的實際大小。而對HEX文件而言,你看到的文件
            大小并不是實際的數(shù)據(jù)的大小。一是因為HEX文件是用ASCII來表示數(shù)據(jù),二是因為HEX文件本身還包括別的附加信息。


            要想詳細了解HEX文件格式,請GOOGLE INTEL HEX,就能找到詳細的PDF文檔。
              回復  更多評論   

            廣告信息(免費廣告聯(lián)系)

            中文版MSDN:
            歡迎體驗

            国产午夜精品久久久久九九| 久久亚洲AV无码精品色午夜麻豆| 精品久久8x国产免费观看| 久久久久久九九99精品| 国产精品无码久久综合 | 精品午夜久久福利大片| 亚洲午夜精品久久久久久人妖| 国产福利电影一区二区三区久久久久成人精品综合 | 午夜精品久久久久久中宇| 无码乱码观看精品久久| 91精品国产综合久久久久久| 久久精品这里热有精品| 香蕉久久夜色精品升级完成| 97精品伊人久久久大香线蕉| 婷婷久久香蕉五月综合加勒比| 久久久精品国产亚洲成人满18免费网站 | 99久久99久久精品国产片果冻 | 麻豆精品久久久一区二区| 久久久久久久综合日本| .精品久久久麻豆国产精品| 亚洲女久久久噜噜噜熟女| 一本一道久久a久久精品综合| 久久久WWW成人免费精品| 伊人久久综在合线亚洲2019| 秋霞久久国产精品电影院| 久久婷婷人人澡人人爽人人爱| 亚洲精品国精品久久99热一| 91精品日韩人妻无码久久不卡| 国产99精品久久| 亚洲人成电影网站久久| 久久久久亚洲AV成人网人人网站 | 久久精品二区| 亚洲精品乱码久久久久久| 91亚洲国产成人久久精品| 久久精品桃花综合| 精品久久久久久综合日本| 99精品久久久久久久婷婷| 国产三级观看久久| 久久青草国产精品一区| 亚洲AV日韩精品久久久久久久| 精品一久久香蕉国产线看播放|