Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2014, 10:29   #21
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
В свих изысканиях, Вы ошиблись буквально на три порядка. Квант времени выделяемый планировщиком 8-10 мкс. Как говорится, почувствуйте разницу. А для просветления головы, советую почитать вот эту статью.
Хорошая статья, которая в общем-то и подтверждает мою точку зрения
Позволю себе не согласиться с вами. Вам для ознакомления тоже кое-что почитать посоветую http://www.dtf.ru/articles/read.php?id=39888
TELEPUZ вне форума Ответить с цитированием
Старый 21.01.2014, 11:09   #22
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от TELEPUZ Посмотреть сообщение
Хорошая статья, которая в общем-то и подтверждает мою точку зрения
Позволю себе не согласиться с вами. Вам для ознакомления тоже кое-что почитать посоветую http://www.dtf.ru/articles/read.php?id=39888
Следуя логике этой статьи, мои программы взаимодействия с аппаратной частью станка с ЧПУ, который я разрабатываю, вообще не должны работать т.к. обмен данными через LPT порт идёт на частоте 32 кгц (31,25 мкс). Но, вопреки всему, они работают. Моторы крутятся, клапана срабатывают...
ОС - Windows XP sp2. Частота процессора 1,2 ГГц.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 21.01.2014 в 11:12.
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.01.2014, 13:24   #23
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Следуя логике этой статьи, мои программы взаимодействия с аппаратной частью станка с ЧПУ, который я разрабатываю, вообще не должны работать т.к. обмен данными через LPT порт идёт на частоте 32 кгц (31,25 мкс). Но, вопреки всему, они работают. Моторы крутятся, клапана срабатывают...
ОС - Windows XP sp2. Частота процессора 1,2 ГГц.
А какая логика работы у вашей программы? Реализована ли там много-поточность?
TELEPUZ вне форума Ответить с цитированием
Старый 21.01.2014, 15:00   #24
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от TELEPUZ Посмотреть сообщение
А какая логика работы у вашей программы? Реализована ли там много-поточность?
Мне она не нужна. Логика простая. В Цикле IddleLoop идёт опрос порта и выясняется, произошла ли смена адреса в буферном регистре. Если произошла, из кольцевого буфера выводится небходимая инфа. Затем вычисляются новые координаты и задержки и всё повторяется снова. А, ещё проверяются состояния концевых датчиков исполнительных устройств. Всё это зделано на C++ Builder5.
В качестве буферного регистра, используется микросхема К555ИР32. Это четырёзразрядный регистр имеющий четыре ячейки с независимой записью и считыванием. Он позволяет устранить задержки неопредлённости ОС.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 21.01.2014 в 15:03.
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.01.2014, 15:16   #25
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Мне она не нужна. Логика простая. В Цикле IddleLoop идёт опрос порта и выясняется, произошла ли смена адреса в буферном регистре. Если произошла, из кольцевого буфера выводится небходимая инфа. Затем вычисляются новые координаты и задержки и всё повторяется снова. А, ещё проверяются состояния концевых датчиков исполнительных устройств. Всё это зделано на C++ Builder5.
В качестве буферного регистра, используется микросхема К555ИР32. Это четырёзразрядный регистр имеющий четыре ячейки с независимой записью и считыванием. Он позволяет устранить задержки неопредлённости ОС.
Ну у меня в программе несколько потоков задействовано. На второй порт подключается светодиодное табло(я таймер повесил посекундный - но он же в другом потоке срабатывает). Прогу писал на C#(WindowsForms). Не совсем понял один момент - вы напрямую обращаетесь к регистрам COM-порта из WindowsXP?
TELEPUZ вне форума Ответить с цитированием
Старый 21.01.2014, 16:16   #26
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от TELEPUZ Посмотреть сообщение
Ну у меня в программе несколько потоков задействовано. На второй порт подключается светодиодное табло(я таймер повесил посекундный - но он же в другом потоке срабатывает). Прогу писал на C#(WindowsForms). Не совсем понял один момент - вы напрямую обращаетесь к регистрам COM-порта из WindowsXP?
Я работаю с LPT-портом, но в этом нет принципиальной разницы. К регистрам порта обращаюсь через компонент IOPort.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.01.2014, 17:01   #27
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Я работаю с LPT-портом, но в этом нет принципиальной разницы. К регистрам порта обращаюсь через компонент IOPort.
И с частотой 32 кГц вы отправляете данные в порт? Тютелька в тютельку-вы уверены в этом? А по какому событию? По таймеру? И есть ли обработка действий пользователя в вашем приложении? Меню какое, кнопочки? И откуда вы взяли эту частоту отправки данных 32 кГц? На сколько я понял,почитав форумы событие OnIdle - срабатывает тогда, когда пользователь не делает никаких действий. А если у меня будет меню-с которым будет работать пользователь. Ну да это ладно - можно запретить юзеру что-то делать в самые ответственные моменты.А вот как быть с отправкой данных на второй порт ежесекундно. тут даже с помощью таймера прийдётся неявно использовать второй поток-а это чревато большими потерями на переключении планировщиком контекста потоков((

Последний раз редактировалось TELEPUZ; 21.01.2014 в 17:39.
TELEPUZ вне форума Ответить с цитированием
Старый 21.01.2014, 19:33   #28
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от TELEPUZ Посмотреть сообщение
И с частотой 32 кГц вы отправляете данные в порт? Тютелька в тютельку-вы уверены в этом? А по какому событию? По таймеру? И есть ли обработка действий пользователя в вашем приложении? Меню какое, кнопочки? И откуда вы взяли эту частоту отправки данных 32 кГц?
32 кгц именно тютелька в тютельку, так как эта частота, с которой идёт переключение ячеек буферного регистра в аппаратной части станка. Частота кварцованная. Адрес ячейки, выводится в порт, считывается программой и сравнивается с текущим. Если они различаются, происходит запись в ячейку и формирование нового адреса. По замерам, происходит от 10 до 15 считываний. Т.е. Частота, с которой процессор может обращаться к порту - от 3,5 до 4,8 Мгц.

Цитата:
На сколько я понял,почитав форумы событие OnIdle - срабатывает тогда, когда пользователь не делает никаких действий. А если у меня будет меню-с которым будет работать пользователь. Ну да это ладно - можно запретить юзеру что-то делать в самые ответственные моменты.А вот как быть с отправкой данных на второй порт ежесекундно. тут даже с помощью таймера прийдётся неявно использовать второй поток-а это чревато большими потерями на переключении планировщиком контекста потоков((
Событие OnIddle, это цикл супервизора Windows. Срабатывает оно при опросе всех открытых процессов. И не правда, что оно действует только когда пользователь ничего не делает. Наоборот, если пользователь что-то делает, интенсивность посылки/приёма сообщений увеличивается и частота срабатывания события возрастает.

Обмен через LPT.
Изображения
Тип файла: bmp Обмен через LPT-порт.BMP (27.5 Кб, 112 просмотров)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 21.01.2014 в 19:54.
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.01.2014, 21:11   #29
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Обмен через LPT.
Большое спасибо за все ваши советы. Но меня всё равно гложут реальные сомнения((( В той ссылке, что Вы мне предложили http://global-katalog.ru/item3832.html есть следующая информация:

Система ОСРВ предсказуема в том смысле, что время, затрачиваемое на определенную работу, не должно превышать заранее установленного ограничения. Время реакции на прерывание (interrupt latency) состоит в способности своевременной реакции на внешние события (обычно не превышает 2-8 мкс). Время переключения контекста используется для передачи управления от процесса к процессу, от потока к потоку (находится в пределах 80 - 160 мкс). Время реакции планировщика (scheduling latency) представляет собой задержку активизации процесса после отработки прерывания (находится в пределах 4- 16 мкс).

А вы утверждаете, что у WindowsXP, которой ой как далеко до ОСРВ, квант времени выделяемый планировщиком 8-10 мкс. Что-то тут явно не так(((
И дабы окончательно развенчать миф о том, что можно написать ПО, работающее с проходной(пример будет касаться исключительно моей задачи), которое будет обмениваться данными с контроллером через COM-порт с Кгц-овой частотой приведу простейший расчёт. скорость приёма данных моего порта 9600 бит/сек. Грубо говоря приём 1-го бита данных -это 0.1 мс. Мне нужно принять 12 байт-96 бит, плюс ещё стоповые - грубо говоря 100 бит. это уже в районе 10 мс!(миллисекунд)! Я уже не говорю обо всех остальных задержках на переключение контекстов потоков(какими малыми они бы не были), дополнительные вычисления моей программой, затраты на обработку тиков таймера, в обработчике которого шлю данные на второй COM-порт и делаю ещё кое-какие вычисления(у меня через второй порт светодиодное табло работает)! Что скажете?

Последний раз редактировалось TELEPUZ; 21.01.2014 в 21:46.
TELEPUZ вне форума Ответить с цитированием
Старый 21.01.2014, 22:11   #30
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от TELEPUZ Посмотреть сообщение
Что скажете?
А то и скажу. Вы неправильно понимаете работу COM-порта. 100 бит, он принимает в синхронном режиме и Ваша программа к этому не имеет никакого отношения. Это делается на аппаратном уровне. Эти 12 бат, запишуться в буфер, который задан при инициализации. Потом, этот буфер, можете обрабатывать хоть пол-часа. Если это проходная, то задержка обработки в несколько миллисекунд совершенно не существенна. Человек, даже моргнуть за это время не успеет, а не то, что там с карточкой что-то сотворить. В общем, читайте инструкцию к терминалу и не занимайтесь ерундой.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование LPT-порта на DELPHI Vova777 Компьютерное железо 5 05.02.2011 19:27
Программирование LPT-порта на DELPHI Vova777 Общие вопросы Delphi 0 31.01.2011 17:37
Программирование последовательного порта Funker Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 27.05.2010 02:20
программирование lpt порта alexs2141 Общие вопросы Delphi 5 07.06.2008 17:10