|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.12.2012, 12:22 | #31 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
Чего тут непонятного - поищите в документации CString описание метода Format...
|
31.05.2013, 13:06 | #32 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
Может быть глупый, но тем не менее вопрос:
В исходнике программы для записи используется функция Код:
Но та же функция strlen игнорирует нулевые байты. А они мне нужны. Можно, конечно, задать фиксированный объем передаваемых байт. Но в этом случае незаполненные ячейки будут передаваться нулями (лишние нули). Как тогда лучше поступить? Чем заменить strlen? |
31.05.2013, 16:19 | #33 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
Ну вы же както добавляете эти нули - ведите учет сколько данных в буфере и просто ставьте размер буфера. Тем более, что явно у вас двоичный протокол, значит где-то должен быть отправлен размер, чтоб принимающая сторона смогла собрать данные правильно.
|
31.05.2013, 18:52 | #34 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
Со своей колокольни я понимаю процесс так:
Идет непрерывный поток чтения из порта и записи в файл. Буфер заполняется меньше, чем на 100 %. Если я запишу Код:
Функция strlen позволяла определить фактическое число байт. Однако она игнорирует байты 0х00. Если от нее отказаться, то как еще можно проконтролировать фактическое число байт в буфере? Использовать comstat.cbInQue? |
31.05.2013, 20:02 | #35 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
Кто-то же заполняет буфер. Этот ктото вполне может записывать сколько в буфере данных в переменную. При отправлении воспользуйтесь этой переменной. И не обязательно заполнять буффер на 100%, главное знать на сколько он заполнен.
|
07.06.2013, 09:56 | #36 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
Нули в буфер, который по сути является массивом элементов типа char, записываются при его инициализации (по крайней мере так пишется в умных книжках).
При получении данных из СОМ порта я начинаю заполнять этот массив, перезаписывая нули на принятые байты. Проблема в том, что у меня не получается точно определить сколько на самом деле я принял байт. Программа может проработать несколько часов, а потом "вылететь" с ошибкой: |
07.06.2013, 13:33 | #37 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
Вот когда добавляете ваши байты в масив, тогда и обновляйте счетчик - так всегда будете знать сколько у вас в массиве данных. Только когда обработаете данные не забудьте обнулить счетчик и начинайте писать в начало буфера.
У вас на баге - offset 0xCCCCCCCC - похоже на неинициализированный указатель. Просмотрите все переменные а еще лучше - включите все warnings компилятора. |
01.07.2013, 19:09 | #38 |
Пользователь
Регистрация: 05.01.2012
Сообщений: 27
|
Похоже, что ларчик просто открывался.
Когда экспериментировал со считыванием данных (подстраивался под длину кадра данных), уменьшил размер входного буфера. А вернуть забыл. После того, как восстановил, гонял прогу несколько недель. Подобных глюков больше не наблюдалось. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
расшифровка данных, принятых с 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 |