日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

各种烧写文件格式简介-ELF Hex Bin axf

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 各种烧写文件格式简介-ELF Hex Bin axf 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載地址:http://blog.chinaunix.net/uid-20321537-id-1966794.html

一,ELF

Executable and linking format(ELF)文件是x86 Linux系統 下的一種常用目標文件(object file)格式,有三種主要類型:


Executable and linking format(ELF)文件是x86 Linux系統下的一種常用目標文件(object file)格式,有三種主要類型:?

(1)適于連接的可重定位文件(relocatable file),可與其它目標文件一起創建可執行文件和共享目標文件。?

(2)適于執行的可執行文件(executable file),用于提供程序的進程映像,加載的內存執行。?

(3)共享目標文件(shared object file),連接器可將它與其它可重定位文件和共享目標文件連接成其它的目標文件,動態連接器又可將它與可執行文件和其它共享目標文件結合起來創建一個進程映像。?

ELF文件格式比較復雜。

二,hex

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

記錄格式?

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

:llaaaatt[dd...]cc?

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

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

ll 是這條記錄的長度域,他表示數據(dd)的字節數目.?

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

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

dd 是數據域,表示一個字節的數據,一個記錄可能有多個數據字節,字節數目可以?
查看ll域的說明?

cc 是效驗和域,表示記錄的效驗和,計算方法是將本條記錄冒號開始的所有字母對?

<不包括本效驗字和冒號> 所表示的十六進制數字?
<一對字母表示一個十六進制數,這樣的一個十六進制數為一個字節>?

都加起來然后模除256得到的余數最后求出余數的補碼即是本效驗字節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++;?
>?
數據記錄?

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

比如下面的一條數據記錄?
:10246200464C5549442050524F46494C4500464C33?

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

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

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

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


絕對內存地址 = 數據記錄中的地址 + 移位后的擴展線性地址?


下面舉例說明這個過程?

從數據記錄的地址域得到地址 2462?
從擴展線性地址記錄的地址域得到地址 FFFF?
絕對內存地址 FFFF2462?

擴展段地址記錄 (HEX86)?

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

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

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

絕對內存地址 = 數據記錄中的地址 + 移位后的擴展段地址?


數據記錄中的地址域 移位后擴展段地址記錄中的地址域?

下面舉例說明這個過程?

從數據記錄的地址域得到地址 2 4 6 2?
從擴展段地址記錄的地址域得到地址 1 2 0 0?
絕對內存地址 0 0 0 1 4 4 6 2?

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

總結?


形如?
:BBAAAATTHHHH...HHHHCC?

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


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

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

三,bin

bin文件就是直接的二進制文件,內部沒有地址標記。一般用編程器燒寫時從00開始,而如果下載運行,則下載到編譯時的地址即可。

?

總結:可以由elf文件轉化為其它兩種文件,hex也可以直接轉換為bin文件,但是bin要轉化為hex文件必須要給定一個基地址。而hex和bin不能轉化為elf文件,因為elf的信息量要大。另外還有一種ads的調試文件axf,它可以轉化為bin文件,用以下命令 fromelf -nodebug xx.axf -bin xx.bin即可。

總結

以上是生活随笔為你收集整理的各种烧写文件格式简介-ELF Hex Bin axf的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。