OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 23 Октябрь, 2018 00:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 102 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 12:54 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Александр Ильин писал(а):
Покажите ваш модуль Kernel.

школьная сборка
кернел в аттаче:


Вложения:
Kernel.odc [64.92 КБ]
Скачиваний: 103
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 12:56 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1086
___ писал(а):
Александр Ильин писал(а):
Забыли перезапустить ББ.

не забыл.

А скомпилировать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 12:57 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Александр Ильин писал(а):
Для сравнения попробуйте в Кумире убрать вызов "влево". Остановится?

я не утверждал, что кумир никогда не зацикливается.
но когда робот разбивается, выполнение останавливается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 12:58 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Trurl писал(а):
___ писал(а):
Александр Ильин писал(а):
Забыли перезапустить ББ.

не забыл.

А скомпилировать?


Цитата:
вызов халт я раскомментировал и модуль перекомпилировал, изменилось то, что теперь повисший бб реагирует на контрол+брэйк (и то далеко не всегда, в старых бб версии до сп3 контрол брэйк срабатывал вроде хорошо, а в школьной не всегда).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 13:08 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
___ писал(а):
школьная сборка
кернел в аттаче:
Должно работать, если только именно этот модуль Kernel использован в BlackBox.exe.
Опишите симптомы: Ctrl+Break никогда не помогает при зацикливании или помогает, но не всегда либо не сразу?
В первом случае попробуйте Ctrl+Shift+Break. Сообщите результат.
Во втором случае напишите, какая у вас операционная система, сколько ядер у процессора, и попробуйте приложенный BlackBox.exe:
Вложение:
BlackBox.zip [37.04 КБ]
Скачиваний: 102


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 13:25 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Александр Ильин писал(а):
___ писал(а):
школьная сборка
кернел в аттаче:
Должно работать, если только именно этот модуль Kernel использован в BlackBox.exe.
Опишите симптомы: Ctrl+Break никогда не помогает при зацикливании или помогает, но не всегда либо не сразу?
В первом случае попробуйте Ctrl+Shift+Break. Сообщите результат.
Во втором случае напишите, какая у вас операционная система, сколько ядер у процессора, и попробуйте приложенный BlackBox.exe:
Вложение:
BlackBox.zip


контрл+брэйк помогает не всегда
иногда работает четко, сразу выбрасывает трап и все ок, а иногда глухо, подождав время и понажимав неск раз приходится закрывать приложение. (но последовательность действий четкую сформулировать не могу. делаешь одно и тоже а результаты разные. либо стабильно виснет, либо стабильно трап выкидывает норм).
на хосте стоит вин7-64 (в виртуальной машине есть винХП, там контрл+брэйк вроде не сбоил, но там только для эксперимента запускал, а постоянно не работаю. раскомментирвоание халта и в хп дало реагирование на контрл+брэйк но сам робот зацикливается на цикле)

сейчас попробую ехе...

с новым экзешником тоже самое: в вин7-64 один раз полностью зациклился. в винХП зациклился но по контрл+брэйку выкинул трап. (т.е. робот все же при разбивании не перестал работать)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 13:33 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1086
___ писал(а):
хотелось бы конечно без выброса трапа, просто остановка программы и робот покрасневший...

Так не бывает. Программа же не знает, что робот сломался, с чего бы ей останавливаться? Единственная возможность - выбросить трап.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 13:37 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Trurl писал(а):
___ писал(а):
хотелось бы конечно без выброса трапа, просто остановка программы и робот покрасневший...

Так не бывает. Программа же не знает, что робот сломался, с чего бы ей останавливаться? Единственная возможность - выбросить трап.


я же не настаиваю(вдруг есть возможность трапы перехватывать и сразу закрывать, хотя опять же определять, что такие перехватывать надо и не показывать, а все остальные показывать...) но сейчас она сама и трап не выкидывает(у меня)... хотя у Александра на скриншоте трап не от клавиатурного прерывания...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 13:44 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
___ писал(а):
контрл+брэйк помогает не всегда
иногда работает четко, сразу выбрасывает трап и все ок, а иногда глухо, подождав время и понажимав неск раз приходится закрывать приложение. (но последовательность действий четкую сформулировать не могу. делаешь одно и тоже а результаты разные. либо стабильно виснет, либо стабильно трап выкидывает норм).
на хосте стоит вин7-64 (в виртуальной машине есть винХП, там контрл+брэйк вроде не сбоил, но там только для эксперимента запускал, а постоянно не работаю. раскомментирвоание халта и в хп дало реагирование на контрл+брэйк но сам робот зацикливается на цикле)

