Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с COM портом - C++
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт мар 29, 2024 01:19:20

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 55 ]    , , 3
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 10:33:52 
Это не хвост, это антенна
Аватар пользователя

Карма: 3
Рейтинг сообщений: 76
Зарегистрирован: Сб июн 09, 2012 02:14:11
Сообщений: 1337
Откуда: ХАРЬКОВ
Рейтинг сообщения: 0
Myp3ik писал(а):
тогда WaitForSingleObject не работает.



мне это не грозит. у меня все работает.

а поточный вариант жрет проц на 50 процентов . вероятно из-за цикла.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 11:20:32 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
Sleep(1) в цикле и загрузка процессора минимальная.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 13:51:19 
Это не хвост, это антенна
Аватар пользователя

Карма: 3
Рейтинг сообщений: 76
Зарегистрирован: Сб июн 09, 2012 02:14:11
Сообщений: 1337
Откуда: ХАРЬКОВ
Рейтинг сообщения: 0
Мурик писал(а):
Sleep(1) в цикле и загрузка процессора минимальная.


с какой целью ?

чем смущает не поточная версия ?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 14:05:35 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
СЦБист писал(а):
с какой целью ?
СЦБист писал(а):
жрет проц на 50 процентов . вероятно из-за цикла.


СЦБист писал(а):
чем смущает не поточная версия
Ничем. :) Я только предложил простой способ избавится от загрузки процессора. :)


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 16:08:54 
Это не хвост, это антенна
Аватар пользователя

Карма: 3
Рейтинг сообщений: 76
Зарегистрирован: Сб июн 09, 2012 02:14:11
Сообщений: 1337
Откуда: ХАРЬКОВ
Рейтинг сообщения: 0
практика покажет. пока еще с МК не увязывал.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 16:25:30 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
СЦБист писал(а):
Мурик писал(а):
Sleep(1)

с какой целью ?

Время исполнения кода в цикле исчезающе меньше 1 миллисекунды - и если добавить в цикл этот вызов - большую часть времени поток будет проводить в sleep-е, выскакивая оттуда раз в миллисекунду, чтобы проверить "чой-то там на улице?". Да и процессор во время Sleep-а будет заниматься более полезными деяниями нежели тупо цикл маслать с частотой пару сотен миллионов оборотов в секунду. :)

50% загрузки? Это на двухядернике? На одноголовом он пожрал бы всё, кмк.

Солидарен в том, что городить +2 потока для обеспечения примитивного ввод-вывода - это дюже по богатому. Ибо потоки - это не только головная боль при обеспечении их синхронизации на этапе проектирования но и геморрой при поиске ошибок этой синхронизации опосля. Но окончательную версию поточно пациента увидеть тем не менее хотелось-бы. :)

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 17:04:59 
Мучитель микросхем
Аватар пользователя

Карма: 6
Рейтинг сообщений: 87
Зарегистрирован: Вс янв 09, 2011 23:05:37
Сообщений: 450
Откуда: СССР
Рейтинг сообщения: 0
Так WaitForSingleObject как раз и усыпляет цикл и процесс потребляет 0% процессора. У меня даже при передаче загрузка процессора не превышала 1% :))

_________________
Иван Сусанин - первый полупроводник :solder:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 20:51:42 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
Myp3ik писал(а):
Так WaitForSingleObject как раз и усыпляет цикл

Совершенно верно, но если евент ручной и уже засигнален - циклу ведь и положено пролетать Wait-ы как пшёнке через дизентерийного пациента.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Вт май 17, 2016 21:02:30 
Открыл глаза

Зарегистрирован: Пт янв 11, 2013 10:54:43
Сообщений: 60
Рейтинг сообщения: 0
СЦБист писал(а):
Поточный вариант сильно жрет процессор.
Смысл использования потоков как раз в высвобождении ресурсов процессора, что-то вы делаете не так ;)
СЦБист писал(а):
if (btr >= 100)
Не очень красиво, читать нужно все, даже if (btr == 0), складывать в отдельный буфер, основным потоком приложения обрабатывать этот буфер. Для определения начала-конца пакета гуглите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Ср май 18, 2016 10:24:39 
Это не хвост, это антенна
Аватар пользователя

Карма: 3
Рейтинг сообщений: 76
Зарегистрирован: Сб июн 09, 2012 02:14:11
Сообщений: 1337
Откуда: ХАРЬКОВ
Рейтинг сообщения: 0
Vano79 писал(а):
Смысл использования потоков как раз в высвобождении ресурсов процессора, что-то вы делаете не так ;)
е.



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

сидите разбирайтесь.

Vano79 писал(а):
[ Не очень красиво,.


делай как хочешь. ))))))


_____

добавил еще один метод ClearCom() в класс


Вложения:
Class.cpp [5.65 KiB]
Скачиваний: 159
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Чт май 26, 2016 15:15:13 
Это не хвост, это антенна
Аватар пользователя

Карма: 3
Рейтинг сообщений: 76
Зарегистрирован: Сб июн 09, 2012 02:14:11
Сообщений: 1337
Откуда: ХАРЬКОВ
Рейтинг сообщения: 0
Все думаю как лучше посылать данные с МК. Произвольно или по запросу ПК ?

У меня с МК приходит 10 байтов информации. Когда в буфере приема >= 10 то эти

байты читаю и обрабатываю.

Но тут не понятно будут ли эти 10 байт те которые я жду.

В буфере же может быть к примеру не 10, а 13 байт.

Следовательно после чтения в буфере останется 3 байта, которые закосячат очередной прием.

На ум приходит следующее:

После каждого приема 10 байт буфер приема принудительно очищать

PurgeComm(COMport, PURGE_RXCLEAR); //Очистка буфера приема

Или вводить два проверочных байта в начале и в конце информационных байтов.

Для надежности конечный проверочный байт должен быть инверсией начального проверочного

байта.

Достоверность посылки следовательно проверяем по этим контрольным байтам.

+ тоже очищаем буфер.


Вложения:
Test.cpp [7.21 KiB]
Скачиваний: 159
Безымянный.JPG [46.2 KiB]
Скачиваний: 507
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Пт май 27, 2016 08:36:07 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 2
СЦБист писал(а):
Произвольно или по запросу ПК ?

Если данные бинарные и в них может появиться любой байт из диапазона 0х00 - 0хFF - используем poll режим хоста с чексуммой для самоуспокоения. Если формат ASCII либо какие-то значения байтов заведомо не появятся в полезном теле посылки - выбираем из них кого-либо на роль терминатора и можем организовать асинхронный поток. Можно конечно вставлять мэджиков в начала пакетов и прикрывать задницы последних чексуммами после чего пытаться синхронизироваться на лету зачатками AI - но это скорее для сокрытия деталей реализации протокола от [начинающих] снифферистов может быть полезно.

PS:Мы пользуемся обычным ASCII с CR в качестве терминатора. Устройство наглядно отлаживается в любой терминалке.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Пт май 27, 2016 11:54:10 
Это не хвост, это антенна
Аватар пользователя

Карма: 3
Рейтинг сообщений: 76
Зарегистрирован: Сб июн 09, 2012 02:14:11
Сообщений: 1337
Откуда: ХАРЬКОВ
Рейтинг сообщения: 0
Siarzhuk писал(а):
[
Если данные бинарные и в них может появиться любой байт из диапазона 0х00 - 0хFF - используем poll режим хостае.


ниче не понял )))) решил передавать данные по запросу.

пришлось слепить класс которые будет посылать запросы через равные промежутки времени.

это время взял с запасом. 500 мс. цикл опроса.

информационная часть содержит 80 обьектов контроля. следовательно 10 кадров.

скорость передачи 1200 бод. 10 кадров будут идти где-то 100 мс с учетом времени сбора посылки в МК.

Собственно класс. :shock:


Код:
class Request
{
   LARGE_INTEGER time;
   bool request;
public:
   Request()
   {
      SYSTEMTIME st;
      FILETIME ft;
      GetSystemTime(&st);
      SystemTimeToFileTime(&st,&ft);

      time.LowPart = ft.dwLowDateTime;
      time.HighPart = ft.dwHighDateTime;

      request = true;
      Queue_message.push(212);
   }
   bool Check_request() const {return request;}
   void Reset_request() {request = false;}
   void Time_out_request()
   {
      LARGE_INTEGER time;
      SYSTEMTIME st;
      FILETIME ft;
      GetSystemTime(&st);
      SystemTimeToFileTime(&st,&ft);

      time.LowPart = ft.dwLowDateTime;
      time.HighPart = ft.dwHighDateTime;

      if ((time.QuadPart - this->time.QuadPart) >= 5000000)
      {
         if (request)
         {
            MessageBox(NULL,_T("От микроконтроллера не получено ответа"),
            _T("Ошибка связи"), MB_OK | MB_ICONERROR);
            
            GetSystemTime(&st);
            SystemTimeToFileTime(&st,&ft);
            
            time.LowPart = ft.dwLowDateTime;
            time.HighPart = ft.dwHighDateTime;
         }
         else request = true;
         
         this->time = time;
         Queue_message.push(212);
      }
   }
};


Последний раз редактировалось СЦБист Сб май 28, 2016 11:51:54, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Сб май 28, 2016 10:30:41 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 2
СЦБист писал(а):
скорость передачи 1200 бод
Что так медленно? Не помешало бы увеличить скорость до 9600 или выше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с COM портом - C++
СообщениеДобавлено: Сб май 28, 2016 11:39:51 
Это не хвост, это антенна
Аватар пользователя

Карма: 3
Рейтинг сообщений: 76
Зарегистрирован: Сб июн 09, 2012 02:14:11
Сообщений: 1337
Откуда: ХАРЬКОВ
Рейтинг сообщения: 0
Мурик писал(а):
[q] Не помешало бы увеличить скорость до 9600 или выше.


Мне вполне хватает. Пробовал передавать информацию по медным проволокам с транса.

М-ду ПК и МК 3 проволоки. Расстояние м-ду ПК и МК 8 м. Вроде все норм.


на скорости 9600 большая погрешность 7%. я кварц не применяю.



http://ideone.com/9yk0iS


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 55 ]    , , 3

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y