|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
||||||
Подключить устройство через COM-порт и отправить на него данные31.03.2010, 17:05. Показов 56628. Ответов 38
Метки нет (Все метки)
Всем доброго времени суток.
Потребовалось подключить устройство через COM-порт, и чтобы программа считывала и отправляла не него данные. Начал разбираться в теме и нашел примерно такой код:
ошибки все из разряда "missing storage-class or type specifiers" и "missing ';' before identifier" что-то у меня совсем нет идей как с этим бороться. Подскажите пожалуйста куда копать. Спасибо!
1
|
||||||
| 31.03.2010, 17:05 | |
|
Ответы с готовыми решениями:
38
Подскажите как отправить пакет 10 байт на устройство через com порт Можно ли подключить USB устройство через COM-порт?
|
|
|
|
| 31.03.2010, 17:08 | |
|
http://msdn.microsoft.com/en-u... 85%29.aspx
слово public: убрать надо бы
0
|
|
|
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
|
|
| 31.03.2010, 17:10 | |
|
если мне память не изменяет, работа с COM портом в ОС Windows осуществляется точно так же как чтение и запись в файл с именем "COMn", где n - номер порта. (сильно ногами не пинать, могу и ошибаться)
0
|
|
|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
|||||||
| 31.03.2010, 17:18 [ТС] | |||||||
я с таким раньше не сталкивался, поэтому не очень знаю что делать.. функции из этого файла использовать придется все равно, а если редактировать файл, то тогда как?
0
|
|||||||
|
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
|
|
| 31.03.2010, 17:30 | |
|
если честно, то да же и не подскажу наверное.... я больше по части C#, это только последний месяц на С++ пишу, вот и хожу по форуму да и пытаюсь вспоминать как и что на плюсах
0
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 31.03.2010, 22:46 | |
|
GennDALF, код (хотя и не твой) - честно говоря, очень и очень слабый, на уровне студента-троечника, с массой ошибок. Рекомендую поискать в Сети другие примеры, их хватает. А этот - отправить прямиком в Корзину.
0
|
|
|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
|
| 31.03.2010, 23:39 [ТС] | |
|
CheshireCat, я не программист по специальности, а занимаюсь этим по необходимости и на весьма любительском уровне. Так что вместо того чтобы тыкать носом (ах какой плохой код!) и отправлять в Сеть, лучше бы указал на ошибки и пути их исправления. Я, заметь, ни разу не попросил написать мне готовый код, я лишь прошу посоветовать, на что обратить внимание и что исправить.
Какой толк от вас, профессионалов, если вы чуть что "поищи в Сети"??
0
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
| 01.04.2010, 10:36 | ||||||
1
|
||||||
|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
||||||
| 01.04.2010, 22:40 [ТС] | ||||||
|
Спасибо, так значительно лучше! ))
насчет оконного приложения вы правы, код взят из книги Фленова "С++ глазами хакера", он там приводит пример с оконным приложением.. я его сперва просто переписал и попытался скомпилировать в таком виде, а тут эта ошибка с хэдером.. про то, что должно быть <windows.h> я уже нашел и потом сразу исправил большинство указанных вами ошибок и опечаток.. между открытием и закрытием я запихнул функцию определения типа порта и поэтому там все нормально. вообще программа приобрела такой вид:
как можно дать потоку сигнал? и зачем?
1
|
||||||
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
| 02.04.2010, 11:26 | ||||||
|
Хмм.... Я бы сказал, что книга Михаила Фленова "С++ глазами хакера" - не из лучших. Листинги содержат массу грубых ошибок.
Так, теперь о TerminateThread. Применять этот способ завершения потока в "мирных условиях" нельзя - его применение оправдано только от безысходности, в исключительной ситуации, когда все другие способы завершить поток оказались безуспешными. Причина состоит в том, что при вызове TerminateThread поток убивается решительно и немедленно, - а достоверно неизвестно, какой код он в этот момент исполняет (а может случиться, что и в глубине какой-нибудь системной функции), - и, разумеется, все переменные, которые затрагивает его исполнение, остаются в несогласованном состоянии, не вызываются деструкторы локальных объектов и т.п. - короче, система остается в потенциально нестабильном состоянии. Если тебе повезет, то ничего фатального не случится. Если же не повезет.... значит, не повезет :-) Более грамотный способ - просигнализировать потоку о необходимости завершения, и дождаться его нормального завершения. Это можно сделать либо с помощью объектов синхронизации (пример - событие, event), либо с помощью переменных, имеющих булевское значение (возможно, придется применять Interlocked-функции). Например, так:
1
|
||||||
|
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
|
|
| 02.04.2010, 13:33 | |
|
Работа с параллельными портами - это не для любительского уровня, а для специалистов. Много ещё подводных комней, подобно тому, что описал CheshireCat.
0
|
|
|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
||||||
| 02.04.2010, 21:24 [ТС] | ||||||
|
так, хорошо.. На понятийном уровне все замечательно и вызывать TerminateThread() мы, так и быть, не будем..
но только вот дождаться завершения не получается. На вызове WaitForSingleObject() прога либо виснет, либо еще как-то.
или от порта здесь ничего не зависит?
0
|
||||||
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 02.04.2010, 21:55 | |
|
Полный код приведи. Потоковая функция событие проверяет? Как именно? Если WaitFor... виснет - значит, поток не завершился. Вот и любопытно знать, почему.
0
|
|
|
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
|
|
| 02.04.2010, 22:13 | |
|
В функцию WaitForSingleObject() передаётся параметр INFINITE. Вот она и ждёт как сказано - неопределённое время (подвисает). Верно бы было сделать так: определить крайний интервал, например 6 секунд и ждать его. По результу определить, из-за чего завершилась данная функция и если из-за того, что вышел интервал - терминайтить тред и написать об ошибке.
0
|
|
|
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
|
|
| 02.04.2010, 22:23 | |
|
Airhand, верно сделать так, чтобы дочерний поток завершался за 10ms
0
|
|
|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
||||||
| 03.04.2010, 06:27 [ТС] | ||||||
0
|
||||||
|
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
|
||
| 03.04.2010, 12:52 | ||
|
0
|
||
|
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
|
|
| 03.04.2010, 13:57 | |
|
Airhand, ты просто няшка ^___^
Добавлено через 1 минуту а я говорю о том, что с большой вероятностью неправильно написан код дочернего потока и ошибку надо искать там, чтобы он не зависал в принципе.
0
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 03.04.2010, 18:47 | |
|
dwResult == 258 - это WAIT_TIMEOUT (можно посмотреть в winerror.h) - а значит, потоковая фунция не завершается за указанное время. Естественно, если стоит INFINITE - она не завершается никогда. Согласен с мнением Lolcht0 - код потоковой функции в студию!
0
|
|
|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
|
| 03.04.2010, 19:48 [ТС] | |
|
эхм.. вообще-то я выложил весь код, который в деле.. )
функция write_data() еще не подключена, и между open_port() и close_port() стоит только check_port() ее код я тоже выкладывал..
0
|
|
| 03.04.2010, 19:48 | |
|
Помогаю со студенческими работами здесь
20
Отправить данные на открытый порт Отправить данные на открытый порт Отправить данные на COM порт и вывести ответ Принять данные с одного порта, распарсить и отправить на другой порт Удалённое устройство или ресурс не принимает подключения через порт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|