Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 12:22   #31
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Чего тут непонятного - поищите в документации CString описание метода Format...
waleri вне форума Ответить с цитированием
Старый 31.05.2013, 13:06   #32
bedouin
Пользователь
 
Регистрация: 05.01.2012
Сообщений: 27
По умолчанию

Может быть глупый, но тем не менее вопрос:
В исходнике программы для записи используется функция
Код:
WriteFile(COMport, bufwr, strlen(bufwr), &temp, &overlappedwr);
где strlen(bufwr) определяет число записываемых байт.
Но та же функция strlen игнорирует нулевые байты. А они мне нужны.
Можно, конечно, задать фиксированный объем передаваемых байт. Но в этом случае незаполненные ячейки будут передаваться нулями (лишние нули).
Как тогда лучше поступить? Чем заменить strlen?
bedouin вне форума Ответить с цитированием
Старый 31.05.2013, 16:19   #33
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Ну вы же както добавляете эти нули - ведите учет сколько данных в буфере и просто ставьте размер буфера. Тем более, что явно у вас двоичный протокол, значит где-то должен быть отправлен размер, чтоб принимающая сторона смогла собрать данные правильно.
waleri вне форума Ответить с цитированием
Старый 31.05.2013, 18:52   #34
bedouin
Пользователь
 
Регистрация: 05.01.2012
Сообщений: 27
По умолчанию

Со своей колокольни я понимаю процесс так:
Идет непрерывный поток чтения из порта и записи в файл.
Буфер заполняется меньше, чем на 100 %. Если я запишу
Код:
WriteFile(COMport, bufwr, strlen(bufwr), Х, &overlappedwr);
где Х -некоторое число, что незаполненные ячейки буфера сбросятся в файл как нули. Подогнать размер буфера под 100%-е заполнение не получается.
Функция strlen позволяла определить фактическое число байт. Однако она игнорирует байты 0х00.
Если от нее отказаться, то как еще можно проконтролировать фактическое число байт в буфере?
Использовать comstat.cbInQue?
bedouin вне форума Ответить с цитированием
Старый 31.05.2013, 20:02   #35
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Кто-то же заполняет буфер. Этот ктото вполне может записывать сколько в буфере данных в переменную. При отправлении воспользуйтесь этой переменной. И не обязательно заполнять буффер на 100%, главное знать на сколько он заполнен.
waleri вне форума Ответить с цитированием
Старый 07.06.2013, 09:56   #36
bedouin
Пользователь
 
Регистрация: 05.01.2012
Сообщений: 27
По умолчанию

Нули в буфер, который по сути является массивом элементов типа char, записываются при его инициализации (по крайней мере так пишется в умных книжках).
При получении данных из СОМ порта я начинаю заполнять этот массив, перезаписывая нули на принятые байты.
Проблема в том, что у меня не получается точно определить сколько на самом деле я принял байт.
Программа может проработать несколько часов, а потом "вылететь" с ошибкой:
bedouin вне форума Ответить с цитированием
Старый 07.06.2013, 13:33   #37
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Вот когда добавляете ваши байты в масив, тогда и обновляйте счетчик - так всегда будете знать сколько у вас в массиве данных. Только когда обработаете данные не забудьте обнулить счетчик и начинайте писать в начало буфера.

У вас на баге - offset 0xCCCCCCCC - похоже на неинициализированный указатель. Просмотрите все переменные а еще лучше - включите все warnings компилятора.
waleri вне форума Ответить с цитированием
Старый 01.07.2013, 19:09   #38
bedouin
Пользователь
 
Регистрация: 05.01.2012
Сообщений: 27
По умолчанию

Похоже, что ларчик просто открывался.
Когда экспериментировал со считыванием данных (подстраивался под длину кадра данных), уменьшил размер входного буфера. А вернуть забыл.
После того, как восстановил, гонял прогу несколько недель. Подобных глюков больше не наблюдалось.
bedouin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
расшифровка данных, принятых с COM-порта IIUH Общие вопросы Delphi 25 12.04.2021 14:05
отправка/принятие данных с порта. romank26 Win Api 1 26.03.2012 12:51
Считка данных по-битно из COM порта Terran Общие вопросы Delphi 3 23.11.2011 04:19
Чтение данных с COM порта 232 Dimitr_88 Общие вопросы C/C++ 10 03.09.2010 10:39
Приём данных с com порта kyc0k Помощь студентам 3 28.03.2008 15:04