Windows 콘솔용 Intel HEX 포맷 파일을 바이너리 파일로 변환하는 프로그램
기존에 잘 쓰던 프로그램이 있었는데 TI C28x 계열 MCU 대상으로 -a, -w 옵션을 사용하면 맨 뒤에 extra bytes가 더 붙는 문제가 있어서 직접 만들었다.
- -a : C28x 코어는 주소 체계가 워드(16비트) 단위로 되어 있어서 HEX 파일의 주소도 워드 단위라 모든 address field를 왼쪽으로 1비트 shift해야 한다.
- -w : C28x 코어는 리틀 엔디안 구조지만 메모리가 워드 단위이다. HEX 파일의 데이터도 워드 단위로 저장되어 있어서 .bin 파일에 저장할 는 워드 내에서 바이트 순서를 스왑해야 한다.
- -p padding : 패딩 바이트 값 지정 (기본값: FF)
- -o output.bin : 출력 파일 경로 지정
-a(addressAlignment) 옵션에 따른 address field 처리
-a, -w 옵션을 안쓰면 다른 MCU 대상으로 써도 잘 작동할 것이다.
if (record.recordType == 0) {
// ...
if (!addressAlignment) {
physicalAddr = (upperAddress << 16) | (segmentAddress << 4) | record.address;
}
else {
physicalAddr = (upperAddress << 16) | (segmentAddress << 4) | (record.address << 1);
}
// ...
}
// ...
else if (record.recordType == 4) {
// ...
else {
upperAddress += (field - lastUpperField) * (addressAlignment ? 2 : 1);
}
// ...
}
사용 예시.
압축 암호 : 1234
'프로그래밍 > C++' 카테고리의 다른 글
C++] std::chrono 라이브러리 (0) | 2025.05.12 |
---|---|
C++] explicit 키워드 (0) | 2025.05.06 |
C++ ] uint8_t, int_8t를 스트림 연산자(<<)로 출력할 때의 문제점 (0) | 2025.04.18 |
C++] 파일 입출력시 최적화 방안 (0) | 2025.04.17 |
C++ ] <random> 헤더 사용 난수 생성 (0) | 2024.12.03 |