資源描述:
《hex格式文件學(xué)習(xí)筆記.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、前兩天做s3c2440的nandfalsh實(shí)驗(yàn)時(shí),有些問(wèn)題(函數(shù)的指定地址存放)沒(méi)有弄懂,今天花了一天的時(shí)間,算是把這個(gè)問(wèn)題給解決掉了,為了更加深入的了解以及以后的復(fù)習(xí)之用,決定把他總結(jié)以下。首先,先認(rèn)識(shí)一個(gè)問(wèn)題,就是為什么能夠指定地址存放?這個(gè)就涉及到生成hex鏡像文件(不是bin文件),hex文件中包含了下載的地址(后面會(huì)詳細(xì)解釋?zhuān)?,?dāng)下載軟件如j-link,j-tag或是usb下載會(huì)根據(jù)hex文件中的地址信息將代碼下到指定的地址單元中去。這里需要注意的是由于nandflash是不參與cpu編址的,它的地址是相對(duì)自己而言,所以如果要在nandflash中下載到指定地址,需要通
2、過(guò)u-boot來(lái)實(shí)現(xiàn)。并且u-boot必須支持這個(gè)功能,而其他的存儲(chǔ)器是沒(méi)這個(gè)問(wèn)題,因?yàn)樗鼈儏⑴ccpu的統(tǒng)一編址。好,現(xiàn)在問(wèn)題來(lái)了,hex中的地址怎么來(lái)的呢?這個(gè)就是adslink器功勞了,我們指導(dǎo)ads連接器在配置的時(shí)候有三種模式,第一種模式很少用,一般我們是使用第二種而第三種,第二種是用的最多的,是生成簡(jiǎn)單的鏈接文件,不能對(duì)函數(shù)實(shí)現(xiàn)指定地址存放,第三種是生成復(fù)雜的鏈接文件,可以實(shí)現(xiàn)函數(shù)的指定地址存放,這是通過(guò)scatter文件實(shí)現(xiàn)的(后面會(huì)詳細(xì)介紹)下面就看一下hex文件全稱(chēng)IntelHEXntelHEX文件是由一行行符合IntelHEX文件格式的文本所構(gòu)成的ASCII文本文
3、件。在IntelHEX文件中,每一行包含一個(gè)HEX記錄。這些記錄由對(duì)應(yīng)機(jī)器語(yǔ)言碼和/或常量數(shù)據(jù)的十六進(jìn)制編碼數(shù)字組成。IntelHEX文件通常用于傳輸將被存于ROM或者EPROM中的程序和數(shù)據(jù)。大多數(shù)EPROM編程器或模擬器使用IntelHEX文件。 記錄格式 IntelHEX由任意數(shù)量的十六進(jìn)制記錄組成。每個(gè)記錄包含5個(gè)域,它們按以下格式排列: :llaaaatt[dd...]cc 每一組字母對(duì)應(yīng)一個(gè)不同的域,每一個(gè)字母對(duì)應(yīng)一個(gè)十六進(jìn)制編碼的數(shù)字。每一個(gè)域由至少兩個(gè)十六進(jìn)制編碼數(shù)字組成,它們構(gòu)成一個(gè)字節(jié),就像以下描述的那樣: :每個(gè)IntelHEX記錄都由冒號(hào)開(kāi)頭.
4、 ll是數(shù)據(jù)長(zhǎng)度域,它代表記錄當(dāng)中數(shù)據(jù)字節(jié)(dd)的數(shù)量. aaaa是地址域,它代表記錄當(dāng)中數(shù)據(jù)的起始地址. tt是代表HEX記錄類(lèi)型的域,它可能是以下數(shù)據(jù)當(dāng)中的一個(gè): 00–數(shù)據(jù)記錄 01–文件結(jié)束記錄 02–擴(kuò)展段地址記錄 04–擴(kuò)展線性地址記錄??????05?-?開(kāi)始線性地址記錄后面則是真正的數(shù)據(jù)記錄 dd是數(shù)據(jù)域,它代表一個(gè)字節(jié)的數(shù)據(jù).一個(gè)記錄可以有許多數(shù)據(jù)字節(jié).記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量必須和數(shù)據(jù)長(zhǎng)度域(ll)中指定的數(shù)字相符. cc是校驗(yàn)和域,它表示這個(gè)記錄的校驗(yàn)和.校驗(yàn)和的計(jì)算是通過(guò)將記錄當(dāng)中所有十六進(jìn)制編碼數(shù)字對(duì)的值相加,以256為模進(jìn)行以下補(bǔ)足.
5、 數(shù)據(jù)記錄 IntelHEX文件由任意數(shù)量以回車(chē)換行符結(jié)束的數(shù)據(jù)記錄組成.數(shù)據(jù)記錄外觀如下: :10246200464C5549442050524F46494C4500464C33 其中: 10是這個(gè)記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量. 2462是數(shù)據(jù)將被下載到存儲(chǔ)器當(dāng)中的地址. 00是記錄類(lèi)型(數(shù)據(jù)記錄) 464C…464C是數(shù)據(jù). 33是這個(gè)記錄的校驗(yàn)和. 擴(kuò)展線性地址記錄(HEX386) 擴(kuò)展線性地址記錄也叫作32位地址記錄或HEX386記錄.這些記錄包含數(shù)據(jù)地址的高16位.擴(kuò)展線性地址記錄總是有兩個(gè)數(shù)據(jù)字節(jié),外觀如下: :02000004FFFFFC 其中:
6、 02是這個(gè)記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量. 0000是地址域,對(duì)于擴(kuò)展線性地址記錄,這個(gè)域總是0000. 04是記錄類(lèi)型04(擴(kuò)展線性地址記錄) FFFF是地址的高16位. FC是這個(gè)記錄的校驗(yàn)和,計(jì)算方法如下: 01h+NOT(02h+00h+00h+04h+FFh+FFh). 當(dāng)一個(gè)擴(kuò)展線性地址記錄被讀取,存儲(chǔ)于數(shù)據(jù)域的擴(kuò)展線性地址被保存,它被應(yīng)用于從IntelHEX文件讀取來(lái)的隨后的記錄.線性地址保持有效,直到它被另外一個(gè)擴(kuò)展地址記錄所改變. 通過(guò)把記錄當(dāng)中的地址域與被移位的來(lái)自擴(kuò)展線性地址記錄的地址數(shù)據(jù)相加獲得數(shù)據(jù)記錄的絕對(duì)存儲(chǔ)器地址. 以下的例子演示了這個(gè)過(guò)程
7、.. 來(lái)自數(shù)據(jù)記錄地址域的地址2462 擴(kuò)展線性地址記錄的數(shù)據(jù)域+FFFF ------------ 絕對(duì)存儲(chǔ)器地址FFFF2462 擴(kuò)展段地址記錄(HEX86) 擴(kuò)展段地址記錄也叫HEX86記錄,它包括4-19位數(shù)據(jù)地址段.擴(kuò)展段地址記錄總是有兩個(gè)數(shù)據(jù)字節(jié),外觀如下: :020000021200EA 其中: 02是記錄當(dāng)中數(shù)據(jù)字節(jié)的數(shù)量. 0000是地址域.對(duì)于擴(kuò)展段地址記錄,這個(gè)域總是0000. 02是記錄類(lèi)型02(擴(kuò)展段地址記錄) 1200是地址段.