Перейти к содержанию
    

Управление прибором на AVR через COM-port компьютера

Пробую создать программу для управления прибором с помощью ПК. Програму пишу в среде C++ Builder 6. Подключил библиотеку ComPort. Собственно по ней и вопрос. А в теме по AVR потому что девайс на AVR и еще потому что не знаю куда еще можно. Сам вопрос:

Вынося на поле Form1 любую из кнопок-компонент при попытке компиляции получаю для строки

/* Exception.CreateRes */ inline __fastcall EComPort(int Ident)/* overload */ : Sysutils::Exception(Ident) { }

сообщение об ошибке: [C++ Error] CPort.hpp(683): E2238 Multiple declaration for '_fastcall EComPort::EComPort(int)'

а для строки: __fastcall EComPort(int ACode);

сообщение об ошибке:[C++ Error] CPort.hpp(675): E2344 Earlier declaration of '_fastcall EComPort::EComPort(int)'

 

также для строки: typedef TBitmap TLedBitmap;

сообщение об ошибке: [C++ Error] CPortCtl.hpp(242): E2015 Ambiguity between 'TBitmap' and 'Windows::TBitmap'

 

Это у всех так? Помогите разобраться. Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам вопрос: вынося на поле Form1 любую из кнопок-компонент при попытке компиляции получаю для строки

сообщение об ошибке: [C++ Error] CPort.hpp(683): E2238 Multiple declaration for '_fastcall EComPort::EComPort(int)'

Это у всех так? Помогите разобраться. Заранее спасибо!

У вас же всё написано: Multiple declaration, значит несколько раз объявили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это у всех так? Помогите разобраться. Заранее спасибо!

С компонентом не работал, а по работе с портом - все довольно просто - точно также как с файлом.

Почитайте тут:

 

http://bcbsql.narod.ru/pub/rabcomm.htm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все эти компоненты для порта от лукавого...

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

Так что пишите сразу на WinAPI.

 

В дополнение, чтобы предостеречь от ошибок:

Работа с портом(ReadFile, WriteFile) должна осуществляться только в том потоке, который открыл этот порт (CreateFile).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работа с портом(ReadFile, WriteFile) должна осуществляться только в том потоке, который открыл этот порт (CreateFile).

Это еще почему?

Можно открыть в одном потоке, а читать в другом.

 

Единственное, что нельзя делать - одновременно пытаться работать в двух разных потоках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это у всех так? Помогите разобраться. Заранее спасибо!

Если у вас установлен компонент от Dejan (TComPort)

то в ридми файле, там написано, что нужно закомментировать пару строчек в заголовочниках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробую создать программу для управления прибором с помощью ПК. Програму пишу в среде C++ Builder 6. Подключил библиотеку ComPort. Собственно по ней и вопрос. А в теме по AVR потому что девайс на AVR и еще потому что не знаю куда еще можно. Сам вопрос:

Вынося на поле Form1 любую из кнопок-компонент при попытке компиляции получаю для строки

/* Exception.CreateRes */ inline __fastcall EComPort(int Ident)/* overload */ : Sysutils::Exception(Ident) { }

сообщение об ошибке: [C++ Error] CPort.hpp(683): E2238 Multiple declaration for '_fastcall EComPort::EComPort(int)'

а для строки: __fastcall EComPort(int ACode);

сообщение об ошибке:[C++ Error] CPort.hpp(675): E2344 Earlier declaration of '_fastcall EComPort::EComPort(int)'

 

также для строки: typedef TBitmap TLedBitmap;

сообщение об ошибке: [C++ Error] CPortCtl.hpp(242): E2015 Ambiguity between 'TBitmap' and 'Windows::TBitmap'

 

Это у всех так? Помогите разобраться. Заранее спасибо!

 

Зайдите на http://www.pcports.ru/

Может там найдете что нибудь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы, скорее всего, подключили инклюдом в нескольких файлах, а потом их подключили и.т.д. В итоге в одном самом главном :) файле получилось несколько раз подключен один и тот же файл с ком портом вашим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у вас установлен компонент от Dejan (TComPort)

то в ридми файле, там написано, что нужно закомментировать пару строчек в заголовочниках.

Не нашел где это написано... подскажите плз!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуй этот класс. Я его часто использую с AVR в Visual C++ 6.0 - все нормально работает.

serial.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

использую с AVR в Visual C++ 6.0

интересует для C++ Builder 6.0

 

7. C++ Builder Notes

------------------------------------------------------------------------------

The .hpp file C++ Builder creates for cport.pas will have a bug in it.

The first time you compile a project, you will get one or two duplicate

definitions within the EComPort exception class. It seems to be safe to

delete or comment out the duplicates.

 

Also, the CPortCtl.HPP may have a bug in it. If you get an error about

the following being ambiguous;

 

typedef TBitmap TLedBitmap;

 

Change it to:

 

typedef Graphics::TBitmap TLedBitmap;

 

If someone knows how to fix these more cleanly, please post what you

find to the CPort Forum so that we can incorporate your findings in

future revisions.

 

Если четно, то с английским не настолько хорошо чтоб быть уверенным в правильности своих действий. Если можно, то подскажите что и как. Спасибо!

 

Я закомментировал строчки, на которые указал компилятор. Начал компилировать... теперь надо как-то проверить работоспособность...

Изменено пользователем smk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я проверял-работает

 

Разбираюсь с хелпом. А есть ли у Вас какойнить примерчик: обнаружить все порты-открыть порт-отправить пару байт-принять пару байт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это еще почему?

Можно открыть в одном потоке, а читать в другом.

 

Единственное, что нельзя делать - одновременно пытаться работать в двух разных потоках.

Можно работать не только в разных потоках, но и в разных процессах при применении некоторой эквилибристики. Естественно, механизмы синхронизации никто не отменял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...