Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизПрограмма в ХР глючит - в W98 нормально работает Найти похожие ветки
← →
Сергей_1 (2005-12-30 22:50) [0]Всех с Наступающим!
Столкнулся с такой проблемой на WinXP:
Управляю внешним устройством через СОМ порт. С эмулировал на нём SPI. Соответственно, аппаратный UART не использую. Управляю ногами СОМ порта как на LPT (вкл./выкл.). Передаю данные пакетами по 256 байт. Из них 50% внеш. устройство принимает с ошибками. На том же компе, но под WIN98 - ниодной! ошибки. Железо, точно, исправно.
Что делал:
Приоритетами игрался. От мин. к реалтайм.
В свойствах exe файла включал совместимость с другими ОС.
Результат - ничего не помогло.
Заметил, после перезагрузки XP, первые несколько минут, работает нормально. Потом - полный финиш...
Посоветуйте, на что обратить внимание, в каком месте искать.
P.S. под WIN98 работает в 2 раза! быстрее, чем под XP...
С уважением, Сергей.
← →
Германн © (2005-12-31 02:02) [1]
> Сергей_1 (30.12.05 22:50)
>
> Всех с Наступающим!
> Столкнулся с такой проблемой на WinXP:
> Управляю внешним устройством через СОМ порт. С эмулировал
> на нём SPI. Соответственно, аппаратный UART не использую.
> Управляю ногами СОМ порта как на LPT (вкл./выкл.). Передаю
> данные пакетами по 256 байт. Из них 50% внеш. устройство
> принимает с ошибками. На том же компе, но под WIN98 - ниодной!
> ошибки. Железо, точно, исправно.
> Что делал:
> Приоритетами игрался. От мин. к реалтайм.
> В свойствах exe файла включал совместимость с другими ОС.
>
> Результат - ничего не помогло.
> Заметил, после перезагрузки XP, первые несколько минут,
> работает нормально. Потом - полный финиш...
>
> Посоветуйте, на что обратить внимание, в каком месте искать.
>
>
> P.S. под WIN98 работает в 2 раза! быстрее, чем под XP...
>
>
> С уважением, Сергей.
Ох, Сергей. Гонишь ты пургу!
> Соответственно, аппаратный UART не использую.
Пардон, а это как можно изменить состояние вывода, аппаратно привязанного к выводу микросхемы UART?
> Из них 50% внеш. устройство принимает с ошибками.
Имхо - это всё мусор. Причём все 100%.
А в целом - в линейке NT никто и никогда не даст тебе прямого доступа к аппаратным ресурсам компьютера. Только через драйвер!
← →
tesseract © (2005-12-31 08:44) [2]
>С эмулировал на нём SPI. Соответственно, аппаратный UART не использую. >Управляю ногами СОМ порта как на LPT (вкл./выкл.). Передаю данные
>пакетами по 256 байт. Из них 50% внеш. устройство принимает с ошибками.> На том же компе, но под WIN98 - ниодной! ошибки. Железо, точно,
> исправно.
Ты или гений или гонишь. Код приведи.
А что 50 р. На драйвер порта Max232cpe жалко?
На колупаться с SPI через COM - это художественный героизм. Обычно такое на LPT вешают.
← →
Сергей_1 (2005-12-31 11:04) [3]Пардон, а это как можно изменить состояние вывода, аппаратно привязанного к выводу микросхемы UART?
СОМ порт - обычный порт, имеющий свой адрес, СОМ1-СОМ4: 3f8h, 2f8h, 3e8h, 2e8h соответственно.
Регистр MCR (Base_Addr+4) управление выходными сигналами:
MCR.1 - управление выходом RTS (1 - активен, -12 В; 0 - пассивен, +12 В);
MCR.0 - управление выходом DTR
Есть еще регистр LCR (Base_Addr+3) - в обычной литературе недокументирован. Там битом LCR.6 можно управлять сигналом RX.
Регистр MSR (Base_Addr+6) управление (правильнее сказать считывание) входных сигналов:
MSR.7 - DCD
MSR.6 - RI
MSR.5 - DSR
MSR.4 - CTS
Вот ими я и пользуюсь. Устанавливая/сбрасывая биты, а также считывая их.
А что 50 р. На драйвер порта Max232cpe жалко?
Да нет. Он стоит.
На колупаться с SPI через COM - это художественный героизм. Обычно такое на LPT вешают.
У меня немного хитрее сделано. Я определяю, моё, подключенное устройство и, соответственно, использую аппаратный UART или проблемный мой SPI.
Попробую немного изменить мой вопрос:
Как в Delphi запретить распределения ресурсов (прерывания - хотя это не корректно обозвал) в определенном участке кода?
Всех, еще раз, с Наступающим! Пошел шампанское открывать - репетировать...
← →
GuAV © (2005-12-31 12:01) [4]
> СОМ порт - обычный порт, имеющий свой адрес,
> СОМ1-СОМ4: 3f8h, 2f8h, 3e8h, 2e8h соответственно.
Это устройство, имеющее путь \\.\COM1 , \\.\COM2 ...
> MCR.1 - управление выходом RTS (1 - активен, -12 В; 0
>- пассивен, +12 В);
> MCR.0 - управление выходом DTR
EscapeCommFunction
>MSR.7 - DCD
>MSR.6 - RI
>MSR.5 - DSR
> MSR.4 - CTS
WaitCommEvent - ожидание изменения
GetCommModemStatus - считывание состояния
← →
Германн © (2006-01-01 04:48) [5]
> Сергей_1 (31.12.05 11:04) [3]
>
> Пардон, а это как можно изменить состояние вывода, аппаратно
> привязанного к выводу микросхемы UART?
> СОМ порт - обычный порт, имеющий свой адрес, СОМ1-СОМ4:
> 3f8h, 2f8h, 3e8h, 2e8h соответственно.
> Регистр MCR (Base_Addr+4) управление выходными сигналами:
>
> MCR.1 - управление выходом RTS (1 - активен, -12 В; 0 -
> пассивен, +12 В);
> MCR.0 - управление выходом DTR
> Есть еще регистр LCR (Base_Addr+3) - в обычной литературе
> недокументирован. Там битом LCR.6 можно управлять сигналом
> RX.
> Регистр MSR (Base_Addr+6) управление (правильнее сказать
> считывание) входных сигналов:
> MSR.7 - DCD
> MSR.6 - RI
> MSR.5 - DSR
> MSR.4 - CTS
> Вот ими я и пользуюсь. Устанавливая/сбрасывая биты, а также
> считывая их.
Вот ими ты и пользуешься управляя микросхемой UART.
> У меня немного хитрее сделано. Я определяю, моё, подключенное
> устройство и, соответственно, использую аппаратный UART
> или проблемный мой SPI.
Ппппереведи.
> Попробую немного изменить мой вопрос:
> Как в Delphi запретить распределения ресурсов (прерывания
> - хотя это не корректно обозвал) в определенном участке
> кода?
Лучше б не изменял. :( Имхо, и так был тёмеый лес, а после изменения, так вообще - дурелом.
И ещё раз - А в целом - в линейке NT никто и никогда не даст тебе прямого доступа к аппаратным ресурсам компьютера. Только через драйвер!
С Новым Годом!
← →
Сергей_1 (2006-01-01 10:28) [6]Не ответить не мог. :)))
2 Германн
Что Вы заладили про линейку NT? Причем тут драйвера? Драйвера нужны, как GuAV написал, если обращаться с устройству через \\.\COM1 , \\.\COM2. Минуя их можно всегда, зная их адреса, (для Германна еще раз, ВСЕГДА!) обращатся к железу напрямую через порты ввода/вывода, но, только, если программе передано управление. А этим управление занимается ОС. В данном случае XP. И некоторые API функции можно тоже считать некими драйверами между программой и железом.
С этим, Вы, согласны?
Всех с Новым Годом!
← →
Германн © (2006-01-02 02:48) [7]
> С этим, Вы, согласны?
С чем? С GuAV © (31.12.05 12:01) [4] - согласен без вопросов.
А с этим:
> Минуя их можно всегда, зная их адреса, (для Германна еще
> раз, ВСЕГДА!) обращатся к железу напрямую через порты ввода/вывода,
> но, только, если программе передано управление.
не согласен. Имхо - бред. Но именно в линейке NT! В которой доступ к аппаратным ресурсам компьютера, например обращение к порту ввода/вывода, дозволено только из нулевого кольца. А пользовательская программа работает в 3-тьем кольце. И там адреса портов ввода/вывода не имеют никакого смысла. Какое-бы "управление" не было бы передано программе. Конечно есть сторонние библиотеки/компоненты, которые позволяют программе получить доступ к аппаратным ресурсам, а-ля как в ДОС/Win9x. Но это только значит, что они уже сделали для тебя многое.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c