|
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 21
|
|
Программирование Com порта в Microsoft Visual Studio 9.0 C++07.12.2010, 13:11. Показов 52205. Ответов 84
Метки нет (Все метки)
Всем привет!
Имеется микроконтроллер AVR ATmega128, на борту которого имеется UART. Требуется написать приложение для Win32 принимающее с МК по RS-232 информацию. Интерфейс 3-х проводной. TxD, RxD и GND. Подключение ПК к МК осуществляется через виртуальный COM8 порт, тоесть через преобразователь USB в COM. В МК зашита программа тупого посыла символа "$" в цикле. Все работает прекрасно(данные приходят). Проверял программой Terminal v1.9b Имеется куча примеров, но не один не работает, нет опыта в программировании на C++. То отсутствует какая то библиотека, то непонятная ошибка. Я понимаю что это просто для знающего, но увы я только знакомлюсь с языком Microsoft Visual Studio 9.0 C++. если на нем этого сделать не возможно, посоветуйте тот на котором это возможно. Подскажите с чего начать, как инициализировать порт, как подключиться, как получить байт? Да, кол-во получаемых байтов неизвестно, точнее пока оно бесконечно. Для начала хотелось бы чтобы программа тупо принимала все что передается в порт и выводила на экран. Добавлено через 20 минут Кто нибудь... помогите подключить C++ к внешнему устройству!!!!
0
|
|
| 07.12.2010, 13:11 | |
|
Ответы с готовыми решениями:
84
Отличие между Microsoft Developer Studio и Microsoft Visual Studio? Как с сайта Microsoft скачать Microsoft Visual Studio 2005 Express Edition? Вылетает Visual Studio 2008 из-за системы управления версиями Microsoft Visual SourceSafe. |
|
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 21
|
||||
| 28.02.2011, 08:32 [ТС] | ||||
|
Добрый вечер Bedouin! (раз уж вы заходите по вечерам)))
- Для редактирования создаваемых элементов окна используй функцию OnCreate. В ней происходит создание всего что ты видишь на форме, и изменить что либо можешь только в ней. По сути Sudoki сделал второе. Он отделил работу с сом портом в отдельный файл и оформил это как класс. То же само можешь сделать и ты. Только ты должен знать как написать свой класс. Мне помогал и помогает Sudoki. Он же дал мне книжку замечательную, если изявишь желание, то я с тобой ей подклюсь. Удачи тебе Bedouin! Если где что не так написал, Sudoki поправит!
1
|
||||
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|
| 28.02.2011, 10:00 | |
|
Доброе утро всем!
Наконец-то удалось зайти утром, а то в основном приходится работать (вернее подрабатывать) по вечерам. Большое спасибо, Aspiring, за исчерпывающий ответ. Предлагаю в дальнейшем (если вы конечно не против) перейти на ты .Если можно, то поделись, пожалуйста, книжкой. Было бы очень интересно ее почитать. А то, по правде говоря, по многим вопросам вакуум. По поводу создания формы хотел бы все-таки внести дополнительную ясность. Насколько я помню, в Visual Studio (и в частности, в Visual C++) есть инструментарий (Toolbox) для создания и редактирования форм. И создавать/редактировать формы можно через него. Или я ошибаюсь?
1
|
|
|
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 21
|
||
| 28.02.2011, 10:14 [ТС] | ||
|
Что касается перехода на ты, так это без проблем. Так удобней и проще. Книжку сейчас выложу. Книга замечательная, только сразу предупрежу, книга написана давно, и некоторые конструкции не проходят в текущих версиях языка. Рекомендую установить MSDN. В свое время отмахивался от него, но со временем понял что без него трудней. В этом благодарен Sudoki! В общем ставь MSDN и то что не получается при написании из книги, ищи в MSDN. Ну а что уж и там не найдешь, пиши сюда, мы тебе постараемся помочь!
0
|
||
|
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
|
||
| 28.02.2011, 10:23 | ||
|
На прямую создать форму в нем не получится.
1
|
||
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|
| 01.03.2011, 09:55 | |
|
0
|
|
|
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 21
|
|
| 01.03.2011, 11:04 [ТС] | |
|
Все готово, отправил тебе на мыльницу книжку. Довольно полезная книга. помню что мне Sudoki давал еще одну книжку, но чет не могу ее найти. Но та была по чистому Си. Эта мне кажется полезней. а с самим си по ходу познакомишься, да и по языку полно информации в сети. Так же рекомендую сайт. много полезной информации http://www.firststeps.ru/ Если возникают вопросы, пиши сюда. Мы постараемся помочь!
0
|
|
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|
| 01.03.2011, 11:40 | |
|
Спасибо за книжку, Aspiring!
А на сайте http://www.firststeps.ru/ я и сам пасусь. Действительно, много полезного материала, но иногда возникают вопросы, выходящие за рамки изложенного. Поэтому и иду на форум.
0
|
|
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
||||||||||||||||
| 02.03.2011, 19:27 | ||||||||||||||||
|
Добрый вечер!
Пожалуйста, можете мне объяснить по шагам, как мне создать отдельно класс (*.срр и *.h файлы) и вставить в уже существующий проект для следующей задачи: Есть процедура обрабатывающая побайтно поток, поступающий через СОМ-порт (ее ранее приводил Sudoki):
А что писать в заголовочном файле?
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "m_df" В чем я не прав? Если можно, то объясните мне, пожалуйста, подход создания класса по шагам. А то в литературе вроде бы и все понятно, но когда пытаешься реализовать сам, упираешься в массу ошибок при отладке. Заранее спасибо.
1
|
||||||||||||||||
|
2 / 2 / 0
Регистрация: 07.12.2010
Сообщений: 21
|
|||||||||||||||||||||||||||
| 03.03.2011, 06:08 [ТС] | |||||||||||||||||||||||||||
|
Хороший вопрос!
Сам я честно говоря еще не создал ни одного класса. но прочитал не мало литературы по языку. Чтобы создать класс необходимо сделать 2 файла. один cpp, другой h. имена их вроде должны совпадать. В файле заголовков (h) ты должен написать прототипы всех функций которые описаны в cpp, все константы которые будет использовать cpp файл(сам класс). в общем файл заголовкой содержит описание всех констант, переменных и функций для класса, которые будут доступны только для класса. У тебя есть пример. ComPort.h - файл заголовков ComPort.cpp - сам класс затем просто инклудишь ComPort.h в самом начале файла ComPort.cpp. А затем описываешь все функции которые описал в файле заголовке. давай разберем файл ComPort.h
В языках программирования Си и C++ #pragma once — нестандартная, но широко распространенная препроцессорная директива, разработанная для контроля за тем, чтобы конкретный исходный файл при компиляции подключался строго один раз. То есть, #pragma once применяется для тех же целей, что и include guard, но требует меньше кода и не допускает возможности коллизии имен 2 и 3 это подключение необходимых заголовочных файлов windows.h - для работы с типами windows string - наверное содержит какие то функции по работе с текстом.(главный учитель поправит если что )) 4 указывает на то что мы будем использоать пространство имен std. чтобы постоянно не писать "std::***" едем дальше
самое главное тут:
Сейчас я попробую создать тебе шаблон класса. Тока за правильность не отвечаю, пусть сначала sudoki подтвердит что все нормально, потом юзай на здоровье.
Вообще я пишу драйвер для ЩПТ(эт типа большой УПС на подстанции и электростанции). И этот код был написан sudoki для помощи мне в этом не легком деле. Пользуйся сам и дай другим! Ну где аж очень секретно, то не давай, а остальное.... Ладно удачи. Работа ждет... Добавлено через 5 минут кстати об ошибке!
1
|
|||||||||||||||||||||||||||
|
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
|
|
| 03.03.2011, 09:56 | |
|
Зачем делать класс, для одной структуры DEV_FRAME и функции convBBufToDFrame?
0
|
|
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|
| 03.03.2011, 10:38 | |
|
Aspiring!
Большое спасибо за развернутый ответ. Информация потихоньку начинает в мозгу устаканиваться. И сразу вопрос к Sudoki! Почему для структуры DEV_FRAME и функции convBBufToDFrame нет смысла создавать отдельный класс? И вообще, что такое структура (в данном случае DEV_FRAME)? И как тогда ее лучше реализовать? Включить предложенный ранее код для обработки битов СОМ-порта в текст файла CPort.cpp?
0
|
|
|
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
|
||||||
| 03.03.2011, 11:04 | ||||||
|
приведи кусок программы где объявлен DEV_FRAME
скорее всего это будет так
0
|
||||||
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|||||||||||
| 03.03.2011, 18:38 | |||||||||||
|
Спасибо!
Вечером попробую! Добавлено через 5 часов 47 минут Добрый вечер! Чувствую, что у меня не получается правильно сформулировать вопрос, чего я хочу, поэтому не могу приблизиться к конечному результату и ввожу в заблуждение всех остальных. К сообщению я приложил пару файлов, которые входят в общий проект и которые мне надо переделать. Эти файлы отвечают за расшифровку входящего через СОМ-порт потока. Поток состоит из кадров по 32 байта. На данном этапе, чтобы глубоко не зарываться, мне надо сделать выборку байтов, упорядочить их и вставить в форму Edit. Насколько я понимаю,в файле СPort.cpp за вывод данных в форму Edit отвечает фрагмент:
объем входных данных - BufferCount; текст, выводимый в поле Edit - text. В тексте исходника обработка кадра реализована следующим образом:
Заменить переменную исходного файла buf[] на Buffer[]?
0
|
|||||||||||
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|
| 03.03.2011, 18:41 | |
|
Что-то с вложениями с первого раза не получилось
0
|
|
|
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
|
||||||
| 03.03.2011, 21:17 | ||||||
|
Вот кусок кода который делает выборку кадров из массива байт Buffer.
Также обрабатывает потом кадр с помощью твоего класса. Класс CWorkCtrl менять не надо.
1
|
||||||
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|
| 03.03.2011, 21:43 | |
|
ОЧЕНЬ БОЛЬШОЕ СПАСИБО, Sudoki, за информацию!
Единственный вопрос, я вижу, что мы добавляем в проект файл WorkCtrl.h. А файл WorkCtrl.cpp создавать не надо? За все "отвечает" файл CPort.cpp?
0
|
|
|
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
|
|||||
| 03.03.2011, 22:26 | |||||
За работу с самим портом отвечают файлы ComPort.h ComPort.cpp Добавлено через 7 минут Это просто пример, как реализовать класс для работы с последовательным портом. В нем много чего нет. Некоторые настройки порта задаются жестко. Нет нормальной обработки ошибок. Использовать его все равно можно. )) Добавлено через 1 минуту workCtrl.convBBufToDFrame(buf_frame, workCtrl.m_dfCurFrame); А то выдаст ошибку компиляции
1
|
|||||
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|
| 04.03.2011, 19:04 | |
|
Добрый день!
Продолжаю воевать с проектом. Создал файлы WorkCtrl.h и WorkCtrl.срр. Присоединил их к проекту. То что получилось, прилагаю. Однако при компиляции повылазила масса ошибок. Часть устранил, однако 9 штук осталось. Лог файл с ошибками привожу ниже: ------ Построение начато: проект: CPort, Конфигурация: Debug Win32 ------ Компиляция... CPort.cpp d:\andrey\downloads\comport\cport.cpp(25 5) : error C2181: недопустимый else без парного if d:\andrey\downloads\comport\cport.cpp(25 8) : error C2044: недопустимый continue d:\andrey\downloads\comport\cport.cpp(26 0) : error C2065: i: необъявленный идентификатор d:\andrey\downloads\comport\cport.cpp(26 6) : error C2065: m_dfCurFrame: необъявленный идентификатор WorkCtrl.cpp d:\andrey\downloads\comport\workctrl.cpp (17) : warning C4091: typedef : пропускается слева от 'DEV_FRAME', когда ни одна переменная не объявлена d:\andrey\downloads\comport\workctrl.cpp (20) : error C2143: синтаксическая ошибка: отсутствие ";" перед "." d:\andrey\downloads\comport\workctrl.cpp (20) : error C2182: workCtrl: недопустимое использование типа "void" d:\andrey\downloads\comport\workctrl.cpp (20) : error C2371: workCtrl: переопределение; различные базовые типы d:\andrey\downloads\comport\workctrl.cpp (11): см. объявление 'workCtrl' d:\andrey\downloads\comport\workctrl.cpp (21) : error C2143: синтаксическая ошибка: отсутствие ";" перед "{" d:\andrey\downloads\comport\workctrl.cpp (21) : error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа) Создание кода... Журнал построения был сохранен в "file://d:\Andrey\Downloads\ComPort\Debug\BuildL og.htm" CPort - ошибок 9, предупреждений 1 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== Как я понимаю, главная ошибка, это неправильное определение функции. Sudoki, подскажи, в каком направлении копать. В чем я ошибаюсь? Единственная просьба, не исправляй за меня ничего. Очень хочется до всего дойти самому. Заранее спасибо.
0
|
|
|
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
|
||||
| 04.03.2011, 22:34 | ||||
|
Добавлено через 1 минуту Добавлено через 32 секунды Добавлено через 1 минуту typedef struct DEV_FRAME; Почитай про typedef в любом справочнике Добавлено через 39 секунд void workCtrl.convBBufToDFrame(buf_frame, workCtrl.m_dfCurFrame) Это не правильно Добавлено через 4 минуты Программирование Com порта в Microsoft Visual Studio 9.0 C++ В этом посте был класс зачем что то еще выдумывать? Добавлено через 40 секунд CWorkCtrl класс не годиться Добавлено через 2 минуты В том виде в каком он написан в выложенном файле
1
|
||||
|
2 / 2 / 0
Регистрация: 07.02.2011
Сообщений: 25
|
|
| 10.03.2011, 10:10 | |
|
Добрый день, Sudiki!
Давай пройдем по моим ошибкам еще раз. Главная для меня сложность - это понимание класса (что это такое). Насколько я понял из литературы, новый класс - это по сути два файла: *.h и *.cpp. В первом из них я глобально определяю переменные, а во втором - уже более детально "разжевываю" что к чему и почему, т.е. расписываю работу с байтами входного потока. Класс, который ты расписал, приведен в одном листинге. Это и вызывает у меня ступор: а почему один файл? Ведь в учебниках говорится о двух: *.h и *.cpp! Отсюда и недопонимание. Поэтому я и начинаю "городить огород", дерибаня исходный файл класса на два файла. Если не тяжело, прокомментируй, пожалуйста, как понимать созданный файл. Что в нем есть что? Или где лучше почитать, а то у меня, к сожалению, сложилось такое впечатление о классах
0
|
|
| 10.03.2011, 10:10 | |
|
Microsoft Visual Studio microsoft visual studio 2005 Microsoft Visual Studio 2010 Microsoft visual studio 2010 Чем отличается Microsoft Visual C++ 2010 Express от Visual Studio 2010 Ultimate Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне.
Это уже новая модель, модель сукцессии грибной.
потоки фосфора, азота. Углерода.
5 видов организмов.
Я даже. . .
|
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ
Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
|
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем
Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026
. . .
|
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки
План доработки модели динамики микоризных симбиозов (EcM с гистерезисом)
Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
|
|
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
|
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
|
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание:
как одно здание порождает конфликты требований,
которые никто не планировал
Материалы для обсуждения с МГСУ · 2026
Рисунки внутри приложенного ворд файла.
Что за. . .
|
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|