![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| bagira |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Baa, спасибо за совет! Когда я сделала задержки после IN и OUT, программа начала обращаться к портам. До этого, данные, отправленные с контроллера, "зависали" и могли быть считаны при последующем запуске старой программы под DOS. Теперь старая программа их не находит, значит обращение к портам происходит правильно. Но дальше они (данные) куда-то исчезают, и не появляются в основной программе после вызова процедуры из DLL. Может быть, я неправильно передаю полученный из порта в AL байт в переменную? Например, MOV byte ptr D1,AL.
-------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
| remax |
|
|||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
Может это и банально, но в пошаговом режиме через отладчик Вы проверяли работу дельфийской программы? Это должно однозначно снять вопрос с правильностью вывода в порт -
1.Остановились перед командой OUT, проверили выходы порта 2.Выполнили команду OUT, проверили выходы порта Влияние времени исключается. -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
|||
|
||||
| bagira |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Я пыталась воспользоваться отладчиком Дельфи еще в самом начале этих проблем, но не нашла, где там смотреть номера портов? Подскажите, пожалуйста. Вопрос с выводом в порт решился, как ни странно, еще банальнее - с помощью набора из 8-ми светодиодов, который сегодня по моей просьбе сделали наши электронщики. Плату со светодиодами подцепили к выходному порту, и теперь все, что я вывожу, наглядно видно в 8-ми разрядах: 1 - светодиод горит, 0 - не горит. Так что с выводом стало более-менее ясно. Но не работает команда ввода данных во входные порты (IN), или данные теряются где-то дальше - при передаче между DLL и основной программой, т.е. в основную программу приходят одни нули. Как проверить, куда исчезают данные?
-------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
| remax |
|
||||
|
Доцент ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 686 Регистрация: 7.4.2002 Где: Украина, Харьков Репутация: нет Всего: 5 |
При отладке ассемблерной части проги Вы идете по командам, а номер порта сидит в регистре DX (см окно регистров).
Используй отладчик! А если не получается - поставь в тектсте программы вывод промежуточных сообщений. Например, на дисплей или в файл. Т.е. в контрольных точках поставить вызов вспомогательной процедуры выводящей информацию о состоянии регистра. Но лучше всего - разберись с отладчиком - там можно использовать точки останова, просмотр содержимого переменных и регистров.... P.S. А еще проще - убедись, что правильно передаешь значение мз DLL - взяв за основу свой принцип построй упрощенную DLL передающую наперед известное значение. Получилось - проблема не связана с передачей. Не получилось - исправляй. -------------------- Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку |
||||
|
|||||
| Baa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Че за бред? С какой стати он там сидит?
Ну и где он здесь сидит в DX? -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
||||
|
|||||
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: нет Всего: 57 |
Baa Для другой формы команды IN порт должен сидеть в DX.
|
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
может я недопонимаю, но если необходимо выжидать больше секунды, то функция Sleep должна подходить для этих целей... почему не попробовать?
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| Dmitry V.Abramov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: нет Всего: 4 |
man2002ua Там ведь еще и DLL зачем-то прикручена. Причем, возможно, сидящая в отдельном потоке и непонятно чем занимающаяся. При такой схеме sleep может приостанавливать вовсе не то, что требуется.
--------------------
/DVA |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
ну я не думаю, что используется оконная dll... речь наверняка идет об экспорте обычных функций (Bagira говорила - stdcall). В любом случае, увидеть весь код не помешает.
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
можно поподробней? Енто про тот случай, когда порт должен быть больше 255? -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Dmitry V.Abramov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: нет Всего: 4 |
Baa Зачем же так...
В любом случае. Особенно, когда не хочется жестко привязываться к номеру порта. Ведь никто, надеюсь, не отрицает наличие инструкции mov al, [bx] ?
Для out/outs - аналогично. --------------------
/DVA |
|||
|
||||
| bagira |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2858 Регистрация: 25.10.2003 Где: в тайге Уральских гор Репутация: нет Всего: 123 |
Привет всем!
1. В DLL - в процедуре обращения к портам - почему-то выдается сообщение об ошибке при: mov dpn,al, где dpn - переменная объявлена как byte, а в аккумулятор считан байт из порта: in al,dx (потом - временная задержка) Когда изменила конструкцию: mov byte ptr dpn,al то ошибка выдаваться перестала, но в основную программу нужное число все равно не передается. Убрала вообще строку с командой in, напрямую задаю: mov byte ptr dpn,7 Но результат тот же - вместо семерки в основную программу попадает ноль. 2. Проверить в пошаговом режиме с отладчиком опрос портов сегодня не удалось - у меня временно отобрали кабель для подключения прибора к ЭВМ. Дождусь понедельника. 3. man2002ua, не знаю, стоит ли приводить весь код - он довольно громоздкий, но позднее я приведу фрагмент непосредственного чтения портов. А сейчас - до свидания - заканчивается карточка Internet. -------------------- Сегодня ты не бродил, не искал, не любил - можно сказать - и не жил... Ф.Х. Дагларджа (Турция) http://zveriolginovour.ru/ https://vmeste.yandex.ru/zveriolginovour |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
да, код чтения/записи порта не помешал бы. И еще размеры задержек, к-е должны быть установлены для нормальной работы
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
bagira, а ты как связываешь переменные в DLL и переменные в основной программе ? Из приведенного кода я предполагаю, что ты просто объявила в DLL и в основной программе переменную dpn и думаешь, что при её изменении в DLL, она автоматом будет меняться и в основной программе ? Это не так. Самый простой способ - это создать разделяемую память (CreateFileMapping, MapViewOfFile) и туда поместить все переменные, которые должны быть доступны как для DLL, так и для основной программы. -------------------- С уважением, г-н Посол. |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
проще объйявить импортируемую преременную... извините, если плолхо пишу... снова ДР. -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |