Как запустить Интерпретатор при загруженной программе

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем VGrishin, 18 сен 2016.

  1. VGrishin

    VGrishin Нуб

    В результате некорректного задания параметров программы ресурсы процессора полностью заняты её выполнением. При этом он не реагирует на команды Espruino Web IDE. Более того,
    даже не создается устройство /dev/tty.... в ОС ПЭВМ.
    Т.е. нужно, чтобы после включения платы Интерпретатор не запускал бы программу, а был бы готов к загрузке новой программы.
    Манипуляции с BTN1 (как это указано в https://geektimes.ru/company/amperka/blog/273664/) к успеху не привели.
     
  2. ATishchenko

    ATishchenko Нерд

    Понимаю, но все же попробуйте еще разок следующее:
    1. Держим BTN1 и нажимаем RESET - лампочки на плате должны начать перемигиваться.
    2. Идем в настройки Espruino IDE и выбираем Flasher.
    3. Нажимаем кнопочку Flash Firmware и идем по шагам.
    Должно спасти и заодно получите прошивку с HTTPS/SSL-TLS.
    Отпишите по результатам.
     
    Arnoobino нравится это.
  3. sys

    sys Злобный Буратино Модератор

    Выключить питание.
    ...выждать паузу и собраться с духом... :)
    Зажать BTN1 и не отжимая включить питание. После включения BTN1 отпустить.
    ...замигают светодиоды на плате...
    Нажать BTN1 еще раз.
    ...код из памяти запущен не будет - интерпретатор готов к работе...
     
    Последнее редактирование: 29 сен 2016
    ИгорьК нравится это.
  4. ATishchenko

    ATishchenko Нерд

    Точнее, зажать BTN1 и ткнуть RESET, после можно сразу отпустить.
     
  5. sys

    sys Злобный Буратино Модератор

    Reset не нужен... внес уточнения в свой пост выше.
     
  6. ИгорьК

    ИгорьК Гуру

    Подтв
    Это уже суровая правда жизни?
    Я почему так допрашиваю... У меня Искра сейчас одна и она трудится "на ниве". Я приезжаю, ее надо извлечь, перепрограммировать и обратно затолкать.
    Делаю это, иногда сам не понимаю что сделал (с точки зрения действий с железом).
     
    sys нравится это.
  7. sys

    sys Злобный Буратино Модератор

    Перед тем как внести уточнения для данного способа проверил в живую на плате с последней прошивкой.
     
    ИгорьК нравится это.
  8. VGrishin

    VGrishin Нуб

    После включения питания и отпускания BTN1 светодиоды мигают.
    Если нажать BTN1 еще раз - мигать перестают. Но код вполне успешно запускается.
    При этом WEB IDE подключается, при попытке соединения появляется сообщение Connected,
    появляется приглашение >, но интерпретатор ни на что не реагирует.

    Поэтому я после включения питания и отпускания BTN1 (когда светодиоды мигают)
    загрузил программу без зацикливания.
    Никаких обычных текстовых сообщений, возникающих при загрузке не было.
    Отключил питание. Включил питание. Запустилась старая программа (которая циклилась).
    Соединился с платой. Нажал Ctrl+C. Попал в режим отладки. Еще раз Ctrl+C - вышел из режима отладки. После этого интерпретатор стал реагировать на команды.
     
    Последнее редактирование: 29 сен 2016
  9. sys

    sys Злобный Буратино Модератор

    Брр... Я прям таки растерян :) У меня срабатывало. А какая у Вас версия прошивки? И изменится ли ситуация, если перед подключением платы после перегрузки перезапустить IDE? Странно все это...

    В случаях когда программа глючит, а интерпретатор тормозит, но отзывается еще помогает команда reset() - набираете (в консоли из-за тормозов может не отобразиться сразу) и как только появится проблеск в тормозах она сработает и сбросит состояние не отключаясь...
     
    Последнее редактирование: 29 сен 2016
  10. sys

    sys Злобный Буратино Модератор

    Заполучил очередную искру с прошивкой 1.85.1113 и решил испытать на ней несколько равносильных способов... Залил циклический код и получил безмолвный интерпретатор... Затем попробовал разциклить....

    ...способ 1: Выдернул шнур, зажал btn1, вставил шнур, отжал, замигали светодиоды, нажал btn1, пару раз подмигнул busy и потух, перезапустил IDE (иногда после таких "ресетов" IDE тупит и не хочет коннектиться), соединился, вошел в интерпретатор и... он "живой".

    ...способ 2 (самый простой, но не всегда срабатывает с первого раза. тоже самое что и 1, но с reset): Не выключая питания зажать btn1 и нажать reset, отжать btn1, замигают лампочки, подождать некоторое время и лишь потом нажать btn1 (т.к. если сразу нажать то больше шансов, что не сработает)... и далее как в способе 1. В итоге опять "живой"...

    ...способ 3 (как сразу предлагал ATishchenko, но мне ни разу не пришлось им пользоваться для сброса - хватало первых 2х): добраться до мигания светодиодов любым из 2х первых способов (жестко или с reset), запустить IDE -> зайти в SETTINGS -> FLASHER и нажать Flash Firmware, а далее выбрать Iskra.js из списка в Firmware Update и далее прошить микроконтроллер и получить нулевый заведомо "живой" интерпретатор.

    Больше способов не знаю :) Как итог - и на 1.85.1113 и на 1.86.164 удалось восстановить общение с интерпретатором... может я не слишком грубо с ним общался...

    VGrishin, если не жалко и есть желание, можете поделиться "злым" кодом - я помучаю искру потестирую :)
     
    Последнее редактирование: 29 сен 2016
    brurt и ИгорьК нравится это.
  11. VGrishin

    VGrishin Нуб

    У меня после отжатия и нажатия BTN1 светодиод busy не тухнет, загорается снова. И консоль ни на что не реагирует. Однако, если при этом нажать Ctrl+C, то можно попасть в отладчик, а нажав Ctrl+C еще раз выйти в интерпретатор.

    Забавно, что теперь иногда сразу срабатывает Ctrl+C, даже без манипуляций с BTN1.
    Раньше мне этого не удавалось. Перед написанием исходного сообщения я перепробовал все возможные сочетания Ctrl+C, Ctrl+Q, Ctrl+X, Ctrl+Z и т.д.

    А код вот такой:

    Код (Javascript):

    function go() {
      while (true) {
    // будет выполняться вечно
      analogWrite(A4, 0.0+0.5);
      analogWrite(A4, 0.309016994*0.5+0.5);
      analogWrite(A4, 0.587785252*0.5+0.5);
      analogWrite(A4, 0.809016994*0.5+0.5);
      analogWrite(A4, 0.951056516*0.5+0.5);
      analogWrite(A4, 1.0*0.5);
      analogWrite(A4, 0.951056516*0.5+0.5);
      analogWrite(A4, 0.809016994*0.5+0.5);
      analogWrite(A4, 0.587785252*0.5+0.5);
      analogWrite(A4, 0.309016994*0.5+0.5);
      analogWrite(A4, 0.0+0.5);
      analogWrite(A4, -0.309016994*0.5+0.5);
      analogWrite(A4, -0.587785252*0.5+0.5);
      analogWrite(A4, -0.809016994*0.5+0.5);
      analogWrite(A4, -0.951056516*0.5+0.5);
      analogWrite(A4, -1.0*0.5+0.5);
      analogWrite(A4, -0.951056516*0.5+0.5);
      analogWrite(A4, -0.809016994*0.5+0.5);
      analogWrite(A4, -0.587785252*0.5+0.5);
      analogWrite(A4, -0.309016994*0.5+0.5);
    }
    }
      setTimeout(go, 500);
     
     
    Последнее редактирование: 30 сен 2016
  12. VGrishin

    VGrishin Нуб

    Версия. 1v85.1113
    Способ, прямо скажем, мутный. Однако бывают и более тяжелые ситуации, когда не удается подключиться к плате. Т.е. требуется несколько попыток перезапуска платы, перезапуска IDE и выбора порта, чтобы получить, наконец, состояние Connected to port... Хотя консоль при этом не реагирует.
     
  13. ATishchenko

    ATishchenko Нерд

    Знаете, а тут у нас большая проблема в коде... Вечный while для JS хуже смерти... У нее идеология другая...
    Этим циклом вы мешаете движку JS обрабатывать остальные задачи, кроме чистых прерываний. Я бы на Вашем месте рассмотрел возможность убрать while, а setTimeout заменить на setInterval с более коротким временем...
     
  14. VGrishin

    VGrishin Нуб

    Я, в общем-то и не спорю:)
    JS не изучал. Работаю исключительно с вычислительными задачами, для которых JS, мягко говоря, не подходит. Единственное, что хотелось бы отметить, так это то, что обмен с USB портом управляется программно. А в этих условиях требуется достаточно хорошо сделанная иерархия прерываний. В том числе немаскируемые прерывания. Вероятно, с этим здесь есть определенные проблемы.
    А если рассматривать задачу генерации синуса и косинуса, то мне было бы гораздо проще и быстрее сделать все на жесткой логике средней степени интеграции (генератор импульсов, счетчик адреса, ПЗУ, два ЦАПа). И работало бы это гораздо надежнее. Но увы, программатора у меня нет....
     
  15. ИгорьК

    ИгорьК Гуру

    Шил сегодня Искру несколько раз.
    Кнопку пользователя действительно надо нажимать два раза. Один - мало.
    Способ 1.
     
  16. sys

    sys Злобный Буратино Модератор

    Пятница... Чего-то я плохо соображу - способ сработал или пришлось дополнительные действия совершать?
     
  17. ИгорьК

    ИгорьК Гуру

    Способ, когда :
    1. Выключить.
    2. Зажать Батон1.
    3. Включить.
    4. Отпустить Батон1.
    5. Нажать Батон1.
    6. Отпустить Батон1.
    ... можно действовать дальше.
     
  18. sys

    sys Злобный Буратино Модератор

    :) Спасибо, понял что стандартно отработал 1й способ. Я почему уточнил - я сейчас пытаюсь собрать по форуму все замеченные мной особенности Искры в один файл, а потом опубликую у себя на сайте. Поэтому, чем больше ньюансов выяснится тем лучше и полнее...
     
  19. ostrov

    ostrov Гуру

    Здравствуй, жестокий мир JS.
     
  20. ИгорьК

    ИгорьК Гуру

    Он нормальный и гдето нежный.
    Просто нет вменяемой вводной статьи ДЛЯ АРДУИНЩИКОВ в чем суть явления. Вот, подумывааю ее написать. Все достаточно просто.
    Сложно изменить логику написания программы. Особенно когда об этом нигде не рассказывается.
    Дело не в синтаксисе, а принципиально иной логике.