Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
2-1136524602
Paslei
2006-01-06 08:16
2006.01.22
Работа с полями MEMO


14-1135201622
N
2005-12-22 00:47
2006.01.22
Опрос. Общепит в вашем городе.


14-1135714438
TimeTable
2005-12-27 23:13
2006.01.22
поворот изображения. В чем ошибка?


3-1131524624
Mikolla
2005-11-09 11:23
2006.01.22
D7 - Oracle


14-1135381093
marh
2005-12-24 02:38
2006.01.22
Формы в делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский