원문주소 : http://blog.naver.com/unijun/37834300
1. Hexa파일과 BIN파일의 비교
1) 일반적으로 Hexa파일이 BIN파일보다 용량이 크다.
- Hexa파일은 ASCII로 되어 있으며 BIN파일은 Binary로 되어 있다.
- Hexa파일은 Address영역이 있으며 Bin파일은 Address영역이 없다.
- 하지만 경우에 따라선 BIN파일 용량이 더 커질 수 있다. 특히 시작번지가 0번지에서
멀어질수록 BIN파일이 더 불리하다.
2) Hexa파일은 시작Address를 자유롭게 바꿀수 있으나 BIN파일은 그러지 못한다.
- BIN파일은 0번지부터 시작Adress까지 '00'이나 'FF'로 채워두어야 한다.
- 중간에 빈 영역이 있을경우에도 BIN파일은 그 영역을 '00'이나 'FF'로 채워두어야
한다.
3) Hexa파일은 자체적으로 Check Sum을 가지고 있어서 통신오류에 대응할 수 있다.
- BIN파일은 프로그램에서 통신오류에 대응할 수 있도록 제작해 주어야 한다.
4) Hexa파일은 다운로드 프로그램을 대부분 공용으로 쓸 수 있다.
- BIN파일은 0번지부터 시작Adress까지를 없애려면 강제로 시작 Address를 지정해야
한다.
2. Hexa파일의 기본적인 구조
1) 시작표시 : ':'로 나타내며 레코드의 시작을 나타낸다.
2) 데이터길이 : 데이터항목의 크기 n을 나타낸다.
3) 주소옵셋 : 시작주소로부터 얼마나 떨어진 부분부터 쓸 것인지를 나타낸다.
4) 데이터타입
- 00 : Data Record (16/20/32bit Address형식에 모두 사용)
- 01 : End of File Record (16/20/32bit Address형식에 모두 사용)
- 02 : Extended Segmented Address Record (20bit Address형식에 사용)
- 03 : Start Segment Address Record (20bit Address형식에 사용)
- 02 : Extended Linear Address Record (32bit Address형식에 사용)
- 03 : Start Linear Address Record (32bit Address형식에 사용)
5) 테이터
- 데이터타입이 00일때 : 기록할 데이터
- 데이터타입이 01일때 : 무의미
- 데이터타입이 02 또는 04일때 : 시작 Address
- 데이터타입이 03 또는 05일때 : 실행 Address
6) 체크섬 : 모든 레코드 영역을 모두 더한 후에 2의 보수를 취한값
byte i, 체크섬 = 0 ;
for ( i = 0 ; i < 레코드길이 ; i ++ ) 체크섬 += 레코드[i] ;
체크섬 = ~체크섬 + 1 ;
3. Hexa파일의 예 (20bit Address형식)
:020000023000CC
:10000000B8FF9F8EC026813E0A004F4D7402EB0957
:1000100026813E08006F527405EA4900A7FFC70613
:10002000BA00FE9FC706B8000000C7060C80FF1983
:10003000C7060C800000C70608800000C7066C8059
:040000032FFE0000CC
:00000001FF
각 문장을 해석해 보자.
1) : 02 0000 02 3000 CC
- 02 : 데이터항목이 2바이트이므로 02이다.
- 0000 : 이 문장은 시작 Address를 설정하는 문장이므로 옵셋이 필요없다.
- 02 : 데이터가 20비트 형식의 시작주소를 나타낸다는 의미이다.
- 3000 : 데이터인데 여기서는 데이타타입이 02이므로 시작주소이다.
단 20비트형식이므로 실제 주소는 4비트 쉬프트되어 0x030000이 된다.
- CC : 체크섬이다. 02+00+00+02+30+00 = 34, 34의 2의 보수는 CC이다.
2) : 10 0000 00 B8FF9F8EC026813E0A004F4D7402EB09 57
- 10 : 데이터항목이 16바이트이므로 10이다.
- 0000 : 실제주소는 시작주소+주소옵셋=0x030000+0x0000=0x030000이다.
- 00 : 데이터가 저장될 코드라는 것을 나타낸다는 의미이다.
- 뒤의 16바이트 : 실제로 저장될 코드이다.
- 57 : 체크섬이다.
3) 세번째 줄부터 다섯번째 줄까지는 2)번항목과 동일하며 주소만 16씩 증가한다.
4) : 04 0000 03 2FFE0000 CC
- 04 : 데이터항목이 4바이트이다.
- 0000 : 이문장은 실행 Address를 설정하는 문장이므로 옵셋이 필요없다.
- 03 : 데이터가 20비트 형식의 실행주소를 나타낸다는 의미이다.
- 2FFE0000 : 실행주소이며 20비트형식이므로 실제 주소는 4비트 쉬프트되어 0x02FFE0
이다. 뒤의 0000은 IP(Interupt Priority) 레지스터의 값이다.
- CC : 체크섬이다.
5) : 00 0000 01 FF
- 00 : 데이터항목이 없다.
- 0000 : 이문장은 종료를 나타내는 문장이므로 옵셋이 필요없다.
- 01 : 이 문장이 종료를 나타낸다는 의미이다.
- FF : 체크섬이다.
'Engineering > C Language' 카테고리의 다른 글
[C언어] 구조체사용하기 (0) | 2014.01.16 |
---|---|
[C언어] 포인터 사용하기-2 (0) | 2014.01.15 |
[C언어] 포인터 사용하기-1 (0) | 2013.11.30 |
[C언어] 기본적인 개념들 (0) | 2013.11.28 |
[C언어] 평균값필터, moving average (2) | 2012.11.01 |