реклама на сайте
подробности

 
 
> Программа в ХР глючит - в W98 нормально работает., Эмулятор SPI через COM порт для ATMega
plombir
сообщение Jan 1 2006, 07:08
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



Столкнулся с такой проблемой на WinXP:
Управляю внешним устройством на ATmega через СОМ порт (Delphi 7). С эмулировал на нём SPI. Управляю ногами СОМ порта как на LPT (вкл./выкл.). Передаю данные пакетами по 256 байт. Из них 50% внеш. устройство принимает с ошибками. На том же компе, но под WIN98 - ниодной! ошибки. Железо, точно, исправно.
Что делал:
Приоритетами игрался. От мин. к реалтайм.
В свойствах exe файла включал совместимость с другими ОС.
Результат - ничего не помогло.
Заметил, после перезагрузки XP, первые несколько минут, работает нормально. Потом - полный финиш...

Посоветуйте, на что обратить внимание, в каком месте искать Новогоднюю biggrin.gif собаку.

P.S. под WIN98 работает в 2 раза! быстрее, чем под XP...

Всех с наступившим Новым Годом!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
fantasy
сообщение Jan 1 2006, 21:06
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 17-09-05
Из: Kirov
Пользователь №: 8 659



Обращение к COM-порту осуществляете через какую функцию API?
В принципе в NT-системах (к которым как раз и относится WinXP) без специального драйвера из программ допускается только работа через WriteFile-ReadFile, т.е. как с файлом. При этом как раз работа осуществляется через системный буфер, который и задаёт "тормоза", при этом скорость обмена можно увеличить только увеличивая размер передаваемых пакетов данных.

Наиболее кардинальный путь решения - писать свой драйвер, который работает в нулевом кольце защиты, и "дёргать" ногами интерфейса через IN-OUT как захочется. Получится оч. быстро наиболее грамотно.
Из других решений есть вариант с использованием программ, которые "разрешают" программам пользователя напрямую обращаться к портам ввода-вывода, однако сам с такими не работал, поэтому ничего конкретного не порекомендую. По моему мнению - оч. кривой вариант.
Ну и последний вариант - смастерить простейший переходник COM-SPI rolleyes.gif - конференция ведь в целом по электронике...


--------------------
В голове слышался грохот: рушились грандиозные планы...
Go to the top of the page
 
+Quote Post
plombir
сообщение Jan 1 2006, 23:41
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



Программа уже написана и работает. Но в ХР глючит, как я выше описал, а в W98 нормально работает. Заказчику, для которого это сделано, не хотелось бы говорить, что сей девайс и софт к нему корректно работает под W98, а вот под XP возможны проблемы с удлинением времени процесса.
Цитата
Обращение к COM-порту осуществляете через какую функцию API?
Через стандартные CreateFile, EscapeCommFunction, WaitCommEvent и т.п. Используется стандарный компонент для Delphi.
Цитата
...драйвер, который работает в нулевом кольце защиты...
А что это за кольцо? Где об этом почитать? А реализовать его на С++ или Delphi реально?

Заранее, благодарен.
Go to the top of the page
 
+Quote Post
plombir
сообщение Jan 2 2006, 00:19
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



2 fantasy!
Спасибо, огроменное!
Нулевое кольцо - то что надо. Раньше о нем не слышал. "Капнул" в инете - нашел, то что надо. Придется, правда ядро NT с перехватом API изучать, но главное нашел! направление для моей проблемы.
Теперь из третьего кольца будем в нулевое стучаться biggrin.gif

С Новым Годом! тебя. Еще раз, спасибо.

ЗЫ. Больше недели общался в разных форумах и ничего, только здесь подсказали... biggrin.gif biggrin.gif biggrin.gif
Go to the top of the page
 
+Quote Post
fantasy
сообщение Jan 3 2006, 06:00
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 69
Регистрация: 17-09-05
Из: Kirov
Пользователь №: 8 659



smile.gif Всегда пожалуста! Рад, что помог.


--------------------
В голове слышался грохот: рушились грандиозные планы...
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jan 3 2006, 15:51
Сообщение #6


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



vieto esli ne xotite velosiped izobretat , est takaya programma - "giveio" ili ego analog tot chto avreal ispolzuet . U nix dolzen bit API i oni vidayut dostup dlja user programmi k trebuemim portam . I nicego pisat ne nado .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
DSIoffe
сообщение Jan 4 2006, 00:10
Сообщение #7


Дима
*****

Группа: Свой
Сообщений: 1 683
Регистрация: 15-12-04
Из: Санкт-Петербург
Пользователь №: 1 486



Цитата
est takaya programma - "giveio"

Присоединяюсь. Там и API нет, пишешь один раз CreateFile, а потом используешь те же команды доступа к портам in и out, что и в W98.
И не нужно пользоваться WinAPI, которые могут быть себе на уме.
Прикладываю его сюда. Он маленький, инструкция там же.
Прикрепленные файлы
Прикрепленный файл  giveio.zip ( 84.68 килобайт ) Кол-во скачиваний: 92
 


--------------------
© CОПЫРИГХТ: Дмитрий Иоффе, Советский Союз.
Приглашаю посмотреть: http://muradowa.spb.ru/ и http://www.drtata.narod.ru/index.html
Go to the top of the page
 
+Quote Post
plombir
сообщение Jan 4 2006, 21:05
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



Вот я что по этой теме нашел.
Компонент "DriverLINX Port IO Driver wrapper component" для delphi, c++ с исходниками.
Прикрепленный файл  dlportio.zip ( 851.99 килобайт ) Кол-во скачиваний: 284

Он немного великоват, но стоит того...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 05:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016