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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2016, 13:59   #1
Sintez42
Новичок
Джуниор
 
Регистрация: 26.05.2016
Сообщений: 1
По умолчанию Вопросы касательно COM порта. Программирование под линукс.

Здравствуйте, передо мной стоит задача - отправить команду с Компьютера на устройство через COM порт.

Компьютер Rasberry Pi3.
Операционная система предполагается линукс.

Программа которую мне предстоит написать, должна открывать COM порт и отправлять команду, затем читать данные из COM порта.

Вопрос 1.
В HyperTerminal есть функция Send txt. Как она работает? Компьютер отправляет текстовый файл устройству или же компьютер отправляет текст из этого файла?

Вопрос 2.
Если я напишу программу на C++ в Visual Studio, смогу ли я скомпилировать её для работы на Rasberry Pi3, который в свою очередь будет на линуксе?

Где можно найти исходники: открыть порт, написать в порт, прочитать из порта. Для С++ в Visual Studio.

Код:
// SensorWebPC.cpp
// Pass the port name in the command line - e.g. sensorwebpc comm2
#include "stdafx.h"
#include <windows.h>

void PrintError( LPCSTR str)
{
LPVOID lpMessageBuffer;
int error = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //The user default language
(LPTSTR) &lpMessageBuffer,
0,
NULL
);
printf("%s: (%d) %s\n\n",str,error,lpMessageBuffer);
LocalFree( lpMessageBuffer );
}

int main(int argc, char* argv[])
{
// open port for I/O
HANDLE h = CreateFile(argv[1],
GENERIC_READ|GENERIC_WRITE,
0,NULL,
OPEN_EXISTING,0,NULL);

if(h == INVALID_HANDLE_VALUE) {
PrintError("E012_Failed to open port");
} else {
// set timeouts
COMMTIMEOUTS cto = { 1, 100, 1000, 0, 0 };
DCB dcb;
if(!SetCommTimeouts(h,&cto))
PrintError("E013_SetCommTimeouts failed");

// set DCB
memset(&dcb,0,sizeof(dcb));
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = 19200;
dcb.fBinary = 1;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
// dcb.fOutxCtsFlow = 1;
// dcb.fRtsControl = DTR_CONTROL_HANDSHAKE;

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

if(!SetCommState(h,&dcb))
PrintError("E014_SetCommState failed");

char buf[7];
DWORD read = 0;
DWORD write=1; // Number of bytes to write to serial port
buf[0] = 72; // Decmial value to write to serial port
WriteFile(h,buf,write,&write,NULL); // write is updated with the number of bytes written

ReadFile(h,buf,sizeof(buf),&read,NULL); // read is updated with the number of bytes read
DWORD i;
for (i=0; i<read; i++)
printf("%i ", (unsigned char)buf[i]);

CloseHandle(h);
}

return 0;
}
В данном коде сразу же ошибка #include "stdafx.h", не удается открыть источник файл "stdafx.h"
Sintez42 вне форума Ответить с цитированием
Старый 26.05.2016, 14:26   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Бросьте каку. Это чистый ВИНАПИ.

Цитата:
Как она работает? Компьютер отправляет текстовый файл устройству или же компьютер отправляет текст из этого файла?
Отправляет содержимое. Для отправки файлов поверх ком есть свои протоколы.

Цитата:
Если я напишу программу на C++ в Visual Studio, смогу ли я скомпилировать её для работы на Rasberry Pi3, который в свою очередь будет на линуксе?
Нет. Если конечно не будетt использовать кроссплатформенную библиотеку и компилировать как-то прикрученными кросскомпиляторами.

Цитата:
Где можно найти исходники: открыть порт, написать в порт, прочитать из порта. Для С++ в Visual Studio.
В гугле на каждом шагу. В МСДН и т.д.

Цитата:
В данном коде сразу же ошибка #include "stdafx.h", не удается открыть источник файл "stdafx.h"
Включите использование предкомпиленных заголовков или уберите строчку нафик.

Последний раз редактировалось p51x; 26.05.2016 в 14:48.
p51x вне форума Ответить с цитированием
Старый 26.05.2016, 15:13   #3
kutani
Форумчанин
 
Регистрация: 23.01.2016
Сообщений: 608
По умолчанию

Цитата:
должна открывать COM порт и отправлять команду
TLazSerial: serial port component for Lazarus (windows and linux).
kutani вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ портативный под винду и линукс mc13 Общие вопросы C/C++ 23 04.01.2015 12:52
удаленный фильтр под линукс Tiva Фриланс 0 17.09.2012 15:01
заставка под линукс Eyxeniy Qt и кроссплатформенное программирование С/С++ 0 18.05.2011 20:10
асм под линукс pufystyj Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 14.02.2011 10:22