Как читать hex и MHX расширение в CAPL Script
У меня есть ReadBinFile () // Читает 2048 байт из файла bin {
Transferlength = fileGetBinaryBlock(буфер, 2048, fileHandle); }
Теперь я хочу прочитать файлы расширений.hex и.mhx. Я не смог найти встроенную функцию, что можно сделать в скрипте capl.
3 ответа
Файлы формата * .hex или *.mhx можно прочитать с помощью функции OpenFileRead. приведенный ниже фрагмент кода поможет прочитать файл .hex.
void readhexfile(void)
{
dword i;
char LineBuffer[0xFF];
int ByteCount;
char CountAscii[5];
int Data;
char Ascii[5];
dword readaccess = 0;
dword bufferpointer = 0;
byte buffer[1*1024*1024]; //1MB hex file size
if ((-1) != strstr_regex(FILENAME, ".hex")) //FILENAME-> Sysvariable
{
readaccess = OpenFileRead (FILENAME,0);
/* --> identified as IntelHEX-Input */
if (readaccess != 0)
{
/* read line until cr+lf */
while (fileGetString(LineBuffer, elcount(LineBuffer), readaccess) != 0)
{
// check for Record Type 00 (Data Record)
if (LineBuffer[0] == ':'
&& LineBuffer[7] == '0'
&& LineBuffer[8] == '0'
)
{
// extract ByteCount parameter
strncpy(CountAscii, "0x", elcount(CountAscii));
substr_cpy_off(CountAscii, 2, LineBuffer, 1, 2, elcount(CountAscii));
ByteCount = atol(CountAscii);
// extract Data parameter
for (i = 0; i < ByteCount; i++)
{
strncpy(Ascii, "0x", elcount(Ascii));
substr_cpy_off(Ascii, 2, LineBuffer, 9+i*2, 2, elcount(Ascii));
Data = atol(Ascii);
buffer[bufferpointer++] = Data;
};
}
}
fileClose(readaccess);
}
}
}
Аналогичный подход можно использовать для чтения файлов формата .mhx.
Вы можете легко преобразовать /
*.mhx
файл в двоичный файл с помощьюsrecord
:
srec_cat file.hex −o file.bin −binary
Затем вы можете прочитать полученный двоичный файл с помощью
fileGetBinaryBlock()
.
Если вам нужно обработать
*.hex
файлы динамически, вы можете вызвать
srec_cat
непосредственно из вашего кода CAPL, используя
sysExec()
.
dword openFileRead(char filename[], dword mode);
Эта функция открывает файл с именем filename для доступа для чтения.
Если mode=0, файл открывается в режиме ASCII; если mode=1, файл открывается в двоичном режиме.
To open hexfile
dword HexFileHandle;
HexFileHandle = openFileRead(HEX_File_Path, 0);
Возвращаемое значение - дескриптор файла, который должен использоваться для операций чтения.
Если возникает ошибка, возвращаемое значение равно 0.