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

单片机hex和bin文件的区别

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

- S* @" |2 C9 k; R! `' P
2 b! t) p8 E" l  @  chex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。
4 \# t% l# }; {# W4 w6 V' y3 a; F- z5 b# P% W! Z

/ q# ~2 x, F* N. A& I. A$ a; T& r& y7 H1 R6 c1 d% {  _7 a
Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。打开后可发现,真个文件以行为单位,每行以冒号开头,内容全部为16进制码。Hex文件可以按照如下的方式进行拆分来分析其中的内容:/ }/ ?2 _9 V, t) O% y

5 ]4 y( p! `2 N. s
- ?5 I8 r; w# X8 f
1 Y& A& j) l" K$ {" N例如:0 j7 C- ^% Q) |) p4 }* B# c( f' \
$ Q0 P2 Q% {( r, G4 Y

& I3 Z, Y- c! i, y2 L$ N
* o9 m, t/ N; f:020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA( T- H6 U/ e8 V% {% U

- v- \6 q" k! a' }2 S! F
  V6 s8 `3 d: {6 }" R) j9 E0 x7 S1 L2 G& e! q2 v4 H
第一个 0x02 为数据长度。' H  N0 y' |+ z. L* ~
% h/ F! }& M! h

, J) d2 d/ x* x, r: Z6 r+ l) {6 ?* S) i2 A. V; N. H" y% _. `' y
紧跟着后面的0x00 0x00 为地址。
% y+ P; O# u2 l  ]& L
- f, Y! Y! E- n8 s$ e1 ]3 U2 `7 a" \( y

  }. O4 \$ f: x- F再后面的0x04为数据类型,类型共分以下几类:) _9 M/ G9 {2 a& |- [

3 V- b3 N6 Q0 S
6 _$ S/ l8 J- H6 u4 m
) u/ t* y) }1 G/ t$ f'00' Data Record
5 A0 ?  Y) A0 I
- O# N  ]8 J  I1 H5 u/ H
  h8 y$ J, g' g, q/ K0 v9 x! `
, C* a8 r2 m3 @! v- N- v# S'01' End of File Record1 `1 V5 c+ D( A0 M1 {8 o

5 x( D3 ^% e' h: Q9 {" j% q  u6 W1 i1 d1 M
) x7 A! e2 w7 w6 D
'02' Extended Segment Address Record8 ^2 Y) |# `  ]
! q& X' a% @2 d9 {8 R! W6 g6 e

