Нужно подобие ОС для Ардуины

Тема в разделе "Микроконтроллеры AVR", создана пользователем Ariadna-on-Line, 9 ноя 2019.

  1. asam

    asam Гик

    Обычный бутлоадер всегда "включен на сериал". После ресета он ждет если что- нибудь придет по сериал. Если ничего не приходит в течении 1 секунды, то запускает программу из флэша. Если приходит, то смотрит какая команда и выполняеет ее. Если команда незнакомая то опять же запускает программу из флэша. Список команд можно посмотреть здесь - https://github.com/Optiboot/optiboot/blob/master/Wiki/HowOptibootWorks.md
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Спасибо. Моя Ардуино ИДЕ 1.8.5 отправляет 0x30 0x20.
    "...All other commands will result in a success response if they are immediate followed by CRC_EOP (0x20, ' ') (ie they are ignored), or a WDT reset (start applicatin) otherwise."
     

    Вложения:

    Последнее редактирование: 16 ноя 2019
  3. Unixon

    Unixon Оракул Модератор

    Так все же какой реально сценарий использования такого решения?
    Автообновление прошивки загрузчиком с SD карты или еще что-то?
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Именно так. Бутлоадер с SD - нашелся. Но он, наоборот - не грузит по сериалу с ПК. Тупо объединить два исходника и вставить процедуру выбора источника загрузки - не проблема, но это ссумирует размер. Влезет, но не "комильфо". Сейчас нету программатора, Уже попробовал бы. Доберусь - попробую.
     
    Последнее редактирование: 23 ноя 2019
  5. Unixon

    Unixon Оракул Модератор

    @Ariadna-on-Line , а атмега какая, 328P ?
    На 328-ой секцию загрузчика можно до 4Kb растянуть.
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Да, 328P. Хотел, по "безрыбью", на Протеусе глянуть. - Не хочет симулить, вылетает по ошибке "Invalid opcode 0xFFFF at PC=0x0002". Бутлоадеры ему не нравятся ВСЕ.
     
    Последнее редактирование: 23 ноя 2019
  7. NMi

    NMi Нерд

    Кто тебе мешает "изобрести" некий Header для идентификации прошивки? Носитель может быть любой, хоть SPI хоть I2C... хоть Serial да хоть БлюПуп)))
    Проявить смекалку и сделать собственный заголовок, типа сколько и куда писать и обычным бутлоадером записать в камень, причём здесь даже Reset не понадобится, всё делается на аппаратном уровне просто и запросто.
    Даю установку - МОЖНО!!!
     
  8. NMi

    NMi Нерд

    Всему виной не слишком "прямые" руки, Proteus тут нИпрИчОм.
    Кстати, можешь в AVRStudio симульнуть, я точно свой бутлоадер в ней отлаживал (пока с протеусом не познакомился)
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Это форум - не место для призывов проявлять смекалку. Если умеете чего - выкладывайте. А залихватцкие реплики - без пользы. Их тут наслушались. Выкладывайте схемы, печатки, прошивки - обсудим.
    2. "Любой" носитель - бессмысленен. Нужен компактный, стандартный для ПК и доступный Ардуине. Это только - SD. Других не знаю.
    Подскажите как заставить Протеус симулировать бутлоадеры - буду весьма признателен. Я схемотехник, поэтому в программах - не ...очень.
     
    Последнее редактирование: 25 ноя 2019
  10. NMi

    NMi Нерд

    Процессор при перезапуске в любом случае "ныряет" в код бутлоадера а уже потом передаёт управление в основную программу. Посему я не вижу препятствий в отладке бутлоадера посредством Протеуса.
    Про SD карту... тогда в любом случае придётся проявить смекалку и придумать некий формат хранения прошивки на карте, чтобы записать её в МК.
    Производить запись одновременно по Serial или через SD явно не получится, что-то одно. Хотя можно написать свой бутлоадер, который на начальном этапе "определиться" откуда брать данные.
     
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Процессор ныряет туда, куда ему фузы указывают. И это не всегда бутлоадер. Не каждый процессор ATmega328P - Ардуина.
    2. Может вы препятствий и не видите, но Протеус об этом не знает. Он просто вылетает с ошибкой.
    3. Не надо смекалок, всё придумано до нас - файл.bin
    4. ..запись ОДНОВРЕМЕННО по Сериал ИЛИ через SD... :>))) Логический нонсенс однако.
    5... который определится откуда... - Так нарисуйте (на словах хотя бы) алгоритм чего проверять. А лучше выложите готовый.
     
    Последнее редактирование: 25 ноя 2019
  12. NMi

    NMi Нерд

    1. On reset, Optiboot starts and reads the reset reason from MCUSR. For any cause other than "external reset", the application is started immediately. Otherwise, optiboot attempts to download new application software:
    Думаю, что можно перевести переводчиком, если смысл непонятен.
    Оказываеццо, проц всегда ныряет в бут, если фузы стоят "ардуиновские"
    2. Сказать, показать протеусу бутлоадер.
    3. Если уже всё придумано - зачем тогда спрашивать?
    4. Никакой это не нонсенс, можно и так и так сделать.
    5. А это самый классный вариант - лучше выложить готовый )))

    Взять исходник оптибута + исходник SD-бута, объединить их в одно целое. (ну раз уже всё придумали за нас) Всё.
     
    b707 нравится это.
  13. b707

    b707 Гуру

    зачем тогда лезете в дебри?
    Без досконального разбора кода бутлоадера ничего не выйдет. Так что либо становитесь "очень" в программировании, либо бросайте эту затею
    А почему для решения этой задачи надо обязательно эмулировать бутлоадер в протеусе - вообще непонятно.
     
  14. asam

    asam Гик

    Чтение\запись SD карточки поблочно это достаточно просто. Но как только начинается речь о "файл.bin" это значит нужна поддержка файловой системы. FAT32 достачно проста, но даже с такой простой системы размер кода вырастает во много раз по сравнению с блочными операциями.
    Поэтому реализовав упрощенный вариант храниния прошивок на карточке можно заметно упростить бутлоадер.
     
  15. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Прочитайте сообщение #44.
     
  16. NMi

    NMi Нерд

    Сразу видно, что человек в теме. Коротко и ясно всё написал. Вот именно по этому я и говорил о неком своём формате, который нужно именно придумать, чтобы бутлоадер уместился в секции RWW.
     
  17. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Речь о работе Протеуса, точнее о тонкостях его НЕработы, не о программировании вообще. 2. Никакой "обязательности" нет. Просто интересно "погонять". 3. Нет программатора под руками. Нечем программить. 4. Тема создана для желающих поделиться опытом. Надеюсь.
     
  18. asam

    asam Гик

    Как раз там и написано

    Поэтому и сказал как можно существенно уменьшить размер загрузчика. Но судя по тому, что вы
    , то это выше вашего пониманимания.
     
  19. NMi

    NMi Нерд

    1. В таком случае НЕОБХОДИМО очень ясно представлять работу процессора в ардуине. Всё дело в том, что сама ардуина даёт ххх.bin файл, который должен быть размещён во флэше. А бутлоадер размещается в секции RWW, что никак не относится к обычной памяти программ!!! ИМЕННО ПОЭТОМУ Протеус ругается на неверный тип команды, т.к. её там нет!!!
    4. Для того, чтобы полностью иметь возможность эмуляции проца - необходимо "склеить" прошивку и бутлоадер в один бинарник и подсунуть его Протеусу. Естественно, во фьюзах указать размер бута и адрес старта. Уотт только тогда Протеус будет "нырять" в бут при старте!!!
    Я сам так в протеусе не извращался, я делал в аврстудио... по аналогии... думаю, что дебаггеры работают по сходному принципу и должно "всёпрокатить"
    Я чем мог - помог! )))
     
  20. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Спасибо. Вы действительно помогли. Я реально забыл, что Протеус - это всё-таки отладчик, а не имитация реального процессора. Протеус "вылетает" аварийно, если его "выносит" на непрограммированный участок памяти "пациента", а реальный проц лежит на столе и никуда не вылетает. Только кварцем молотИт.
    МММдя. Привык понимашшш с железками работать. Теперь я Протеуса замордую.
     
    Последнее редактирование: 26 ноя 2019