Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 10

ReadFile и WriteFile

08.02.2013, 20:15. Показов 2839. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ком-порт. В нем Tx и Dx c соединены проводом Я отправляю в порт массив байт, а он выдает совсем другие
данные.

C++
1
2
3
4
5
6
7
8
9
10
11
12
 bufferout[0] = 'sss';
     bufferout[1] = 0x6a;
     bufferout[2] = 0x22;
     bufferout[3] = 0x0f;
    WriteFile(hCOM,&bufferout ,sizeof(bufferout),&bc,NULL);
    ReadFile(hCOM,&bufferin,sizeof(bufferin),&cb,NULL);
    for(i=0;i<sizeof(bufferin);i++){
        cout << bufferout[i];
        cout <<" /";
        cout << bufferin[i];
        cout << endl;
    }




Пишет :

s /
j /Ё
" /н
* ,(Две палочки которых нет на клаве)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2013, 20:15
Ответы с готовыми решениями:

Функции win32 CreateFile WriteFile и ReadFile
В общем делаю небольшой проект. Необходимо считать данные из файла. Очевидно, что изначально в него необходимо эти данные записать. Так...

[C] ReadFile/WriteFile
Всем доброго времени суток! Есть вроблема с програмкой ,а именно: Unhandled exception at 0x010b1493 in lab3.exe: 0xC0000005: Access...

ReadFile WriteFile на примере
день добрый есть проект типа напоминания задача сохранять данные в файл при добавлении и считывать их от туда при открытии программы...

11
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.02.2013, 19:04
Tx и Dx c соединены проводом
Возможно, этого недостаточно. Посмотрите здесь: How to Do a Serial Loopback Test http://www.ni.com/white-paper/3450/en

Порт должен быть настроен timeout, baud, parity, databits, stopbits etc. - BuildCommDCB(). Обмен, обычно, идет асинхронно и управляется ивентами - WaitCommEvent(). Посмотрите, например, Remon Spekreijse "CSerialPort".
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
14.02.2013, 22:29
Цитата Сообщение от Shadow_i Посмотреть сообщение
WriteFile(hCOM,&bufferout ,sizeof(bufferout),&bc,NULL);
записать в порт 4 байта
а куда они пойдут???
пока не отошлет 4 байта из функции не выйдет

Цитата Сообщение от Shadow_i Посмотреть сообщение
ReadFile(hCOM,&bufferin,sizeof(bufferin) ,&cb,NULL);
считать 4 байта
а откуда они возьмутся
если у тебя
Цитата Сообщение от Shadow_i Посмотреть сообщение
В нем Tx и Dx c соединены проводом
или ты думаешь что весь массив сидит в проводе и ждет когда его считают
передавай считывай по одному байту
а еще лучше и правильней в разных потоках
один поток на чтение другой на запись

Добавлено через 58 секунд
Цитата Сообщение от gazlan Посмотреть сообщение
Порт должен быть настроен timeout, baud, parity, databits, stopbits etc. - BuildCommDCB().
а как думаешь у одного и того же порта разные настройки?
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.02.2013, 23:06
думаешь у одного и того же порта разные настройки?
:-)

При некоторых значениях параметров он просто не будет работать или работа будет неустойчивой (зависит от железа). В первую очередь, это касается скорости передачи данных.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
14.02.2013, 23:31
Цитата Сообщение от gazlan Посмотреть сообщение
При некоторых значениях параметров
каких?
если порт настроен то у него и при чтении и при записи одна и та же скорость, четность, количество бит
как он может сам с собой незасинхронизироватся?

Добавлено через 56 секунд
Цитата Сообщение от gazlan Посмотреть сообщение
В первую очередь, это касается скорости передачи данных.
порт один и тот же
Цитата Сообщение от Shadow_i Посмотреть сообщение
Есть ком-порт. В нем Tx и Dx c соединены проводом
скорость приема и передачи одна и таже
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.02.2013, 23:45
скорость приема и передачи одна и таже
При условии, что она вообще есть.

Например, с GSM-модемами стабильно работать больше, чем на 19.2, у меня не получалось.

P.S.

Кстати, побайтная передача необязательна - большинство моделей поддерживают внутреннюю очередь на 16 символов.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
14.02.2013, 23:57
Не знаю, поможет ли, 232 под рукой нет, но нашел старый код для 485 (отличий не так много).

