|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
||||||
Подключить устройство через COM-порт и отправить на него данные31.03.2010, 17:05. Показов 56350. Ответов 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 порт и вывести ответ Принять данные с одного порта, распарсить и отправить на другой порт Удалённое устройство или ресурс не принимает подключения через порт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|