Как читать 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.

Другие вопросы по тегам