Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / com-port, что не так, и код можно покритиковать / 4 сообщений из 4, страница 1 из 1
21.12.2012, 16:48
    #38088522
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
com-port, что не так, и код можно покритиковать
Всем привет, ниже привожу листинг программы считывания 1 байта с ком-порта
В аттаче прикрепил файл, там вопрос

автор#include <windows.h>
#include <stdio.h>
#include <iostream.h>


int main()
{


HANDLE Port;
_COMMTIMEOUTS lpCT;
DWORD mask;
DCB dcb;
OVERLAPPED over;




//Открытие порта
Port = CreateFile("COM1",
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if (Port == INVALID_HANDLE_VALUE)
{
cout << "COM Port have not access" << endl;
}


//Конфигурирование порта
GetCommState(Port, &dcb);

cout << "BaudRate:"<< dcb.BaudRate << endl;
cout << "ByteSize:"<< (int)dcb.ByteSize << endl;
cout << "Parity:"<< (int)dcb.Parity << endl;
cout << "StopBits:"<< (int)dcb.StopBits << endl;

dcb.BaudRate = CBR_115200;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;


if (SetCommState(Port, &dcb) == false)
{
cout << "Configuring Error" << endl;
}


//Тайм-ауты
GetCommTimeouts(Port,&lpCT);

lpCT.ReadIntervalTimeout =1000;
lpCT.ReadTotalTimeoutConstant = 200;
lpCT.ReadTotalTimeoutMultiplier = 200;
lpCT.WriteTotalTimeoutConstant = 200;
lpCT.WriteTotalTimeoutMultiplier = 200;

SetCommTimeouts(Port,&lpCT);

//Установка маски
SetCommMask(Port,EV_RXFLAG);
//Очистка порта
FlushFileBuffers(Port);
//Ожидание поступления данных
WaitCommEvent(Port,&mask,&over);

//Прием данных

char buf_in[1];
DWORD bc;

ReadFile(Port,buf_in,1,&bc,NULL);

cout << "Result:" << buf_in << endl;

//Закрытие порта
CloseHandle(Port);

return 0;
}
...
Рейтинг: 0 / 0
21.12.2012, 17:07
    #38088548
sherzod_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
com-port, что не так, и код можно покритиковать
sce,

Ошибка в том что вы читаете один байт из порта, а пытаетесь вывести на экран целую строку (при выводе не указываете сколько символов вывести, а когда не указывается, выводится до встречи 0. В вашем случае, случайно через 5 байт обнаружился 0, а до него весь мусор был выведен, так как массив у вас всего один байт содержит). Это довольно элементарные вещи, читайте учебник.

делайте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
const std::size_t maxsz = 256;
char buf_in[maxsz] = {};
DWORD bc;

ReadFile(Port,buf_in,1,&bc,NULL);

cout << "Result:" << buf_in << endl;
...
...
Рейтинг: 0 / 0
21.12.2012, 17:15
    #38088560
sce
sce
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
com-port, что не так, и код можно покритиковать
sherzod_sce,

Ошибка в том что вы читаете один байт из порта, а пытаетесь вывести на экран целую строку (при выводе не указываете сколько символов вывести, а когда не указывается, выводится до встречи 0. В вашем случае, случайно через 5 байт обнаружился 0, а до него весь мусор был выведен, так как массив у вас всего один байт содержит). Это довольно элементарные вещи, читайте учебник.

делайте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
const std::size_t maxsz = 256;
char buf_in[maxsz] = {};
DWORD bc;

ReadFile(Port,buf_in,1,&bc,NULL);

cout << "Result:" << buf_in << endl;
...


спасибо
сорри, второй день изучаю с++
...
Рейтинг: 0 / 0
10.03.2013, 21:26
    #38179163
wolfgang073
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
com-port, что не так, и код можно покритиковать
Второй день, а уже с
Com порта тырит байты :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / com-port, что не так, и код можно покритиковать / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]