" ^7 _% t' A7 ~# v8 G6 {6 Y% \. K/ h4 p& o" C* s5 \
'03' Start Segment Address Record
$ W( U$ a" j8 q! B0 b
0 c7 v; P3 e2 w, u+ l" t
" \+ ~  c6 M/ ]* y
4 y9 s' ?! W5 }( Y0 @$ E* d+ s'04' Extended Linear Address Record8 \* a9 ?- M' E$ A* ~

5 V' ~5 |6 ~) ]; L; E$ [# g$ S9 ]4 t. n

( k. R- o2 s, L  t, Q'05' Start Linear Address Record
& Q( u' ]0 Y. k. N0 Q: q: f, R; q8 \( W# l! U
- c" X# ~& n0 ~# C5 r
: q# w* O* W  P, e  r
然后,接着0x04后面的两个 0x00 0x00就是数据。最后一个0xFA是校验码。
" k: }4 m7 G) }$ Y( [
: j# N5 P- y8 p7 Y2 W% a+ P- C4 K0 v! a+ c
  p0 v' P6 h2 V
HEX文件的每一行都是这样的格式:
" G$ z. Z: @4 Z) a4 d5 {! s/ S3 r$ i* Q+ I$ x1 J: ^1 f- |
2 m+ M9 v! k4 C# a$ z, T$ l+ Q

+ H- d% I4 g% ~, `Intel hex 由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式如下:2 T, x" l8 V/ J  ?% j: O

$ B0 D1 I% s2 o, y( g& q; X8 @! ], q0 R1 [4 P" N5 ?& h
) h' i( ]8 |1 O" ^' |7 g5 I
:CCAAAARR...ZZ
: z# _2 ^# Z! t- |1 E( A% [
8 E; e- P3 s) V/ W! w, ?' W& S& |, d! f1 h! i+ Q$ \

1 [6 k. D3 z; p, ]9 |7 a其中:; M1 V2 S1 C4 y; i# X& N
9 [3 r; z; |: s

# Q6 v, c( F3 m& w1 f/ @0 a, J5 g0 Z9 O- [% d" ^$ e0 q
CC) [! q& F( A/ [! X( _
! ]0 T( K8 e" G$ r( b1 H
; X- _! n4 i; h3 E

% V$ y) [3 A) D4 t" v, U本条记录中的数据字节数
4 `4 Y0 l4 u1 O( @
: B" O. E/ G4 H3 ~  o( c  [. S4 D1 ^3 x& V
; s8 E* {' u8 I. a9 W
AAAA
( G6 p5 q9 h6 q4 H% v) l0 m# b. J5 f. s

0 l5 ^6 y) Z/ n- B" q
. {, L. x# [" Q  y2 |本条记录中的数据在存储区中的起始地址- p! e* F& s2 P& C9 \, D
; z& R  ^# c4 g+ b

) O4 o; Z* U' D4 d- M) G! i" r0 {4 m  v* l
RR! a, w/ [8 s; C# Q' ?* r' [

$ P% k3 Q5 I+ t$ e9 ^" Y( M; k& l7 o; [9 `. s; J

. Y! X( t# X2 r" `1 Q- Y记录类型:
# Y) U, s6 J  p8 P, ~; p! q, t/ n% i; c( z9 }

# Q1 k  f0 r  u- @. Q& w; V9 c1 n3 V/ Q, w5 E2 L* \( m
00 数据记录 (data record)" x: B  h* Z" \

& T; m! f7 a" W6 O' k5 i" ?6 v* ?7 O1 T" v% v

' M7 N: _, K$ ^3 E2 q01 结束记录 (end record)2 @$ j1 }$ P9 u/ ?- B
# I. j4 ~/ _" m# F0 K0 D! y& |& ~, |

, m  n4 M" W5 E+ Y, d9 ^  Z
- Q& v# n$ U! }2 ]# ]  H; U02 段记录 (paragraph record)
. G8 D' M* j+ E$ \) ?% U
  L0 X9 K$ n2 k* W  t
9 H; E' }7 M( `) c1 x! b  }6 ~
, f2 \0 K- ~& P" q. N9 E03 转移地址记录 (transfer address record)
) ~5 X) |2 o  L9 f/ `  c! B& Z0 Y6 S* H/ e, N# }5 h% I
4 F) O& Z7 X" M, k% e0 L* V# n- @& y: u

$ d2 Z/ z; {, o! \# K; Y$ w- T...& U7 k& a- O( `  ]; _

( P# t$ g* B6 ?9 p- J4 t, F/ _& X! s9 J' j+ A: b9 o
& `7 j1 M* o! N% ~, C
数据域5 p& K" ?) c6 ]) H$ p  k1 d
  k  E: |. ]- ^9 ~8 E& T. i

9 E0 O/ T$ i( `) e; B, u' V  J( S
0 p9 g! E7 m" W6 r, u% j8 qZZ' e5 r1 f0 ?% t
- \3 v: A/ t  }1 P& u! [

. M" ~. C+ Q  E: w$ J+ F  t" t# j' t5 g
& ]4 \; }& N0 J; B- y  @* `数据域校验和- C2 [  O/ Z" k- S2 Y7 H+ n

2 C- N1 \( H5 g# M! I) F7 M) l, _) D7 s; b/ {5 I0 W) `4 f/ l

1 p5 l" {$ U! _) \  pIntel hex文件记录中的数字都是16进制格式,两个16进制数字代表一个字节。CC域是数据域中的实际字节数,地址、记录类型和校验和域没有计算在内。校验和是取记录中从数据字节计数域(CC)到数据域(...)最后一个字节的所有字节总和的2的补码。
& P6 {; d% ]$ ^1 z- P, w3 y0 G: K( P6 g# o9 A; w$ l, ^' O
: `' D# Z5 y$ a+ g
5 f! X. Y% g8 V* q* d2 w8 A4 {
而Bin文件是最纯粹的二进制机器代码,没有格式,或者说是"顺序格式"按assembly code顺序翻译成binary machine code.由于分析出来Hex文件中的数据域ASCII码表示的十六进制与二进制一一对应,而且我公司DSP又是16位的,以一个word为最小单位,所以四个十六进制ASCII码代表一条机器指令单位或者地址.借于上面分析,编写了工具代码.大体原理是用fscanf函数在每行的数据域读入四个ASCII码,以短整形(short int 16bit)形式储存,在把这个短整形变量顺序fwrite到文件流中去即可.
, E/ P, a& g4 `( c
0 q$ M! f$ P& a& V) h; P
! `9 v9 a3 s5 G8 {/ u$ o% F, s* W6 ]& {
举一例说明:" y1 c. G) n  x" l( c4 [' A
* \' j+ C5 d/ w* b- l

& I$ w) K4 O$ X' g: G# a- e: [6 o# h8 B$ o' a+ `
表11 L' v5 g4 ^& m4 S: G8 \

9 K+ j8 M7 B3 R* l/ L
* M0 n3 `  R0 I& b
- q" a; s0 K2 Q7 QORG 0000H
4 l  M3 Z( r' g& O$ |0 c% T9 K7 C0 C# C# t/ `$ R0 B1 h! g, x

4 p! s. q  G& g, W- l
9 |' G) s* B4 j% ~3 X% `, L# ]$ E  a; [LJMP START' g; l  G4 {; C. C1 f- B

& T! N6 q( g" c# t6 j$ d# g+ ]+ D# O, i3 M1 h( `, c4 N

. I1 x1 F8 d; {0 Q9 w- W+ L0 \0 RORG 040H
# u9 }0 y7 ]2 X* b) i9 e0 U6 x# W8 G" V6 g. i* X; I
  R% c- [/ }; k- P$ S

' R" h6 H: r+ J/ L0 VSTART:6 e: ^5 T3 i5 C' c& |# w! c
. C1 g, j- z. `$ B% P
$ O/ U0 h) k7 U

6 m: Y- z0 J0 E4 IMOV SP,#5FH ;设堆栈
3 E0 k. G) X9 i3 `- a7 k0 ~# C
% z1 d' A6 B4 E0 ^# v  F5 ~5 i7 g/ |6 e( U& V. C" }  R% p
5 K) O8 F2 F7 m% i% D- |. T3 |9 I
LOOP:" A! N' k) |- l# g0 h

+ D/ C2 k/ X% y( A- P; A& \
$ S: P0 m3 z$ a* k/ D# C6 H
5 P8 F# P4 I' }& o( |NOP/ E7 K: Y: [( y+ V4 j
" Q! J8 Z. r7 ~5 h

. y) `! m, ?3 i3 ^& A0 l- u* H+ ?2 G7 U
LJMP LOOP ;循环
3 I# b; l6 j" q/ }
+ s% _0 X% D; S7 U7 I0 ~; ^* O1 ?. }/ {( R
: w2 P3 M/ t0 j3 n+ W
END ;结束
4 K  j. b& w+ i- g" |: v, p
( I+ a& t' e1 Q. D3 M0 A
9 R$ s( t$ y: r( I" a1 P
( R' D( R( o- R表22 v8 Q: S" g% c7 v+ v/ M

: X5 E) W4 |$ b# B! v% d' o4 v+ d( Q9 C, j0 w: J, f3 Z7 s

1 }3 E3 L* c4 r  X/ s4 {:03000000020040BB
9 `& U7 ^, M5 ^2 ^
7 f5 H0 N# x) o" c8 P8 Z8 k5 d7 E" C0 l+ m! J! R1 C
& I* B9 ~. Q. c6 [9 a
:0700400075815F000200431F' P0 x1 X$ {; z/ Q2 n% Y7 e

, W5 g! ]1 V" w2 ~) E' \, R5 z: \8 _8 F$ x+ N# P

/ g+ J! h0 B1 F" w$ J8 j表38 @+ V) A9 g5 y1 ~) u* o
3 \0 X3 F7 b3 R* Y! i/ N2 S
; z: R- D# Z; R7 M, v8 G! R& j- @
- P* a  b" j/ a( a" X
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
" m6 y0 F4 ]& B' k# a; O0 A' U! m* k$ b% O) c0 P, ^

0 h: Q' y# J' p2 g: z6 w7 c/ C3 y  D% F, Y" y% x- n/ k% g" H$ l2 {. b
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 FF$ ]' e  c* w, u3 A

% o: L6 b% ^; R9 `$ E' i% ]6 l9 i' J9 e* q5 ?4 [5 Q2 X: d1 Q
: ~: a6 x( G2 b5 {# M
FF FF FF FF FF FF FF FF FF FF FF FF 75 81 5F 00 02 00 43. h0 \5 C: f2 k+ ?$ Q/ t5 T, `
! h! g6 _; X( S- \3 g2 W. p
4 r7 H6 v/ J' ]+ g# H1 ]
4 C4 f$ n  Z$ z& m
表1为源程序,表2是汇编后得到的HEX文件,表3是由HEX文件转换成的目标文件,也就是最终写入EPROM的文件,它由编程器转换得到,也可以由HEXBIN一类的程序转换得到。学过手工汇编者应当不难找出表3与表1的一一对应关系,值得注意的是从02 00 40后开始的一长串‘FF’,直到75 81,这是由于伪指令:ORG 040H造成的结果。
( S$ d7 Z1 O7 T/ @1 G. z, M1 A! T  w
4 S7 j# l) r1 Q" l/ M# z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 16:45 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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