2013-08-08 2 views
0

У меня есть встроенная система микроконтроллеров, которая обменивается данными с моим компьютером через uart, и на этой стадии разработки должна быть отправлена ​​действительная информация сама по себе. Я вызвал «сканирование» этого устройства, его роль заключается в том, чтобы отправлять данные, которые он считывает на хост-устройство автономно. Теперь у меня есть текстовый файл с шестнадцатеричными значениями данных, готовый к обработке. Я отправляю пакеты, которые начинаются с 0x54 и заканчиваются на 0x55, и они поступают в количестве 4 (4 пакета на одно «чтение» инструмента). Пакет содержит два байта идентификатора после 0x54, а затем набор из 6 байтов для данных, всего 10 байт на пакет. в зависимости от идентификаторов пакетов, данные внутри могут быть числом с плавающей запятой или целым числом.обработка необработанного шестнадцатеричного журнала данных связи в читаемые значения

Я в основном хочу разработать программу командной строки, которая принимает в ней необработанный текстовый файл со всеми этими данными и выводит текстовый файл, разделенный запятыми между пакетами, с данными, преобразованными в его читаемый десятичный экземпляр. новая строка для каждого 4-го конвертированного пакета была бы очень полезна. Я хотел бы сделать это в C (я достаточно разбираюсь в кодировании встроенного C, и я могу легко конвертировать шестнадцатеричные значения между типами), но у меня нет большого опыта написания исполняемых файлов C. Любая помощь при запуске в этом маленьком мини-проекте была бы потрясающей. Мне нужно знать, как создать управляемый исполняемый файл командной строки, прочитать в файле данных, манипулировать данными (которые, я думаю, теперь могу сделать), а затем экспортировать данные в другой файл. Я установил netbeans c/C++. Указатели в правильном направлении все, что мне не требуется (не каламбур =])

Вот исходный файл данных:

http://pastebin.com/dx4HetT0

+0

Какая ОС? В Linux у меня возникнет соблазн достичь сценария bash и обычных текстовых инструментов. Разбор этих сообщений с «реальным скомпилированным программным приложением» не был бы намного сложнее :) –

+0

Windows - теперь у меня есть программа, которая читает данные, прокручивает ее char по char - мне нужно прочитать буквенный символ как десятичную число, хотя – dannybeckett

ответ

0

Существует не так много изменений в данных, выводить байты с уверенностью, но следующее должно начать OP.

void db_parse(FILE *outf, const unsigned char *s) { 
    fprintf(outf, "%c", *s++); 
    fprintf(outf, " %3u", *((uint8_t *) s)); 
    s += sizeof(uint8_t); 
    uint8_t id1 = *((uint8_t *) s); 
    fprintf(outf, " %3u", *((uint8_t *) s)); 
    s += sizeof(uint8_t); 
    if (id1 >= 3) { 
    fprintf(outf, " %13e", *((float *) s)); 
    s += sizeof(float); 
    } else { 
    fprintf(outf, " %13u", *((uint32_t *) s)); 
    s += sizeof(uint32_t); 
    } 
    fprintf(outf, " %5u", *((uint16_t *) s)); 
    s += sizeof(uint16_t); 
    fprintf(outf, " %c\n", *s); 
} 

// Test code below 

const char *h4 = 
    "54 12 04 00 00 40 C0 00 00 55 54 12 01 02 00 00 00 00 00 55 54 12 02 03 00 00 00 00 00 55 54 12 03 00 00 40 C0 00 00 55 "; 

void db_test() { 
    unsigned char uc[10]; 
    const char *s = h4; 
    while (*s) { 
    for (int i = 0; i < 10; i++) { 
     unsigned x; 
     sscanf(s, "%x", &x); 
     uc[i] = x; 
     s += 3; 
    } 
    db_parse(stdout, uc); 
    } 
} 

Выход

T 18 4 -3.000000e+00  0 U 
T 18 1    2  0 U 
T 18 2    3  0 U 
T 18 3 -3.000000e+00  0 U 
Смежные вопросы