Мы живём в славные времена...

Мы живём в славные времена... Mrподелкинц, Arduino

...когда кладут на оптимизацию в пользу скорости разработки девайсов.

(с) MrПоделкинЦ

Arduino & Pi

1.4K постов20.6K подписчик

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
10
Автор поста оценил этот комментарий

да код на ардуине медленней, чем нативный и занимает больше места, но когда мне потребовалась простые часы+день недели+дата+температура я довольно быстра сделал прототип на arduino uno, а потом залил прошивку в atmega 8 и теперь доволен как слон. мне не пришлось учить C и потом разбираться с регистрами и прочими нюансами, мне достаточно было прочитать пару туторов на официальном сайте и простенький девайс готов.

для более сложных девайсов берется более мощное железо, тк время намного дороже железа

раскрыть ветку (11)
6
Автор поста оценил этот комментарий
да код на ардуине медленней, чем нативный и занимает больше места
Пардон, но на выходе из IDE мы получаем вполне себе настоящий нативный код, скомпиленый под выбранный AVR всамделешным GCC. Что с чем нужно сравнивать?


Как с ARM'ы не интересовался, но тут речь же про прототип на UNO.

раскрыть ветку (10)
2
Автор поста оценил этот комментарий

ide при компиляции добавляет свои переменные, методы и прочие прелести для работы с загрузчиком и библиотеками, ну и на выходе мы получаем не совсем "чистый код", в отличие от написанного на C или assembler'e. в связи с выше сказанным код занимает больше места (один загрузчик чего стоит) и работает медленнее тк оперативки так же впритык (на atmega 8 не много не мало 1kb)

раскрыть ветку (7)
Автор поста оценил этот комментарий

Для "работы с загрузчиком" там ничего не добавляется. Загрузчик висит отдельно и прошивается отдельно. Прошивка, собранная в Arduino IDE прекрасно загружается в голый МК через avrdude и работает (да, я так делал).

Arduino с точки зрения кода - это просто набор header'ов и define'ов к avr-gcc.

Но другое дело библиотеки, да. Когда ты пишешь код без Arduino, ты пишешь под себя и можешь не включать ненужный функционал. Когда ты пишешь в Arduino, одно включение библиотеки Serial уже сожрет у тебя 128 байт SRAM (ну или 64, не помню) под буффер для приема данных по UART. Хотя тебе например не нужно принимать данные, нужно только отправлять, или буффер не такой большой используешь, или вообще есть глобальный буффер какой и т.д.

Но это плата за скорость разработки и низкий порог вхождения.

1
Автор поста оценил этот комментарий

Так речь все же не про нативность кода, а про его чистоту? Это таки две большие разницы.


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


Вариант С vs Arduino нифига не такой однозначный. Базовая разница между "пустой скетч" и "то же на C" - 444 vs 146 байт. В три раза, да. А дальше все зависит исключительно от того, какие либы ты используешь. Перла про "методы и прочие прелести для работы с загрузчиком и библиотеками" я не совсем понял. Если в коде не используется какая-то либа, никто ее куски включать в итоговый бинарь не будет. Не используешь из своего кода загрузчик - этого функционала в выходном бинаре не окажется. Подключишь и используешь какую-то либу на чистом С - этот код прибавится к бинарю.


На счет использования памяти. Результат компиляции пустого скетча - "Глобальные переменные используют 9 байт (0%) динамической памяти". Как эти 9 байт скажутся на производительности? Это ж не ПК со свопом, памяти или хватает, или нет.


Иными словами словами, я плохо представляю, как тебе могут помочь лишние 9 байт SRAM и 300 байт флэша, если вообще рассматривается вариант разработки на ардуине. Конечно, если под "Arduino" поднимать в т.ч. IDE, а не просто железку с удобными разъемами.


Про "один загрузчик чего стоит" тоже не понял. Ну загрузчик и загрузчик. Ты волен как использовать его для заливки своего кода на асме, так и отказаться от него вообще и шить ардуиновый выхлоп через ISP.

раскрыть ветку (5)
Автор поста оценил этот комментарий

Не совсем корректно сравнивать "пустой" скетч. Корректнее сравнивать прошивку, реализующую одну и ту же задачу с более-менее реальной ценностью. И тут по "прожорливости" ардуино сильно програет. Зато выиграет в скорости разработки и пороге входа.

Включи банально библиотеку Serial и сделай Serial.begin. Библиотека уже сожрет 64 или 128 байт SRAM для буффера и пару Кб Flash. Хотя ты даже ничего толком еще не сделал полезного.

раскрыть ветку (2)
Автор поста оценил этот комментарий

И?

Либа с аналогичным функционалом на чистом C и сожрет аналогично. Если в либе есть буфер, будет расходоваться память. Чем она универсальнее, тем больше места займет код.

Вариант написать/поправить функционал под себя точно так же применим и к ардуине.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Понятное дело, что применим. Просто в ардуине обычно берут и подключают либу и не правят её для оптимизации. А в "голых" C ты подключил файло либы и можешь под себя править. Плюс либы ардуины инициализируют всё сразу обычно. Короче просто обычно больше контроля. Ну и базовая библиотека, т.н. Arduino core тоже кое-что отжирает.

Автор поста оценил этот комментарий
9 байт SRAM и 300 байт флэша
если ты работаешь на asm, то это целое богатство.
никто ее куски включать в итоговый бинарь не будет
да что ты говоришь )) у дуины стандартные библиотеки уже собраны, и только ждут когда ты нажмешь кнопочку "Билд".
Ардуино не сравнится с асмом

ардуино не стоит сравнивать даже с чистым "си".

раскрыть ветку (1)
Автор поста оценил этот комментарий

если ты работаешь на asm, то это целое богатство.

Вроде определились, что речь не про асм.


у дуины стандартные библиотеки уже собраны, и только ждут когда ты нажмешь кнопочку "Билд".

Могу предложить все же посмотреть про опцию gcc --gc-sections

1
Автор поста оценил этот комментарий

я бы на твоем месте заглянул в потроха дуиновских библиотек, и спросил почему код для "мигания светодиодом" занимает несколько килобайт. По умолчанию дуиновская ide (если так можно назвать их "блокнот с подсветкой синтаксиса") линкует в сборку всё-всё-всё, даже если ты это не собирался использовать. я у же не говорю о работе с некоторой переферией и таймерами, где ради унификации пожертвовали функциональностью.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
и спросил почему код для "мигания светодиодом" занимает несколько килобайт.

А действительно, почему? Пример "Blink" билдится в 928 байт (минус 444 базовых)


По умолчанию дуиновская ide (ну или как хочется ее назвать?) собирает прошивку с "--gc-sections", что выбрасывает из конечного бинаря неиспользуемые функции.


Ну и собственно, это все как-то сказывается на нативности?

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку