Мы живём в славные времена...
...когда кладут на оптимизацию в пользу скорости разработки девайсов.
(с) MrПоделкинЦ
...когда кладут на оптимизацию в пользу скорости разработки девайсов.
(с) MrПоделкинЦ
да код на ардуине медленней, чем нативный и занимает больше места, но когда мне потребовалась простые часы+день недели+дата+температура я довольно быстра сделал прототип на arduino uno, а потом залил прошивку в atmega 8 и теперь доволен как слон. мне не пришлось учить C и потом разбираться с регистрами и прочими нюансами, мне достаточно было прочитать пару туторов на официальном сайте и простенький девайс готов.
для более сложных девайсов берется более мощное железо, тк время намного дороже железа
да код на ардуине медленней, чем нативный и занимает больше местаПардон, но на выходе из IDE мы получаем вполне себе настоящий нативный код, скомпиленый под выбранный AVR всамделешным GCC. Что с чем нужно сравнивать?
Как с ARM'ы не интересовался, но тут речь же про прототип на UNO.
ide при компиляции добавляет свои переменные, методы и прочие прелести для работы с загрузчиком и библиотеками, ну и на выходе мы получаем не совсем "чистый код", в отличие от написанного на C или assembler'e. в связи с выше сказанным код занимает больше места (один загрузчик чего стоит) и работает медленнее тк оперативки так же впритык (на atmega 8 не много не мало 1kb)
Для "работы с загрузчиком" там ничего не добавляется. Загрузчик висит отдельно и прошивается отдельно. Прошивка, собранная в Arduino IDE прекрасно загружается в голый МК через avrdude и работает (да, я так делал).
Arduino с точки зрения кода - это просто набор header'ов и define'ов к avr-gcc.
Но другое дело библиотеки, да. Когда ты пишешь код без Arduino, ты пишешь под себя и можешь не включать ненужный функционал. Когда ты пишешь в Arduino, одно включение библиотеки Serial уже сожрет у тебя 128 байт SRAM (ну или 64, не помню) под буффер для приема данных по UART. Хотя тебе например не нужно принимать данные, нужно только отправлять, или буффер не такой большой используешь, или вообще есть глобальный буффер какой и т.д.
Но это плата за скорость разработки и низкий порог вхождения.
Так речь все же не про нативность кода, а про его чистоту? Это таки две большие разницы.
Ардуино не сравнится с асмом, тут без вариантов. На асме всегда можно написать более производительный и компактный вариант, убив на это куда большее время. Поэтому на практике к нему (асму) прибегают только для каких-то критических вещей, вроде того же загрузчика.
Вариант С vs Arduino нифига не такой однозначный. Базовая разница между "пустой скетч" и "то же на C" - 444 vs 146 байт. В три раза, да. А дальше все зависит исключительно от того, какие либы ты используешь. Перла про "методы и прочие прелести для работы с загрузчиком и библиотеками" я не совсем понял. Если в коде не используется какая-то либа, никто ее куски включать в итоговый бинарь не будет. Не используешь из своего кода загрузчик - этого функционала в выходном бинаре не окажется. Подключишь и используешь какую-то либу на чистом С - этот код прибавится к бинарю.
На счет использования памяти. Результат компиляции пустого скетча - "Глобальные переменные используют 9 байт (0%) динамической памяти". Как эти 9 байт скажутся на производительности? Это ж не ПК со свопом, памяти или хватает, или нет.
Иными словами словами, я плохо представляю, как тебе могут помочь лишние 9 байт SRAM и 300 байт флэша, если вообще рассматривается вариант разработки на ардуине. Конечно, если под "Arduino" поднимать в т.ч. IDE, а не просто железку с удобными разъемами.
Про "один загрузчик чего стоит" тоже не понял. Ну загрузчик и загрузчик. Ты волен как использовать его для заливки своего кода на асме, так и отказаться от него вообще и шить ардуиновый выхлоп через ISP.
Не совсем корректно сравнивать "пустой" скетч. Корректнее сравнивать прошивку, реализующую одну и ту же задачу с более-менее реальной ценностью. И тут по "прожорливости" ардуино сильно програет. Зато выиграет в скорости разработки и пороге входа.
Включи банально библиотеку Serial и сделай Serial.begin. Библиотека уже сожрет 64 или 128 байт SRAM для буффера и пару Кб Flash. Хотя ты даже ничего толком еще не сделал полезного.
И?
Либа с аналогичным функционалом на чистом C и сожрет аналогично. Если в либе есть буфер, будет расходоваться память. Чем она универсальнее, тем больше места займет код.
Вариант написать/поправить функционал под себя точно так же применим и к ардуине.
Понятное дело, что применим. Просто в ардуине обычно берут и подключают либу и не правят её для оптимизации. А в "голых" C ты подключил файло либы и можешь под себя править. Плюс либы ардуины инициализируют всё сразу обычно. Короче просто обычно больше контроля. Ну и базовая библиотека, т.н. Arduino core тоже кое-что отжирает.
9 байт SRAM и 300 байт флэшаесли ты работаешь на asm, то это целое богатство.
никто ее куски включать в итоговый бинарь не будетда что ты говоришь )) у дуины стандартные библиотеки уже собраны, и только ждут когда ты нажмешь кнопочку "Билд".
Ардуино не сравнится с асмом
ардуино не стоит сравнивать даже с чистым "си".
Вроде определились, что речь не про асм.если ты работаешь на asm, то это целое богатство.
у дуины стандартные библиотеки уже собраны, и только ждут когда ты нажмешь кнопочку "Билд".
Могу предложить все же посмотреть про опцию gcc --gc-sections
я бы на твоем месте заглянул в потроха дуиновских библиотек, и спросил почему код для "мигания светодиодом" занимает несколько килобайт. По умолчанию дуиновская ide (если так можно назвать их "блокнот с подсветкой синтаксиса") линкует в сборку всё-всё-всё, даже если ты это не собирался использовать. я у же не говорю о работе с некоторой переферией и таймерами, где ради унификации пожертвовали функциональностью.
и спросил почему код для "мигания светодиодом" занимает несколько килобайт.
А действительно, почему? Пример "Blink" билдится в 928 байт (минус 444 базовых)
По умолчанию дуиновская ide (ну или как хочется ее назвать?) собирает прошивку с "--gc-sections", что выбрасывает из конечного бинаря неиспользуемые функции.
Ну и собственно, это все как-то сказывается на нативности?
Arduino & Pi
1.4K постов20.6K подписчик
Правила сообщества
В нашем сообществе запрещается:
• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)
• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском
• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)
• Рассуждать на темы политики
• Нарушать установленные правила Пикабу