Pico после перезагрузки ничего не помнит

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Yo!, 16 июн 2016.

  1. Yo!

    Yo! Нуб

    Здравствуйте, Форумчане!

    Приобрел два контроллера: Iskra JS и Pico и столкнулся со странной проблемой.
    Контроллеры после перезагрузки очищают свою память. Я связался с Технической поддержкой и получил рекомендацию в настройке IDE активировать пункт "SAVE on SEND". И действительно Iskra JS стала нормально хранить в памяти скетчи. А вот с Pico это не помогло. Как только я активировал "SAVE on SEND" IDE предложила мне обновить прошивку на новую, я обновился до версии 1.85. Но и это не помогло.
    Выглядит это так:
    1. при неактивном "SAVE on SEND" скетч "digitalWrite(LED1, 1);" нормально загружается и нормально исполняется, но слетает после перезагрузки.
    2. при активном "SAVE on SEND" тот же скетч загружается, но выдается ошибка:
    _____________________________________
    http://espruino.com
    1v85 Copyright 2016 G.Williams
    >echo(0);
    Uncaught Error: Function "setBootCode" not found!
    at line 1 col 3
    E.setBootCode("setTime(1466099714.553);\ndigitalWrite(LED1, ...
    ^
    =undefined
    >
    ______________________________________

    Пожалуйста, помогите кто чем может :)
     
  2. NikitOS

    NikitOS Король шутов Администратор

    на Piko нет ЕЕPROM (энэргонезависимой памяти т.к онауказывается в характеристиках
     
  3. Yo!

    Yo! Нуб

    Как нет?

    Вот же:
    Pico работает на частоте 168 МГц. 32-битный микроконтроллер ARM Cortex-M4 предоставляет 384 килобайта флеш-памяти для хранения прошивки интерпретатора JavaScript и программного кода, а также 96 КБ оперативной памяти для их работы.
     
  4. ИгорьК

    ИгорьК Гуру

    А ручной командой save () пробовали?
     
  5. r1000ru

    r1000ru JS-технократ

    На STM32 нет EEPROM, но есть flash память. Разница в них в том, что первая медленнее, но поддерживает многократную перезапись. Вторая быстрее, но количество циклов ограничено примерно 10000 (что весьма не мало). У AtMega есть и то, и другое. EEPROM для записи данных пользователя, чтобы не потерять их при выключении, flash - для прошивки. STM32 сохраняет прошивку только во флэш. Для сохранения данных - существуют специальные адреса в оперативной памяти (16 килобайт), которые питаются, так же как и часы реального времени микроконтроллера, от специального пина VBat, к которому напрямую подключается батарейка.
    Ошибка записи на Pico происходит, вероятнее всего, из за разных версий прошивок. Попробуйте обновить прошивку Pico до последней и все должно заработать.
     
    Yo! нравится это.
  6. nailxx

    nailxx Официальный Нерд Администратор

    Nope!

    Save on Send — это флажок, который пролобирован Амперкой. Он реализован через новую функцию setBootCode. Эта функция уже есть в прошивке Iskra JS, но в стабильной версии прошивки Pico её пока нет, только в edge-версии.

    Pico научится сохранять программы также, как Iskra JS, когда авторы Espruino выпустят новую мажорную версию (1v86). Зависит это от них, но думаю вопрос пары недель.

    До тех пор проще всего набирать в терминале save() для сохранения загруженной программы.
     
  7. r1000ru

    r1000ru JS-технократ

    Но те, кто хотят работать с последней версией прошивки - читайте ниже :)
    1. Если вы работаете в Espruino IDE, установите устаревшую Iskra IDE - Espruino IDE не может перепрошить Espruino Pico с той прошивкой что сейчас в ней установлена. Если при прошивке Iskra IDE у вас будет ругаться на невозможность прошить - значит прошивка более свежая и нужно прошивать из Espruino IDE. После перепрошивки Iskra IDE можно удалить.
    2. Выбираете Настройки (Settings)->Flasher
    3. Включаете Espruino Pico в USB порт с зажатой кнопкой, чтобы она вошла в режим обновления прошивки. Когда диоды будут попеременно мигать - кнопку можно отпустить.
    4. В разделе Advenced Firmware Update указываем ссылку на прошивку: http://www.espruino.com/binaries/git/commit_date/2016-05-12 12:32:16 +0100/espruino_1v85.506_pico_1r3_wiznet.bin
    5. Нажимаем на кнопку Advanced flash firmware, отвечаем на вопрос о типе платы (Espruino Pico) и дожидаемся окончания прошивки.
    6. Перевтыкаем Espruino Pico (уже без удержания кнопки), запускаем Espruino IDE, включаем галочку Save on Send и пользуемся. Сохранение и прошивка будет работать, как и на Iskra JS.
    PS.: Приведена ссылка на самую последнюю сборку, но не забывайте, что она отладочная, а не стабильная. По этому возможны сюрпризы :)
     
    acos, nailxx и Yo! нравится это.
  8. Yo!

    Yo! Нуб

    Пробовал SAVE() - ошибка не появляется, но и скетч не заливается и не исполняется.
     
  9. ИгорьК

    ИгорьК Гуру

    А чтобы исполнялся нужно его оформить соответствующим образом. Сейчас с телефона помочь не могу. Возможно вечером.
     
  10. nailxx

    nailxx Официальный Нерд Администратор

    ИгорьК, видимо, имеет в виду, что тот код, который должен быть исполнен на старте должен быть обёрнут в функцию с именем onInit:

    Код (Javascript):
    function onInit() {
      digitalWrite(P7, 1);
      // and other stuff to do on start
    }
    Загружаете и говорите:

    Код (Text):
    save()
     
  11. Yo!

    Yo! Нуб

    Да, Ваш метод помог мне. Действительно работает. Спасибо человеческое!
     
  12. ИгорьК

    ИгорьК Гуру

    Ну да. Я об этом. Это же в Вики описано.