сейчас попробую ехе...
___ писал(а):
раскомментирвоание халта и в хп дало реагирование на контрл+брэйк но сам робот зацикливается на цикле
Наличие халта не влияет на работу Ctrl+Break. Попробуйте написать вот такой цикл:
WHILE TRUE DO HALT(20) END. Неужели не будет окна трапа? Если трап всё же будет, значит раскомментирование HALT'а не получилось.

Итак, мы решаем две разные проблемы.

Первая - ненадёжная работа Ctrl[+Shift]+Break. Здесь может быть проблема у одноядерных процессоров, которую можно попробовать решить путём поднятия приоритета нити, отвечающей за перехват Ctrl+Break. Вот здесь приложен BlackBox1.exe с поднятым приоритетом:
Вложение:
Комментарий к файлу: Повышен приоритет KeyboardWatcher.
BlackBox1.zip [37.07 КБ]
Скачиваний: 92
Попробуйте простой цикл WHILE TRUE DO END и проверьте работу Ctrl+Break. Прерывает ли? Надёжно ли работает или через раз?

Вторая проблема - мистическое отсутствие трапа после раскомментирования HALT. Проверьте просто так, работает ли вызов HALT(20)? (Должен показывать окно трапа.) Если просто так работает, а в SkRobot - нет, значит что-то не так раскомментировали или не то скомпилировали, не перезапустили и т.п. Должно быть так:
Код:
   PROCEDURE Error;
   BEGIN
      Dialog.Beep;
      robo.err := 1;
      IF trap#NIL THEN trap ELSE  HALT(20)  END;
   END Error;
...
   PROCEDURE Step(rhumb: INTEGER);
   BEGIN
      IF robo.err = 0 THEN
         IF Clear(rhumb) THEN
            CASE rhumb OF
            | noord: DEC(robo.y);
            | zuid: INC(robo.y)
            | west:DEC(robo.x)
            | oost: INC(robo.x)
            END
         ELSE
            Error
         END;
         Update
      ELSE
      END;
   END Step;
Можете прямо отсюда скопировать, чтобы не проверять по буковкам.
Кстати, проверьте, не задано ли значение SkRobot.trap, ведь если SkRobot.trap # NIL, то HALT не вызывается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 13:49 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
___ писал(а):
Trurl писал(а):
___ писал(а):
хотелось бы конечно без выброса трапа, просто остановка программы и робот покрасневший...
Так не бывает. Программа же не знает, что робот сломался, с чего бы ей останавливаться? Единственная возможность - выбросить трап.
я же не настаиваю(вдруг есть возможность трапы перехватывать и сразу закрывать, хотя опять же определять, что такие перехватывать надо и не показывать, а все остальные показывать...) но сейчас она сама и трап не выкидывает(у меня)... хотя у Александра на скриншоте трап не от клавиатурного прерывания...
Господа, я вас примирю: ББ поддерживает "тихий трап". Это прерывание работы без отображения окна трапа: HALT(128).
128 - это волшебное число.

Почему это не документировано? Не знаю. В русскую документацию я дописывал, а в английской этого не было. Если поглядеть в Kernel.TrapHandler, то там есть такие строки:
Код:
IF err = 128 THEN   (* do nothing *)
ELSIF ...
Есть ещё Kernel.InstallTrapViewer, Kernel.Start, Kernel.Try. Если назначить пустой обработчик, то трап можно проигнорировать.


Последний раз редактировалось Александр Ильин Вторник, 07 Февраль, 2012 14:04, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:03 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Код:
MODULE AK_ex1;
   IMPORT  Log := StdLog,  In := i21sysIn,  Math;
   
   
   
BEGIN
   WHILE TRUE DO
      HALT(20)
   END;
END AK_ex1.

такой модуль выкидывает трап на обоих системах

подсистема Sk, если есть вероятность, что в ней сделал что-то неверно:
Вложение:
Sk.7z [35.01 КБ]
Скачиваний: 97


и модули на которых экспериментирую. там еще есть всякие "odc02635" образовавшиеся если это поможет...
Вложение:
Mod.7z [1.36 КБ]
Скачиваний: 98


Цитата:
Здесь может быть проблема у одноядерных процессоров

на данной системе процессор - кор2-квад...

с неработоспособностью контрл+брэйк (в школьных сборках) сталкивался на буке (слабый целерон 900), но там бб запускался под вайном из убунты, на это грешил...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:17 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
___ писал(а):
подсистема Sk, если есть вероятность, что в ней сделал что-то неверно
Закрыл ББ, удалил папку Sk, распаковал вашу, запустил ББ, запустил свой модуль:
Вложение:
Trap.png
Trap.png [ 57.41 КБ | Просмотров: 3231 ]
Даже ничего не перекомпилировал в ваших файлах.

Далее распаковал Mod.7z, скомпилировал модуль AK_Rob1 и запустил коммандером (дописал внизу модуля):
Вложение:
Trap.png
Trap.png [ 108.61 КБ | Просмотров: 3231 ]
Как видите, всё трапует нормально. ОС = WinXP 32 бит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:17 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1086
___ писал(а):
подсистема Sk, если есть вероятность, что в ней сделал что-то неверно:

