Как портировать Arduino-скетч в реальное устройство на аналогичном кристалле?
Купил Arduino с целью сделать вполне конкретное устройство. Так как всем хорошо известно, что это платформа для прототипирования, дополнительно купил отдельный микроконтроллер, ну и всю обвязку, намереваясь собрать всё компактнее, но воспользоваться готовой программой с Arduino.
После детального осмотра Arduino выяснилось, что перенос готового кода (который я пока не успел написать и это, похоже, к лучшему) — задача нетривиальная. Arduino'вские библиотеки дают много удобств, но даже пустой скетч имеет значительный размер на выходе.
Понятно, что использовать написанный для Arduino код "в бою" это как минимум не Unix-way. Может быть есть способ или хотя бы мануал по портированию кода с Arduino'вских библиотек в пригодный для использования на реальном железе?
Строится/покупается программатор (вероятно на еще одной ардурине), сливается дамп флэша и ерпрома из скетчевой ардуино и записывается на новый кристалл.
Хотя в среде ардуины есть опция меню - "сохранит в файл" или что то типа такого, для программирования настоящим программатором отдельных кристаллов.
Гугление по теме "программатор AVR" даст кучу вариантов.
Очевидно, что на еще одной Arduino-совместимой плате оно заработает как надо.
Проблема заключается в том, что чтобы реально научиться программировать микроконтроллеры Arduino мягко говоря не подходит. Написанная для этой платформы программа избыточна, там много "мусора" и неоптимальных решений. Из-за этого расходуется память и время контроллера.
Я бы хотел избавиться от Arduino'вских библиотек без значительного изменения кода программы, в этом и заключается мой вопрос.
Предвидя простое решение написать с нуля, заранее отвечу, что для меня, как для новичка в этом деле, это представляет сложность, поэтому и возник такой вопрос.
Увы, это невожможно в силу специфики Ардуино. Скажем так: большинство функций в системе существуют, но под другими именами и другой реализацией. Обычный тулчейн дла АВРов - WinAVR на основе gcc (сейчас проект более не развивается и идет в комплекте с AVR Studio. Его можно скачать на сайте atmel.com). В качестве программы для заливки - лучше avrdude пока еще не встречал. Хотя тоже зоопарк великий.
Если проблема только в нехватке памяти для кода - то нужно полюбому переходить на winavr. Если же устройство и так работает, но хочется сделать код просто комактным - это нонсенс. Неиспользованную память невозможно перевести на счет в банке, а работающий проект глупо переписывать под что-то еще.
кода - море. Нужно только искать не со словом "ардурино", а по названию микроконтроллера и нужной функции/сенсора/конечного устройства.
Самый полный образовательный мануал находится в даташите нужного микроконтроллера. Причем в двух экземплярах - на ассемблере и на С.
Кроме того не стоит игнорировать коллективный мозг. Имеются тысячи форумов посвященных этим микроконтроллерам.
Из-зачего они мне и нравятся микроконтроллеры Атмел, так это из-за обилия кода и документации. И в его отсуствии грех жаловаться.
С датшитом понятно, кода и примеров там полно. Просто если Arduino позиционируется как плата для построения прототипов, то зачем заставлять людей дважды переписывать одну и ту же программу? Обидно: пишешь программу, а потом нужно переписывать её заново, зачем тогда прототип делал -- непонятно.
Самое главное в Ардуино - это возможность быстрого программирования, без использования специализированного программатора. То есть упор на бутлоадер. То, что создатели Дурины подключили к ней свой фреймворк - в наше время патентного права это жизненная необходимость.
Но насколько я знаю, там вроде бы есть возможность писать и без фреймворка. Или поверх фирменно фремворкеа наложить свой, делающий возврат к атмеловскому варианту С (в этом необходимо только переименование названий портов).
Вы правы, всё вышеозначенное возможно. Однако, ардуиновский фреймворк далеко не самое лучшее что можно придумать. Немного об этом есть здесь: habrahabr.ru/post/146489 , на easyelectronics.ru проскакивали исследования ASM-кода минимального "пустого" скетча Arduino и размер не радует.
Короче, в образовательных целях использования Arduino framework не годится, и я понимал это сразу. Но я рассчитывал на возможность плавного перехода от одного к другому.
Ну почему же не радует? Что такое фирменное Ардуино? Это усторойство с 32 килобайтами флэша. Это более чем достаточно. Все остальные реализиции на низших кристаллах - выдумка китайских друзей.
Года четыре назад один мой коллега купил м644 с бутлоадером на борту. Тогда еще ардуинами совсем не пахло.
Ардуино предназначено привить первичные возможности создания хардверных систем: с помощью минимальных усилий и с объяснением на пальцах показать связь времени (кода) и пространства (портов ввода/вывода и целевых устройств).
Если речь вести о профессиональных средствах разработки, то там нужны и средства отладки (для старших версий это jtag) и симуляторы (AVR Studio, Proteus ISIS).
Да я как раз и хотел плавно перескочить на профессиональный уровень разработки :( C++ для меня не чужой и в ASM если надо разберусь, так что связь софта с железом для меня достаточно ясна.
Но раз такие пироги, то у меня лично к вам дополнительный маленький вопрос: вы считаете, что Arduino Framework годится в качестве средства разработки серьёзных (но не промышленных) устройств?
Абсолютно любая разработка определяется лишь возможностью быстро и точно вести отладку решаемой задачи. Если ардуино на каком то этапе позволяет упростить эту задачу, то почему нет?
Вот сейчас у меня хобби-проектик, который требует использования сразу нескольких устройств: программатор, com-порт, согласование TTL-уровней с тремя напряжениями. Когда только подготовка к реализации занимает несколько дней, то делатъ такое совсем не хочется и выделение после работы на это дело 1 час ставит задачу нереализуемой. И в голову приходят простые вещи, типа купить ардуину, перевести ее на напряжение контроллера по схеме и не париться - ведь программатор уже не нужен, а компорт в ней встроен.
Unix-way - это программировать на чистом C.
Но прототип-то можно и на Arduino собрать ;)
Так же нет никаких проблем вытащить hex-файл для прошивки контроллера через SPI (при помощи той же Arduino).
Вот речь о том и идёт: собираешь прототип, пишешь программу. Потом хочешь довести до готовности, возможно до серийного выпуска небольшой партии; у тебя есть программа для Arduino и совсем не хочется переписывать этот прототип "с нуля", хочется каким-то образом портировать его в тот тулчейн, что предоставляет Atmel Studio, а не работать с Arduino Framework.
Про HEX-файл в курсе, но речь не о том. А Plain C мне кажется слишком хардкорным, пусть он даже здесь и к месту.
Можно пойти другим путем, IDE ардуино при построении (компиляции) проекта преобразует скетч в обычный cpp файл, который уже компилируется, можно взять этот самый cpp и его использовать в другой среде (winavr и прочее) , естественно часть кода не портируется, т.к. как раз те самые "много мусора" придется удалить и написать с нуля еще раз (ибо в ардуино это просто уже сделано за вас), в итоге вы получите тоже самое что и было, но с кучей глюков ибо написали кучу своих велосипедов. На практике если вы не выжимаете из кристала 102% производительности и прекрасно умещаетесь в отведенную память (что вероятней всего так и есть) нет смысла отказываться от ардуино. В проме естественно плату типа uno вешать я бы не советовал (хотя и страшного в этом ничего нет), при желании можно залить все тоже самое в отдельный кристал на вашей плате.