Димон Безпарольный 0 Posted May 26 · Report post Написал простое приложение с использованием WinApi для работы с железкой STM32. Создал окно Edit в который выводится лог. Прием по COM порту осуществил с использованием триады. Все что принял вывожу в окно Edit: RetBytes = comstat.cbInQue; //и получить из неё количество принятых байтов if(RetBytes) //если действительно есть байты для чтения { // ReadFile(hComPORT, bRead, RetBytes, &RetBytes, &overlapped); //прочитать байты из порта в буфер программы if (RetBytes > 0) // { // bRead[++RetBytes] = 0; //Завершающий 0 PrintMultitext(bRead); // } // Сам вывод в окно в отдельной функции: void PrintMultitext(const char* COMString) // { // static unsigned char NLine = 0; // SendMessage(hTextBOX, EM_SETSEL, 0, -1); // SendMessage(hTextBOX, EM_SETSEL, -1, -1); // SendMessage(hTextBOX, EM_REPLACESEL, 0, (LPARAM)COMString); // Работает но криво. Выводит вот так: Как - то можно это исправить? Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dimka76 0 Posted May 26 · Report post 37 minutes ago, Димон Безпарольный said: Как - то можно это исправить? Сделайте в STM32 форматированный вывод, например sprintf(....); Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Димон Безпарольный 0 Posted May 26 · Report post 2 minutes ago, dimka76 said: Сделайте в STM32 форматированный вывод, например С самого начала. printf и sprinf используется с \r\n на конце. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dimka76 0 Posted May 26 · Report post 8 minutes ago, Димон Безпарольный said: С самого начала. printf и sprinf используется с \r\n на конце. Ну, так с помощью них и форматируйте, добавьте модификатор ширины. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
k155la3 2 Posted May 26 · Report post Было бы неплохо, чтобы было видно, как должен выглядеть "правильный" вывод. Т.е. без декодирования и додумывания. Если по интерфейсу все в текстовом формате, можно попробовать открыть файл не в бинарном, а в текстовом режиме. (не уверен, возможно в текстовом режиме ф-я будет работать в "синхронном" режиме и ждать терминирующего символа \r, как gets() ) Использовать ReadFileEx(...) которая позволяет работать в "блочном" режиме с таймаутом (если лог выдается построчно с временнЫми паузами между строками). Те не читать каждый "прилетевший" байт а ждать блок(строку) и обрабатывать его. итд Организовать прием в "поток" и выделять-выводить уже функциями потока. Но это не ко мне. Организовать суррогат потока - читать-накапливать ввод в строковую переменную, и в зависимости от наличия \r выводить в окно. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
k155la3 2 Posted May 26 · Report post ps 1 hour ago, Димон Безпарольный said: С самого начала. printf и sprinf используется с \r\n на конце. Этого недостаточно при выводе HEX printf("%.08X\n\r", var32); Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
AleksBak 0 Posted May 26 · Report post 19 минут назад, k155la3 сказал: printf("%.08X\n\r", var32); А я '\r' не использую. Только '\n' остается. Т.е. printf("%.08X\n", var32); т.к. все это передается за какое-то время, а зачем его затягивать ненужными вещами. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...