Компилятор Keil Cx51: типы данных и порядок байт

Компилятор Cx51 входит в состав средств разработки Keil С51.

Компилятор поддерживает следующие типы данных:

Тип данных Количество
бит
Количество
байт
Диапазон значений
bit 1 0, 1
signed char 8 1 -128…+127
unsigned char 8 1 0…255
enum 8 или 16 1 или 2 -128…+127 или -32768…+32767
signed short 16 2 -32768…+32767
unsigned short 16 2 0…65535
signed int 16 2 -32768…+32767
unsigned int 16 2 0…65535
signed long 32 4 -2147483648…2147483647
unsigned long 32 4 0…4294967295
float 32 4 ±1.175494E-38…±3.402823E+38
data *, idata *, pdata * 8 1 0x00...0xFF
code *, xdata * 16 2 0x0000...0xFFFF
generic pointer 24 3 Memory type (1 байт); Offset (2 байта) 0...0xFFFF

Многобайтовые переменные располагаются в памяти определенным образом, который называется big-endian (от старшего к младшему). То есть самый старший байт хранится в памяти раньше остальных, самый младший сохраняется самым последним. Например число 0x1234 типа int храниться в памяти следующим образом:

Адрес +0 +1
Содержимое 0x12 0x34

Разбор файла в формате Intel HEX с помощью sed

Команда для разбора строк файла file.hex:

sed -r "s/^(.*)\r$/\1/g; s/^:(..)(....)(..)(.*)(..)$/\1 \2 \3 \4 \5/g" file.hex

Удачно разбирает файл, если строки в нем завершаются в стиле Unix (символом LF) или в стиле Windows (символами CR+LF).

Если содержимое исходного файла:

:10077600F90FD8E0E4C9FAE4CCFB2275F010EF2FAC
:10078600FFEE33FEED33FDCC33CCC833C810D707AC
:100796009BEC9AE899400AED9BFDEC9AFCE899F8E7
:0E07A6000FD5F0DAE4CDFBE4CCFAE4C8F9227A
:00000001FF

то вывод команды:

10 0776 00 F90FD8E0E4C9FAE4CCFB2275F010EF2F AC
10 0786 00 FFEE33FEED33FDCC33CCC833C810D707 AC
10 0796 00 9BEC9AE899400AED9BFDEC9AFCE899F8 E7
0E 07A6 00 0FD5F0DAE4CDFBE4CCFAE4C8F922 7A
00 0000 01  FF