|
15 / 14 / 2
Регистрация: 24.09.2009
Сообщений: 68
|
||||||
Подключить устройство через COM-порт и отправить на него данные31.03.2010, 17:05. Показов 56485. Ответов 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 порт и вывести ответ Принять данные с одного порта, распарсить и отправить на другой порт Удалённое устройство или ресурс не принимает подключения через порт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|