Все верно.
Цитата:
и модули на которых экспериментирую. там еще есть всякие "odc02635" образовавшиеся если это поможет...

А Вы случайно не запускаете SkScript.DoThis перед вызовом модуля?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:24 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Александр Ильин писал(а):
Кстати, проверьте, не задано ли значение SkRobot.trap, ведь если SkRobot.trap # NIL, то HALT не вызывается.

вставил оператор Log.Bool(R.trap # NIL); перед и внутри цикла
весь журнал забился TRUE ....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:29 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Trurl писал(а):
А Вы случайно не запускаете SkScript.DoThis перед вызовом модуля?

не запускаю
часть SkScript.DoThis там появилась, когда мне стали внушать, что "так и надо", просто для проверки того, с использованием интерпретатора выполнение прекращается

Цитата:
Как видите, всё трапует нормально. ОС = WinXP 32 бит.

но у меня и под вирт машиной в хп не трапует.
сборка самого ББ?...

Цитата:
Далее распаковал Mod.7z, скомпилировал модуль AK_Rob1 и запустил коммандером (дописал внизу модуля):

я запускаю в стиле школьной сборки контрл+ф9


Последний раз редактировалось ___ Вторник, 07 Февраль, 2012 14:33, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:30 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1086
Александр Ильин писал(а):
Есть ещё Kernel.InstallTrapViewer, Kernel.Start, Kernel.Try. Если назначить пустой обработчик, то трап можно проигнорировать.

Я уже начал думать над этим (про 128 не знал), но возникает проблема. Как узнать, где именно робот сломался?
Похоже идея использовать один модуль для интерпретатора и для КП оказалась неудачной. Если бы был отдельный модуль робота для КП, в каждую команду можно было бы вставить предусловие и трап был бы всего в одном шаге от нужного места.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:42 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
___ писал(а):
вставил оператор Log.Bool(R.trap # NIL); перед и внутри цикла
весь журнал забился TRUE ....
Ну вот, одну проблему (почти) решили. По умолчанию там должно быть NIL (например, при свежем запуске ББ), тогда трап будет работать. При использовании модуля SkRoboScript назначается непустое значение, что отключает трап. Если нужен трап, вызывайте перед своей программой R.SetErrorHandler(NIL), и будет у вас всё как в Кумире.
Как я уже говорил, можно вместо HALT(20) написать HALT(128), чтобы не отображать окно трапа, но это на усмотрение Trurl.

Скажите, BlackBox1.exe (с повышенным приоритетом) так же плохо ведёт себя или всё-таки надёжно реагирует на Ctrl+Break в Win7?
Если работает более надёжно, то можно рекомендовать данное исправление для включения в прочие версии ББ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:44 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
целиком папка бб
Вложение:
BlackBox.Shkola-robot-ex1.7z [3.57 МБ]
Скачиваний: 92


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:48 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Trurl писал(а):
Как узнать, где именно робот сломался?
Если речь о месте ошибки в исходном тексте программы, то это противоречит желанию не видеть и не объяснять ученикам окно трапа. Кроме того, Info21 недавно высказывался в духе, что не надо это видеть:
Info21 писал(а):
Причём *без* обратной связи насчёт где именно оно в программе гробанулось :)
Штоб крепче думали :)
Можно дать на выбор два обработчика: "тихий" и траповый, и задавать их вызовом SetErrorHandler. Кому какой нравится.
По умолчанию можно сделать траповый, а в тексте трапа указать, как его можно отключить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Еще один робот
СообщениеДобавлено: Вторник, 07 Февраль, 2012 14:50 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Александр Ильин писал(а):
___ писал(а):
вставил оператор Log.Bool(R.trap # NIL); перед и внутри цикла
весь журнал забился TRUE ....
Ну вот, одну проблему (почти) решили. По умолчанию там должно быть NIL (например, при свежем запуске ББ), тогда трап будет работать.

в документации к роботу было
Цитата:
Перед использованием интерпретатор небходимо настроить - подключить синтаксический анализатор и модуль исполнителя.
Модуль SkRoboScript содержит процедуру Init, которая и выполняет эту задачу.
Вызов SkRoboScript.Init можно вставить в Config.Setup

эту строчку я в конфиг вставлял, и компилировал

Цитата:
Скажите, BlackBox1.exe (с повышенным приоритетом) так же плохо ведёт себя или всё-таки надёжно реагирует на Ctrl+Break в Win7?

пока ничего сказать толком не могу. тк последовательность действий, когда бы повисала стабильно не выработал. последние несколько запуском обычным ехе проводил и не повисало.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 102 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB