找回密码
 注册
关于网站域名变更的通知
查看: 99|回复: 0
打印 上一主题 下一主题

单片机hex和bin文件的区别

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-9-12 18:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

, h: m( v6 B5 e. f5 j# e/ m: x. D8 M
hex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。
, d+ C! u% d5 C# D2 o, E5 ?7 q0 P$ O( j; y/ A( c& {

0 W2 Q3 b- u# m) o3 L/ k
3 s7 D4 a/ _- y1 s0 oHex文件如果用特殊的程序来查看(一般记事本就可以实现)。打开后可发现,真个文件以行为单位,每行以冒号开头,内容全部为16进制码。Hex文件可以按照如下的方式进行拆分来分析其中的内容:+ O" H- f, z% \: m& ?4 f

" E$ T; M3 e3 ?4 p7 F5 x
% x5 r. g% d1 X# r" `% h/ f, f2 K' d; o" f: O
例如:7 E' t& i  _) o  B* q, u

) r5 ^( k7 s* J% J7 Q7 ?1 t
* r5 ?& T3 C' q- V) P+ y: M- L
) v9 A( L9 p# }$ M3 H" Z2 s:020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA
6 b4 H0 G. m# {" `, [: a- K4 S& o5 U
( z% Y5 I" W$ g: S% b2 D4 D; s+ O& W( _' E2 Y
6 I4 I! y2 H" T0 L' K3 u
第一个 0x02 为数据长度。9 Y; V; p1 m) K$ E4 F# ~

$ X! h: k7 _4 C: z
  e# T( U- [. B  k! W; Q3 ]* P; q' s) g* R3 }
紧跟着后面的0x00 0x00 为地址。$ Y" c. c* [5 z; o4 X

1 ^5 o1 u& T+ q) p! K
5 D# Y' D' K  y. S: I3 W9 ?5 W1 c
# u' i+ m1 {/ b$ ]- [# n8 N0 ]! {再后面的0x04为数据类型,类型共分以下几类:
7 _6 }& T# ^/ x; U; M1 J4 v+ m
: F# ~3 d, }2 e2 ~: U
! @( H, f/ [+ P6 s5 T" r
8 r7 y, q1 f) J' {6 t'00' Data Record' |9 ?) H! ]  _3 f$ b3 Q1 t& Y! Z) v

/ c' J0 N' K+ n& i) h8 b
9 t2 D: z1 g- m% n5 T
; ?$ y- E8 d, U% K* e' m. s! C. Q'01' End of File Record  a  I" Z; @) l; h

. ?+ G0 g% D. n& v- u: X* V' k& t1 m
9 U0 Q, q2 q8 V( ?- D. H0 l- t6 i
'02' Extended Segment Address Record1 a  ?4 [! R6 o. x# Q% t

: Q+ O7 ]& t! [; r' i
- b# z3 L3 F& u& x) f  E: \& k5 K
/ J5 m6 ?; Y- M% D7 w4 i'03' Start Segment Address Record) p/ m2 W& ?# m  @

, n1 g, n4 p( g4 j& y; H5 w6 e
# G: I; K; D% r9 W0 m! T
: [* i) W4 U4 s% i5 @- q% q' k'04' Extended Linear Address Record* E$ i% z7 v! o
9 w! U! o7 |5 B& K' q5 ~; F
5 k8 {/ K; X$ h0 L  g2 a
' G0 q1 p) L2 _6 p' n
'05' Start Linear Address Record
4 m0 x1 {, T% X% _  j% b) K( M" i9 q
7 j5 }$ W& o9 E; w- N3 w( n
7 N0 O* e! D3 M. Q/ C
然后,接着0x04后面的两个 0x00 0x00就是数据。最后一个0xFA是校验码。
) o: D& @( I- K; O! Q( g4 C
7 N  a$ v3 T, Y/ y. {9 t- m" g# y/ M& I

6 i; Z; o7 ~! u" lHEX文件的每一行都是这样的格式:
( d- n9 S0 [5 l: K- T' A( W4 x$ O/ I% B2 s2 O- g( n# E+ _) q
1 k* u+ z7 Y; T8 z/ b* |" S

$ q) c! K* J5 R9 T0 _' Z1 I$ r$ d. IIntel hex 由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式如下:
, I2 ]9 G( t7 w. ]0 r* l3 x2 A: m( u& I# d0 O* x9 _% R  Q7 T

, f& Y+ p2 V  l9 N1 p& L( s
$ v1 O/ `7 f; H" T6 V:CCAAAARR...ZZ
9 j! ^) [! t6 {& v" X, V( }9 z4 V7 j
6 s7 A" V/ ?+ [2 ?' Y* H& _! b: P6 c8 U1 Q3 r! o0 e4 R
  x0 \4 s! l' R4 f# N
其中:' Z/ b0 _( ]5 n' f+ \
/ Q0 q. s, q4 f: ^9 S
  z- i/ @1 B+ x! P' I

4 c6 {6 c0 y1 y( DCC$ Y  T6 ?6 a7 m, A6 h4 I  F5 [
2 R9 p1 L7 H# j1 V  @8 m

9 T# c& g0 ~% \/ X8 C) {7 B/ ?: I8 V0 W  @8 K
本条记录中的数据字节数5 l. W( w" |2 \: l! E  Y
  t1 J* R- j8 T2 C( F
! u- w6 K8 \: L) v& r
0 w- t- E5 C; q/ ^
AAAA
+ F5 m/ ^6 c4 k5 T/ M  k
2 H6 R( {# x& b: d) }" T
9 `' `. B$ c1 z# H8 |/ ?1 Z4 `9 N6 G# C( i/ F
本条记录中的数据在存储区中的起始地址/ v$ H- F( `; m5 h, c' \

* t4 F* h/ F1 ^; n3 R% `/ s2 Y3 h0 g. N& N. v! g7 d& ]: G; G( o( w

- z. h# s: ]) p- x4 W( n0 q) L. fRR
- ^0 i% A" Y4 O. ?. }4 I& i8 ]% u0 I8 A; N2 t9 u! R% J

1 a7 y$ q7 S0 ]! o0 \; U9 B) }6 u% Y  L
记录类型:
1 Q& i; B; M6 |- @: i5 O
; B* K0 J( z0 @- s* o( ]& u  B  S3 m7 d6 A, d. I, s
8 ?3 D4 A, t' h! {1 C9 I
00 数据记录 (data record)3 a: h2 E" k( O) Y/ |* N

( d4 j) A4 }, l1 J  X8 R7 o$ t) o# [* U
( H/ w! `0 n) H9 b7 a
01 结束记录 (end record)! A. D  X$ e0 C/ f1 ~" o
  I4 Q+ T6 `1 H! p

4 `$ Q: j- ^+ H2 S/ e- S+ M: _1 y# ^. R
02 段记录 (paragraph record)
0 ?6 e/ L- Q1 }+ M
/ X0 ^) D) O9 C8 f: @- l# _5 e
; I7 W( k. \5 Y0 E7 J1 `0 }- u" R3 x. S. z+ I. D9 l. x
03 转移地址记录 (transfer address record)
. ~7 f$ }/ Q2 I5 Z) X4 @7 ^
! g4 V$ Z) k7 m$ B. C
- T8 J& U0 \# n: ^& Z2 v5 f6 \  `5 `  R+ a
...
' _7 l2 k; i  b' _
; S- l$ h- j3 A
  C" z- f& m3 u  x4 {  M% r5 ^/ e' ^8 x$ p3 l
数据域  }& _" ~& [$ E1 Z+ Y

5 n/ W5 W( C- P. I$ m5 O& N1 U0 j# b- z$ Y
$ q$ F9 \7 Z. Q! w5 O' I( I
ZZ
/ r# x" i5 f6 K5 G: s% _0 C
6 O# y' c: X' |8 S/ u6 {+ Q' |# S/ H6 U; i) w- x8 w

4 R/ k8 G9 J" B4 p' S数据域校验和$ c, J& B4 j4 Z) H% V; `# b

7 X6 c( a: {5 U% E4 e. K! L) k; a& I! \  q& B; z$ k0 \- T

. k$ I: u0 t& q( \' C( p' h' H% N3 BIntel hex文件记录中的数字都是16进制格式,两个16进制数字代表一个字节。CC域是数据域中的实际字节数,地址、记录类型和校验和域没有计算在内。校验和是取记录中从数据字节计数域(CC)到数据域(...)最后一个字节的所有字节总和的2的补码。
4 A+ U# \& {+ r# Q  W6 n. D+ j* v! y/ @( H

" }* r! d( [" j8 |
1 d* x  K$ y; w, [! k# l+ @而Bin文件是最纯粹的二进制机器代码,没有格式,或者说是"顺序格式"按assembly code顺序翻译成binary machine code.由于分析出来Hex文件中的数据域ASCII码表示的十六进制与二进制一一对应,而且我公司DSP又是16位的,以一个word为最小单位,所以四个十六进制ASCII码代表一条机器指令单位或者地址.借于上面分析,编写了工具代码.大体原理是用fscanf函数在每行的数据域读入四个ASCII码,以短整形(short int 16bit)形式储存,在把这个短整形变量顺序fwrite到文件流中去即可.
$ _2 |. z* \& T' i; S3 n0 a; o+ k( Z0 \0 n6 W! s

7 z* y! N8 L* b, j5 f2 D+ N
* C% a* w- b8 H2 l举一例说明:$ _. p  ^0 r7 o
+ L( \2 {: x' A3 ]

& [: Y: ]% m7 U# p
" ^3 Z, s5 E# \! }  U0 M; T* r4 _表1
1 x# a, A1 N% F, w6 l4 ~
# O- Z: k5 `! I7 M9 z3 ~: p% {8 E
2 l& P7 `5 Z/ S5 Q: a
ORG 0000H
! B; L* }6 f2 ?9 ^6 _. j# b
( j% K0 i" j: Q4 k: U  b
. Z; u* E- I9 a( p1 C
, w- U  {% l4 {: f6 hLJMP START
3 t$ q/ H7 G' F* p# d
$ v# z9 C7 _! n3 I: U* J' {  R8 a
: O3 y3 i6 K1 w$ K
ORG 040H
5 n# b5 X6 t! A! @2 Z+ _  k5 @+ Y' Q* d9 h- N/ P

: @% U4 Z. }2 F! @5 e3 k- S! C3 L. O: C5 ^1 U" J  O& f
START:3 T, w1 x, R4 e2 X/ O6 r
: p& O) A& Y0 x
. N( G5 R/ @9 P7 G5 |  r- x9 v4 w5 i
) o% a' Q, u, t1 g
MOV SP,#5FH ;设堆栈
$ e$ f/ J0 u2 e" ?2 x0 Z6 a$ C; k+ A, X+ S
" d1 j( V9 }/ H& m& Z, T

; X7 S! o# }+ [. Y  J. p# tLOOP:
* p8 f! E: s/ W, k
; J0 q  D2 |# r* w" N
2 }( T8 f6 W  p( M! s, |3 Y: _
5 O4 V1 f( L8 }% l& y4 V+ ~2 Q& nNOP
6 b. x7 Q2 O9 B, Z0 \1 f" f# K* m9 k: N1 A9 U" u: T7 O, |
: x$ n2 z7 A1 g4 C

6 Q+ |5 q( x0 S" v: i) {LJMP LOOP ;循环
4 }! f0 t7 N3 U1 l8 W- C7 Q9 H; W2 z- {" H& B
; ?* t- T9 P* @6 O

; j0 O" N6 k7 \) @. w# x8 k  mEND ;结束
0 \4 j' r) \' w: m0 z5 s8 V; k
, I2 ^/ G& _2 _+ a( i  x- R5 h4 M7 @5 i1 C9 y
( n: j3 m: z% m+ R
表2
* d4 N& V" R- A$ }7 w2 |. g' a2 F+ ^: z" ~# ^5 E) N
+ n9 p# V- z2 S, I# Y' x) c
. x/ a# |0 V) ]6 i% n
:03000000020040BB
, V5 t- W$ N. l! Y9 Y, m6 v; q. p% o' b/ y1 V; R6 y

0 M& |$ N2 F" F1 H) M( ?  O% Q7 j( H$ W1 b
:0700400075815F000200431F& j$ R7 \+ M$ h" b( a/ B

, I( k% i! X) X/ S- l
" T) U  c  A0 G; G! G/ P8 X9 V& S  V5 L: q  u6 t
表3
3 N% H5 M: V0 n& a$ Y7 k- e# ~. q0 f# _0 ?$ G3 e

" O0 J" r& X8 o9 R! c7 K2 F6 A: ]; ~/ n* `2 l4 x& B( A
02 00 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
: _& g. z; t% e0 X8 g6 E5 T$ I2 I! ], `& W  i' N
$ G7 p5 b2 v7 R# \6 y& \0 |! a

$ Y: Z$ }4 E; A. S( dFF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF+ ]- s0 n" K; _) O. X

$ `: A/ C. v; I  U3 \! a& J  f) t5 d
0 z; D/ [. h! ?6 S" k: k
FF FF FF FF FF FF FF FF FF FF FF FF 75 81 5F 00 02 00 43
$ O# I4 w' X6 ^% u1 A) w( V0 {0 L: G. [% m
, i1 f% v5 O+ H" G
, k3 r! z5 p& `" M- S' x
表1为源程序,表2是汇编后得到的HEX文件,表3是由HEX文件转换成的目标文件,也就是最终写入EPROM的文件,它由编程器转换得到,也可以由HEXBIN一类的程序转换得到。学过手工汇编者应当不难找出表3与表1的一一对应关系,值得注意的是从02 00 40后开始的一长串‘FF’,直到75 81,这是由于伪指令:ORG 040H造成的结果。3 }8 g! u5 A* P- Y% m
* \! J* ~# e; w6 _$ y4 y( E
7 l, L, Z( ^( U* W+ f! U
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-24 05:19 , Processed in 0.140625 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表