C++
1
2
TL16C552 * DUAL ASYCHRONOUS COMMUNICATIONS ELEMENT WITH FIFO
SLLS102B - DECEMBER 1990 - REVISED MARCH 1996
Вложения
Тип файла: rar 485.rar (7.7 Кб, 10 просмотров)
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
15.02.2013, 00:06
Цитата Сообщение от gazlan Посмотреть сообщение
Например, с GSM-модемами стабильно работать больше, чем на 19.2, у меня не получалось.
а это здесь причем?
в твоем примере работают два один со стороны компа другой со стороны модема,и их нужно синхронизировать а У ТС один и тот же порт
Цитата Сообщение от gazlan Посмотреть сообщение
Кстати, побайтная передача необязательна - большинство моделей поддерживают внутреннюю очередь на 16 символов.
ты на прогу то посмотри
Цитата Сообщение от Shadow_i Посмотреть сообщение
WriteFile(hCOM,&bufferout ,sizeof(bufferout),&bc,NULL);
заслать данные в ком порт причем режим записи синхронный
пока не зашлет не выйдет из функции, а куда он их шлет?
и только потом чтение
Цитата Сообщение от Shadow_i Посмотреть сообщение
ReadFile(hCOM,&bufferin,sizeof(bufferin) ,&cb,NULL);
вот если бы тут работал другой порт(например как у тебя модем) то вопросов бы не было
заслали данные в модем и ждем что он нам ответит а здесь один и тот же порт
насчет побайтовой я может тоже не прав
здесь правильное решение многопоточность
один поток главная программа создает поток для чтения( и это поток сидит и ловит данные)
потом создаем поток для записи и как только он начинает слать данные поток для чтения их тут же выхватывает

Добавлено через 6 минут
Цитата Сообщение от gazlan Посмотреть сообщение
но нашел старый код для 485
а где у PC 485??

Цитата Сообщение от gazlan Посмотреть сообщение
отличий не так много
с точки зрения программы их вообще нет
и то и другое последовательный порт
различие в интерфейсе(железе)
232 это токовая петля
485 это диф линия

Добавлено через 15 секунд
Цитата Сообщение от gazlan Посмотреть сообщение
но нашел старый код для 485
а где у PC 485??

Цитата Сообщение от gazlan Посмотреть сообщение
отличий не так много
с точки зрения программы их вообще нет
и то и другое последовательный порт
различие в интерфейсе(железе)
232 это токовая петля
485 это диф линия
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.02.2013, 00:09
здесь правильное решение многопоточность
Точнее, асинхронный режим. Советую посмотреть, как это сделано у Remon Spekreijse (там несколько ошибок в коде, но сути это не меняет). Код под Win32.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
15.02.2013, 01:32
Цитата Сообщение от gazlan Посмотреть сообщение
Советую посмотреть, как это сделано у Remon Spekreijse
Где посмотреть?
ссылку плиз
Цитата Сообщение от gazlan Посмотреть сообщение
Точнее, асинхронный режим.
асинхронный режим чего?
порта?
или функции WriteFile?
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.02.2013, 02:28
Цитата Сообщение от ValeryS Посмотреть сообщение
Где посмотреть?
В Google, как обычно.

Remon Spekreijse wrote the classic serial-type serialport the latest version 1.2
http://www.codeforge.com/article/22611

Вероятно, эта версия новее той, что я когда-то смотрел.

К слову, при поиске по "Remon Spekreijse" выдаются ссылки и на более новые статьи, использующие или цитирующие его код. Возможно, и там найдется что-то интересное по теме.



асинхронный режим чего? порта? или функции WriteFile?
Порта. Задается при открытии (чтение/запись происходят по ивентам).
ReadFile/WriteFile будут совместно использовать OVERLAPPED structure:

C++
1
2
3
4
5
6
7
8
9
10
11
12
   
   // get a handle to the port
   m_hComm = CreateFile
   (
      pPortName,                       // communication port string (COMX)
      GENERIC_READ | GENERIC_WRITE,    // read/write types
      0,                               // comm devices must be opened with exclusive access
      NULL,                            // no security attributes
      OPEN_EXISTING,                   // comm devices must use OPEN_EXISTING
      FILE_FLAG_OVERLAPPED,            // Async I/O
      0                                // template must be 0 for comm devices
   );
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.02.2013, 02:43
Гм. Извиняюсь. Оказывается, codeforge.com не то место, откуда можно что-то скачать.

Вот другая ссылка, и, на всякий случай, сам файл (вероятно, более старой версии).

http://www.codeguru.com/cpp/i-... l-port.htm
Вложения
Тип файла: zip serialport_demo.zip (65.5 Кб, 8 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2013, 02:43
Помогаю со студенческими работами здесь

Createfile, readfile, writefile
Файл 4 создаётся,но данные из файла 1 не переносятся.Почему? HANDLE myFile; HANDLE myFile2; DWORD buf; char asd; myFile =...

Параметры функций ReadFile и WriteFile
Приветствую. Использую данные функции при работе с COM портом. При использовании проверяю как отработала сама функция (не вернула ли...

ReadFile WriteFile для устройства
В коллаут драйвере реализованы Read/Write диспатчеры. В юзерском приложении открываю девайс и в одном потоке читаю из устройства нон...

Копирование файла кусками по 64КБ, используя ReadFile и WriteFile
Здравствуйте, уважаемые форумчане! На вас последняя надежда! Задача такая: написать программу для копирования файлов кусками по 64кб в...

WriteFile и ReadFile: Suspicious pointer conversion in function main
Всем привет. Знакомлюсь с WinAPI и потоками, но чет не заладилось... Ругается на WriteFile и ReadFile #include &lt;stdio.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru