0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
|
||||||
Чтение бита четности06.10.2017, 10:13. Показов 3227. Ответов 16
Здравствуйте.
У меня есть вопрос: Как считать бит четности через с++? Написана программа которая будет общаться с устройством через компорт, передача и прием, и по ТЗ нужно использовать 9й бит для проверки. Пока все реализовано через виртуальные порты и на одном конце программа посылает сигналы а на другом возвращает обратно. И метод проверки - это устанавливать разные настройки в этих программах. Я открываю порт как файл, и указываю при этом паритет, проверку на паритет, и сообщения об ошибках:
Погуглив, наткнулся на варианты : писать свой драйвер, или с помощью ассемблера добраться до цели. 1е мне кажется через чур сложным, 2е то что доступ возможен к определенному регистру определенного порта, но если у меня несколько портов, и я желаю переключаться? Плюс нашел странный пост о том что fParity не робит от слова совсем. ![]() Итого: можно ли получить 9й бит входящего байта через язык С++? Может я что то делаю не так? Если с спп надежды нет, можно ли через ассемблер работать с виртуальными портами, и вообще портами которые меняются? Благодарю.
0
|
06.10.2017, 10:13 | |
Ответы с готовыми решениями:
16
|
Модератор
![]() 3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,429
|
|
09.10.2017, 12:00 | |
nzt, при ошибке функция чтения должна вернуть ошибку иначе смысла в контроле нет. Имитировать можно наверное аппаратным тестером
Добавлено через 2 минуты ClearCommError так же в случае ошибки должен выдать CE_RXPARITY
0
|
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
|
|||||||||||
09.10.2017, 13:05 [ТС] | |||||||||||
vxg,
хм.
Хотя нашел другую версию, где проверка идет по изменению temp - тип онпринимает код ошибки. И если все хорошо, то останется 0. Суть в том что после этой функции - темп стал нулем. А, кстати об имитации - на другом конце виртуального компорта висит программа которая возвращает посылку, но у нее настройки порта отличаются в типе четности. Т.е. посылка посланная с режимом четности EVEN должна вернуться с пометкой ODD, и это есть ошибка. Однако почему то ошибки нет. Сейчас еще раз перепроверю, но первые тесты неутешительные. Добавлено через 28 минут Оккей, перейдем к коду Вот функция настройки ком порта - в нее пересылается номер порта (port) и скорость (baud)
dcb.Parity = EVENPARITY ; - в одной программе ставлю так, в другой ODDPARITY. Код из предыдущего сообщения стоит в функции чтения.
0
|
Модератор
![]() 3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,429
|
|
09.10.2017, 15:25 | |
nzt, ClearComnState возвращает ошибки/статус и очищает ошибки - ошибка если она была будет возвращена в одном из битов temp. То что у вас на разных устройствах установлен разный режим контроля чётности наверное должно приводить к ошибке но если у вас специфичные данные то может и не приведёт
Добавлено через 1 минуту Если очистка идёт перед чтением то чтение будет всегда ок. Добавлено через 31 секунду ...в 99%
0
|
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
|
||||||
09.10.2017, 16:24 [ТС] | ||||||
vxg, нэ, в таком случае очистка - после...
Хм. Ладно, еще есть варианты получать значение этого бита? На ассемблере может? Я понимаю что с++ через него и работает, но... я уже утомился за несколько дней от этой проблемы, и готов демонов вызывать.
0
|
Модератор
![]() 3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,429
|
|
09.10.2017, 19:02 | |
nzt, то есть настройка порта на проверку чётности у вас пропускает ошибки чётности?
Добавлено через 50 минут nzt, Кстати 1) вы очень чудно манипулируете функцией ClearCommState - не нужно подавать в неё бит ошибки - нужно проверять что а) функция отработала (вернула TRUE) б) в возвращенной ей ошибке есть ваш бит 2) после вызова функции записи настроек вызовите функцию чтения настроек и убедитесь что контроль чётности реально включился - может ему что-то мешает (права админа например)
0
|
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
|
|
11.10.2017, 19:32 [ТС] | |
vxg, Извиняюсь за отсутствие.
1)Так, проверить смогу уже завтра. Попробую ваш вариант ClearCommState. 2) Вы говорите про GetCommState? Хм. я в первой записи указывал на пост, который подтвердился и у меня - проверка после записи отоброжает fparity как false. Я не пробовал настраивать права админа, и испытаю завтра, но пока что результаты пока такие. Хм. И как мне менять права админа? На откомпилирумом приложении поставить галочку " запускать от имени админа"?
0
|
Модератор
![]() 3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,429
|
|
12.10.2017, 06:21 | |
nzt, хм.. вы правы, четность у меня тоже не назначается ни при запуске от имени администратора ни просто так. попробуйте установить ее в параметрах порта из диспетчера устройств - если вы не назначаете настройки порта в программе, то порт по идее будет открываться с системными настройками - может хоть их он применит
0
|
0 / 0 / 0
Регистрация: 26.09.2015
Сообщений: 25
|
||||||
12.10.2017, 11:51 [ТС] | ||||||
vxg, Я изменил ClearCommError по вашему совету, и один фиг - возвращает тру, и GetLastError возвращает 0. Ставил галочки на "запускать от имени администратора" у обоих приложений, и сам вижуал студио в придачу так же установил. Не помогло. хм..
Проверил на эмуляторах com0com, и VSPE. Второй не отображается в диспетчере устройств(или я плохо смотрел), а первый отображается, но у создаваемых устройств настроек нет. Попробую найти компьютер с физически существующим портом и посмотреть на нем наличие настройки. Добавлено через 18 минут Нашел, настройка есть. Хм. но ведь это не дело, что бы пользователь открывал диспетчер устройств и сам настраивал оборудование.. Кажется я встречал материал где вызывалось стандартное окошко настройки порта.. Попробую его найти. Добавлено через 1 час 19 минут Вот тут обнаружил множество настроек и объяснений, среди которых был тот самый вызов стандартного окна настройки порта. Раз уж, я не могу получить к нему доступ через диспетчер устройств.. Вот этой функцией вызывается сеё чудо...
![]()
0
|
12.10.2017, 11:51 | |
Помогаю со студенческими работами здесь
17
Чтение RGB значений из bmp 24 бита Чтение любого файла со второго бита (третьего и т.д.)? Как перехватить координаты бита на картинке в момент обнаружения этого бита комп 32 бита потянет видюху 64 бита? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
|
Многопоточное программирование в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
|
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
|
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
|
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
|
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
|
Образование и практика
Igor3D 21.03.2025
Добрый день
А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
|
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
|
Async/await в Swift: Асинхронное программирование в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
|
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
|