![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
А я думаю что в ДОС и нельзя, в ком порту стоят стандартные микросхемы , у которых тактовые частоты приема и передачи вычисляются через делитель с программным коэф. деления, максимальная частота (для стандартной микрухи) приема/передачи 115200 с коэф. деления равным 1 (единице !) , а все остальные частоты получается изменением этого коэф-нта. Т.е. поставь 2 и получишь частоту 57600, ( 56к) и т.д. И отношение к операционке это не имеет ни малейшего отношения! В последнее время стали ставить усовершенствованые микросхемы ком-порта, только для увеличения скорости передачи/приема , но и там существует этот делитель, только с другой базовой частотой. А базовая частота зафиксирована, вот если ты сам сделаешь железяку, с управляемой базовой частотой и коэф. деления, тогда сможешь ставить любые скорости обмена по ком-порту. -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
А вот думать здесь не надо. Рядом со мной сидит человек, который делал это в DOS, но там ведь как и в "микрухе" по таймеру можно вызвать прерывание и читать порт, так что в досе можно - не вопрос! А вот как в виндовсе добраться до таймеров, задающих частоту???
-------------------- я не гольфист - я хоккеист |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
По какому таймеру в досе? И причем здесь прерывания?
Ну даже если он делал такое в досе (хотя есть сомнения) пусть тогда те объяснит как, и ты или его попросишь реализовать этоже только в драйвере для виндов, и все будет работать (почему в драйвере, потому что там разрешенно и к портам иметь доступ и к прерываниям почти как в дос) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
Можно читать с определенным интервалом. Это да. То есть для микросхемы UART установлена частота 11520, но читаем мы данные со скоростью 100000. Читать с нужным интервалом можно и в винде. Установить нестандартную скорость порта нельзя.
Начиная еще с 95-х виндов такую вольность отключили. Перепрограммирование системного таймера было доступно только в DOS. В 9x виндах просто было предупреждение, что это не работает, перезагрузить в DOS режим. В NT такой возможности вообще нет. |
||||
|
|||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
Snowy
А тогда как читать с нужным интервалом, по своему таймеру что-ли? Но система-то не реального времени, гарантии никто не дает, хотя в CE можно. Объясни как? Пожалуйста -------------------- я не гольфист - я хоккеист |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
Наверное по событиям
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
Если иметь доступ до регистра RX и TX порта, то можно работать с нестандартной частотой. Кто знает как до них добраться?
Добавлено @ 13:49 Это моё осмысленное предположение -------------------- я не гольфист - я хоккеист |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
чтобы не возникало непонятностей, предлагаю решить, о какой частоте идет речь:
1. частота чтения/передачи посылок 2. частота, с которой меняются биты на линии UART -------------------- qqq |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 2 Всего: 19 |
Вопервых таких регистров давно уже в UART нет, вместо них достаточно обьемные буферы. вовторых - настроить UART на нестандартную скорость невозможно, формирователь импульсов без челочисленного делителя относительно тактовой частоты просто корректно работать не бедет (в Юникс системах API вообще ограниченно константами, и передать ф-ции настройки порта произвольное значение невозможно). Причина в том, что самому UART передаеться не нужная скорость передачи, а делитель тактовой частоты для формирования импульсов. втретьих - разными там ухишрениями можно работать на "нестандартной" скорости, но именно работать с портом на нестандартной скорости, самиже UARTы между собой будут общяться на какойто стандартной. |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
так вот и хочется узнать хотя бы одно ухищрение, а то никаких мыслей, млин...!
-------------------- я не гольфист - я хоккеист |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
Пожалуй последний вопрос:
Если перед вызовом SetCommState(...) дам приоритет RealTime, то выполнится ли у меня функция за время меньшее 100 микросекунд (или лучше сколько примерно тактов процессора)? и за какое время (лучше тактов процессора) выполняется "взведение" объекта ядра Event? -------------------- я не гольфист - я хоккеист |
|||
|
||||
| Snowy |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: нет Всего: 484 |
На уровне драйвера. Пишешь свой драйвер и читай как хочешь. Иначе используем стандартный драйвер со стандартным кэшированием, которого достаточно для считывания в системе "нереального" Но он читает так, как должен читать нормальный драйвер.
На DOSе примеры есть. Книжка и ее куски в инете раскиданы во множестве. Спроси у Яндекса "программирование UART". Но под винды я не видел ни кода, ни умельцев, которым бы он понадобился. И опять же вопрос реального времени. Хочешь писать драйвер? ИМХО, железяка, работающая на нестандартной скорости - нехорошая железяка. Добавлено @ 14:30
Зависит и даже очень от количества активных процессов системе. Точно отмерить невозможно.
Насколько я помню, около 1000 тактов процессорного времени. Соответственно зависит от скорости процессора. |
||||||||
|
|||||||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
takedo
Ээээ. Собственно защищать что? И от кого? Неужели вы считаете, что к вам кто-то вклинится на линию связи? Или захочет перепрограммировать ваше устройство? Тогда, если это того стоит, что бы я сделал первым: 1. Подключил к вашей железяке цифровой осциллограф. 2. В явном виде по осциллограме бы увидел все нюансы, включая "нестандартную" скорость.Которую тут же вычислил бы. 3. Буквально за день собрал бы свою железяку, умеющую работать на нестандартной скорости. Которая просто будет ловить ваши "нестандартные" пакеты, запихивать в свой достаточно большой буфер и уже по вполне стандартным протоколам гнать их куда душе угодно (в тот же ком-порт, но уже на стандартной скорости). подумайте об этом, я серьезно - сделать такую железку схемотехнически - вообще раз, дваи готово, программирование этой железки - буквально час-два максимум. Это не лучший выход для защиты информации. Лучше придумайте свой шифр протокола, это будет необходимо и достаточно. Romikgy
Поясняю ;) Тут видимо имелось в виду, то, как программируются подобные фичи в железяках. Не исключено, что в ДОСе это точно так же. Например, берем классический контрллер на 51 ядре. В нем в сециальных регистрах указываем то, что один из таймеров будет формировать бодрейт для UART-а. (В подробности думаю не надо вдаваться, так? В регистрах, конфигурирующих этот таймер, есть такой параметр, как количество тиков на период счета таймера. Это количество, помноженное на период кварца (в зависимости от проца может быть еще деленное на 12 либо другое число), равняется одному полупериоду частоты бодрейта UART-а. То есть боррейт определяется именно числом, записываемом в этот таймер. И это число совершенно произвольно. Конечно, дискретность в скоростях возникать будет, но уверяю - 100 кбпс получить можно абсолютно реально. Ну а про прерывание Вот. Как схемотехнически сделан UART на "персоналке" - не знаю. Но если аналогичным образом - то грамотно написанные драйвера вполне решат эту проблему. Но, опять же...Прочитайте внимательно то, что я писал в начале этого сообщения- если это только для защиты, то сделать свою "антижелезяку" на эту защиту - даже для инженеров такого класса как я вполне посильная задача -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: -1 Всего: 3 |
Dreamer_0x01
Да на цифровом асцилографе за 8тыс уе мы все это видим, однако, как подобрать частоту, если она плавает от байта к байту? А еще у нас конечно есть протокол свой, который типа уже зашифрован слегка. Я вообще не гольфист, я - хоккеист. Но уж коли пришлось работать за хлеб гольфистом, то хотелось бы получить от этой работы максимум знаний, поэтому и хочется блин на любой частоте поработать. Но у кого чего спросить? Вот ты например знаешь как работает железяка, но есть мудрецы, закончившие "Автоматику телемеханику", говорящие, что 16550 не умеет работать на нестандартной частоте, и даже в досе это невозможно. Чего с такого взять - кроме анализов(я говорю про конкретного человека, который как раз и закончил АТ и ходит рядом со мной произнося свой несусветный бред Вот ещё хотя бы простецкий вопросик: могу ли я открыть порт COM1 через hcom0 = CreateFile("COM1"...,FILE_FLAG_OVERLAPPED,...); проинициализировав его на частоте A0 и hcom1 = CreateFile("COM1"...,FILE_FLAG_OVERLAPPED,...); и проинициализировать на частоте A1. А далее через hcom0 читать, через hcom1 - писать. Вот чего то не могу до глубины души разобраться что- куда и как. Кто - то может пояснить? -------------------- я не гольфист - я хоккеист |
|||
|
||||
| Romikgy |
|
||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
Думаю , что нет!!! В УАРТе один делитель что для передачи, что для приема, да и система скорее всего не даст 2 раз открыть тотже СОМ1.
Как работает 51 я знаю, и как у него работает УАРТ тоже знаю, только не надо путать 51 с писи , 51 - микроконтроллер широкого применения, а у компа используется микруха типа 16550 , в ней о таймер ни разу не слышал! А про прерывания я имел ввиду, что они никакого отношения к скорости УАРТа не имеют, и служат сугубо для асинхроности приемопередачи -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |