самодельный bootloader: AVRS vs Arduino IDE

Тема в разделе "Микроконтроллеры AVR", создана пользователем ostrov, 28 фев 2016.

  1. ostrov

    ostrov Гуру

    Немного странные для меня вещи происходят. Слегка переделал под собственные нужды бутлоадер для Atmega8 используя AVRS 7.0, скомпилировал, получился код порядка 1,2Кб, то есть в верхнюю память Меги, отведенную под него не влезает даже при минимальной планке захода (001С00). Убрал все лишнее, все равно получается 1076 байт хоть ты тресни. Ладно, загрузил под свою ответственность с адреса 1B00, удивительно, но заработало отлично. Отдельный вопрос почему, ведь вроде бы не должно было. Но дело даже не в этом. Ради смеха попробовал скомпилировать этот же кода на IDE был сильно удивлен его размером: 920 байт! То есть уложился в норматив, даже осталось немного. Загрузил его в легального 1С00 и все заработало как положено.

    Вопрос: каким образом IDE, который я всегда считал упрощенной пародией на AVRS, уделал его с таким отрывом? Код абсолютно одинаковый. Что то не оптимизировано в настройках Студии?
     
  2. Unixon

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

    Опции компиляции?
     
    ostrov нравится это.
  3. ostrov

    ostrov Гуру

    У IDE или AVRS? Все по умолчанию, и выбран один и тот же МК.
     
  4. ostrov

    ostrov Гуру

    Все, разобрался. Действительно забыл переключить с Debug на Release, теперь получились те же самые 920 байт. Век живи, век учись. Компиляторы значит у них идентичные? Только у IDE, стало быть, всегда -Os.
     
    Последнее редактирование: 28 фев 2016
  5. ostrov

    ostrov Гуру

    А что тогда по первому вопросу? Хотелось бы понять, каким образом код запущенный со сдвигом 250 байт от начала оказался полностью работоспособным? Случайно повело что вначале оказались данные и вспомогательные функции?
     
  6. Onkel

    Onkel Гуру

    да вроде бы даже тот же самый, все эти wiring"и работают поверх AVR GCC
     
  7. AlexU

    AlexU Гуру

    Дело в том, что при старте контроллер начинает выполнение кода с нулевого адреса. Если Вы зашивали только бутлоадер, то начало памяти должно быть пустое, т.е. содержать 0xFFFF. Данный op-code не является валидным для контроллера и он его просто пропускает. Таким образом счётчик команд (PC) дойдёт до старта бутлоадера и контроллер начнёт его выполнять.
    Вот только с таблицей прерываний не всё понятно. Если Ваш модифицированный бутлоадер использует прерывания и контроллер настроен так, что таблица должна быть расположена в начале секции бутлоадера, то всё должно было сломаться.
     
  8. ostrov

    ostrov Гуру

    Согласно выставленным фьюзам, контроллер начинает работу с адреса 1C00. А код бутдоадера ничинался с 1B00. Вот и непонятно почему он вообще работал, даже после загрузки рабочего кода.
     
  9. AlexU

    AlexU Гуру

    Что бы точно сказать, что да как. Нужно как минимум взглянуть на содержимое HEX-файла и фьюзов. Я исходил из предположения, что фьюзы дефолтные.
     
  10. Airbus

    Airbus Радиохулиган Модератор

  11. ostrov

    ostrov Гуру

    Вы его пробовали? Я вот пробовал. Мне не подошел.
     
  12. Airbus

    Airbus Радиохулиган Модератор

    Я-да.Под Меги 8-постоянно(под разные кварцы 4/8 мГц или без онного).Под Мегу 328 как написано в статье (был кетайский Duemilanova стал русским UNO да и память освободилась)А что Вам конкретно не подошло?
     
  13. ostrov

    ostrov Гуру

    Немного продолжу вопрос. Можно ли и если да то как подредактировать протокол передачи данных из IDE? Хочу попробовать сливать прошивку через RS485 на конкретное устройство в сети, для этого редактирование самого бутлоадера недостаточно, нужно модифицировать весь протокол.

    Я не понял до конца как он работает, сколько и чего ждет. В рукописной все прекрасно видно и замечательно выставляется руками. Самое главное - есть возможность переделать под собственные нужны, как например по вопросу выше.
     
  14. Tomasina

    Tomasina Сушитель лампочек Модератор

    у меня есть ProMini 5 В 16 МГц, можно ли ее прошить как ProMini 3,3 В 8 МГц (с тем же кварцем)? Или вообще на 128 кГц, если millis будет корректно работать.
    Короче, надо из нее сделать максимально маложрущую, для автономной работы от 18650.
    WDT нужен. BOD надо отключать, или это чревато?
     
  15. Onkel

    Onkel Гуру

    кварц поменяйте, и делов. Будет 8.
     
  16. Unixon

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

    F_CPU не забудьте поменять. Кстати, с millis (точнее, с кодом обслуживания таймера) возможны косяки при нестандартных частотах, нужно код проверять.
     
  17. ostrov

    ostrov Гуру

    Фъюзы разве не надо менять при смене кварца, особенно с 16МГц на 128КГц?
     
  18. Onkel

    Onkel Гуру

    на 8 не надо.
     
  19. Tomasina

    Tomasina Сушитель лампочек Модератор

    нету у меня других кварцев (и ехать из-за него 80 км лень). Используем то что есть - а именно 16 МГц ;)
    Есть ли вообще описание работы с этим конструктором бутлоадеров?
    Что значит "Частота генератора"? Это частота кварца?
    На что влияет галочка "Использовать делитель на 8"?.
    "Фактическая частота"- это то, на какой частоте будет в итоге работать МК?
     
  20. Unixon

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

    Должна менять фьюзы...