Такая разная ATmega...Какая же последовательность прошивки

Тема в разделе "Arduino & Shields", создана пользователем Unikolai, 17 дек 2017.

  1. Airbus

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

    Типа затёрли Бутлоадер?Или как они у Вас без Загрузчика работают и грузятся?
     
  2. Airbus

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

  3. Airbus

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

  4. akl

    akl Гуру

    это то все понятно, вопрос скорее сугубо про авр-студию - она при компиляции показывает сколько занято памяти и пишет что-то типа 95% (.text + .data + .bootloader) - это значит 95% от общей памяти? и я уже сам должен оценить влезет ли при этом бутлодер?

    хотя это можно тупо посчитать, но щас нет под рукой студии, а вопрос возник как-то внезапно.

    да, похоже это процент от общей памяти.
     
    Последнее редактирование: 18 дек 2017
  5. Unikolai

    Unikolai Гик

    "Если Вы во всем разобрались и жаждете экспериментов то тогда на кой Черт Вам Ардуино IDE и Бутлоадер?Пишите на голом/чистом Си например в Студии или Кодвижн компилите и сразу оттуда шьете правда уже не через rx/tx а старым проверенным способом через 5 проводков или ISP программатор.И флэш сэкономите и вот он простор для творчества!"
    И
    "я уже набил руку в изготовлении плат с мегой, так что можно эксперементировать"
    где тут связь? вы сами то ее видите

    если судить по вашим ответам, то вы даже не в курсе, что все будет работать и без бутлоадера великий всемогущий высокомерный маг и чародей всея ардуино
    ничего сверхестественного сооружать я не хочу, у меня есть определенная задумка, и я старюсь ее воплотить в жизнь и пусть мои труды по сравнению со знаниями умениями как-го нибудь захудалого программиста не более чем ковыряние в песочнице, для меня это все ново и интересно и открывает огромную сферу, где это можно применить, даже в сфере, где я работаю

    когда я писал про то, что мне хотелось бы некоторые вещи знать подробнее это не значит, что я хочу писать что-то на неизвестном мне до селе языке по каким-то там причинам, для того, чтобы восхищаться автомобюилем не обязательно знать все аспекты его устройства и состав металла из которогшго он сделан
    если вам надоели одинаковые вопросы, плиз не мазольте глаза вот эта ваша негативщина,это ваше высокомерие лично мне нафиг не сдалось
     
  6. Unikolai

    Unikolai Гик

    "Без бутлоадера работать может. И даже лучше, запускается быстрее и памяти свободной больше. Но перепрошивать без программатора не получится." не я, а остров пишет, представляете
     
  7. akl

    akl Гуру

    без бутлодера все работает точно так же - разница только в способе заливки скетчей (с бутлодером через юсб-адаптер, без оного - через spi-программатор) ну и еще в количестве памяти, отжираемой бутлодером и некоторым периодом тупения при запуске.

    и не надо ругаться на аероплана - вы пишете довольно туманно и зачастую совершенно невозможно понять что вы там делаете и что происходит
     
  8. Unikolai

    Unikolai Гик

    я понял, что написал остров
    понимать что я там делаю вовсе необязательно в данной теме у меня был определнный общий вопрос и даже если я пишу что-то туманно это вовсе не значит, что мне можно писать всякую ерунду, то же самое, что над ребенком угарать

    я сам инженер занимаюсь в основном отоплением и вентиляцией промышленных и частных объектов, люди, с которыми я сотрудничаю обычно почти ничего не понимают в том, что им нужно, но если у них возникают вопросы я им по-человечески объясняю, хотя вопросы порой абсолютно дебильные
     
  9. akl

    akl Гуру

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

    Unikolai Гик

    не все он правильно писал
    гуглом и я пользоваться умею, это вылетает первыми же результатами вопрос же мой был совсем иной
    отлаживаю я через сериал,этого достаточно, ничего сверхъестественного я не делаю
    и еще раз повторюсь, каким бы тупым вопрос не был, это никому не дает право считать, что твой оппонент не человек
     
  11. akl

    akl Гуру

    кстати, тоже хотелось бы узнать как можно делать свой оптибут под свои параметры. видимо надо настраивать и компилировать вот эту штуку https://github.com/Optiboot/optiboot/blob/master/optiboot/bootloaders/optiboot/optiboot.c возможно в совокупности с каким-нибудь мейк-файлом.
     
  12. AlexU

    AlexU Гуру

    Многое уже сказали, но надеюсь буду полезным...
    Загрузчик это программа для МК. Пишется так же как и "обычные" прошивки и на тех же языках программирования с применением таких же библиотек. Поэтому загрузчик может выполнять любые задачи, а не только задачи по перепрограммированию отдельной части памяти МК. Но чаще всего загрузчик отвечает именно за перепрограммирование flash-памяти (а так же eeprom, но сейчас не о ней). Тут следует отметить следующее (простыми словами, более детально смотрите документацию): в некоторых AVR-ках (не во всех, а, например, в ATmega328P) flash-память делится на два вида -- первая часть (Read-While-Write Section) может перепрошиваться не только внешним программатором, но и при работе ядра МК; вторая часть (No Read-While-Write Section) может перепрошиваться только при выключенном ядре МК, т.е. только внешними программаторами. Вторая часть это и есть секция загрузчика -- программа, зашитая в эту секцию, может перепрошивать первую секцию flash-памяти, а может и не перепрошивать, а выполнять другие действия -- всё зависит от программиста.
    Загрузчик этот можно написать самому на тех же языках C/C++/Assembler, но это потребует времени. А можно взять готовые исходники, например, исходники Arduino-вских загрузчиков можно посмотреть здесь: https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders. Готовые исходники можно изменить по своему усмотрению и собрать бинарники -- *.hex файл для прошивки в МК -- а потом зашить в секцию загрузчика при помощи программатора.
    При написании загрузчика следует учесть, что размер доступной flash-памяти определятеся фьюзами, например, в случае с ATmega328P -- это фьюзы BOOTSZ0, BOOTSZ1 (минимум 512 байт, максимум 4096 байт).
    Запуск загрузчика можно призводить несколькими способами:
    1. Запрограммировать фьюз BOOTRST -- в этом случае при старте/рестарте МК начнёт выполнение кода из секции загрузчика (адрес определяется теми же фьюзами BOOTSZ0, BOOTSZ1), а не с нулевого адреса;
    2. Выполнить инструкцию перехода в секцию загрузчика из основной программы -- например, проверять состояние какого-либо пина и, при выполнении условия, осуществлять переход в секцию загрузчика.
    Так же код загрузчика будет выполнятся не зависимо от фьюза BOOTRST, если первая часть flash-памяти будет стёрта -- просто потому, что стёртая память содержит 'FF', а это код операции 'NOP' (ничего не делать), и МК "пробежавшись" по операциям "ничего не делать" в конце-концов "доберётся" до секции загрузчика и начнёт выполнять его код (при выполнении кода ядро МК не разделяет память на секции, ядро последовательно выполняет код во всей flash-памяти, "пробежавшись" до конца памяти продолжает выполнение с нулевого адреса).
    Что касается частоты МК. Сам по себе МК не может определить на какой частоте он работает, ему об этом нужно сказать. Как Вы это ему будете говорить зависит как от компилятора, так и от готовых библиотек. В компиляторах из коллекции GCC для указания желаемой частоты используется макрос F_CPU (в среде Arduino IDE используется параметр <имя_мк>.boot.f_cpu из файла boards.txt, значение этого параметра будет использоваться в качестве значения для макроса F_CPU). Этим макросом Вы говорите -- "я надеюсь, что частота МК, на котором будет работать моя прошивка, будет такой-то, если это будет не так, то моя прошивка будет работать не правильно." При чём этот макрос по большому счёту не является обязательным, но с этим макросом "жизнь намного проще". Хотя, если Вы запланируете динамическую смену частоты МК (например, для энергосбережения), то от этого макроса Вам прийдётся отказаться (и код, который использует этот макрос, прийдётся переписать). А относительно вопроса "то есть в загрузчике прописывается только частота мк?" правильным ответом будет -- "нет, не прописывается, но код генерируется с учётом частоты МК". Т.е. в бинарнике прошивки Вы не найдёте явным образом указание на частоту МК, но её можно будет определить по косвеным признакам. Так же следует отметить, что хоть и желательно что бы частота МК совпадала с частотой, указанной при компиляции прошивки, но при определённых условиях прошивка, тот же загрузчик, будет работать корректно и при не совпадающей частоте. Например, Вы собрали загрузчик для частоты 16 МГц, а МК работает на частоте 8 МГц, то при определённых условиях такой загрузчик, на таком МК будет работать корректно, нужно будет только скорректировать скорость USB-USART адаптера (уменьшить её вдвое).
    Если действительно хотите разобраться в AVR-ках, то досконально изучите полное описание МК, например, одного из самых распространённых -- ATmega328P: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf.
    AVR-ки очень похожи друг на друга и изучив досконально один документ, разобраться в других будет намного проще.
    А все эти "сторонние" ресурсы могут только запутать, т.к. нет гарантии, что "сочинитель" текста на том или ином ресурсе хорошо разбирается в теме. Даже, если человек очень хорошо разбирается -- тот же Di Halt -- но как и любой человек, может допустить ошибки или неточности. В той же статье про фьюзы есть фраза
    -- это не правда, та же ATmega16U2 по умолчанию работает от внешнего кварца. Поэтому в качестве источника данных лучше использовать официальную документацию.
     
    Unikolai, akl и SergeiL нравится это.
  13. SergeiL

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

    Мне кажется, если есть внешний ISP программатор и если Вы делаете свою плату на Меге, проще не заморачиваться с бутлоадером, а прошивать, используя программатор.
    Неважно, что Вы используете, Ардуино ИДЕ или какой то другой компилятор Си.
     
  14. akl

    akl Гуру

    бутлодер использует уарт, а оный гораздо проще и компактней можно вывести под гнездо на плате (которое потом еще может быть полезно, т.к. уарт все таки универсальнее чем спи). Насчет памяти - тот же оптибут занимает 500 байт - это очень мало.
     
  15. b707

    b707 Гуру

    "гораздо компактней" - это 5 проводов вместо 6-ти ? :)
     
  16. akl

    akl Гуру

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

    b707 Гуру

    Ну с этим проблем нет, я просто вывел все нужные выводы (SPI + RST+ питание) для "Arduino ISP" на 6-типиновую гребенку с краю платы. Но за идею спасибо - как-то не приходило в голову шить голый МК через UART...
     
  18. akl

    akl Гуру

    можно вообще все разъемы вывести повсюду и по нескольку раз каждый, но это будет бандура формата ардуино-уно. Но если нужна микроминиатюризация и полное смд по хардкору, то можно вывестки компактное гнездо с уартом, а для spi оставить небольшие пятачки в разных местах, куда подпаивается программатор, один раз заливается загрузчик и отпаивается, а все остальное уже через уарт.
     
  19. Unikolai

    Unikolai Гик

    большое спасибо за подробный ответ!) дома еще пару раз прочту, чтобы все уложилось
     
  20. Unikolai

    Unikolai Гик

    я сейчас тоже через spi шью, но через усарт шить куда проще, 4 проводка+кнопку ресета нужно организовать+сериал доступен