Адский код

Стал я счастливым обладателем Arduino MEGA2560.
Купил скорее из интереса. Скачал IDE, запустил пару примеров — и тут нарвался на пример под названием «BareMinimum». Решил посмотреть сколько займет минимальная программа для ардуины — и тут меня ждал сюрприз :)
Джерело: WWW

Для тех у кого с picasaweb.google.com картинка грузится пол часа:
Bynary sketch size: 666 bytes (of a 258,048 byte maximum)
  • -5
  • 01 ноября 2012, 15:58
  • bdpcvit

Комментарии (40)

RSS свернуть / развернуть
:-)
0
  • avatar
  • Alfa
  • 01 ноября 2012, 16:38
Так о чем речь — то?

Напишите лучше нормальным языком, всесто того чтобы отсылать на картинки, которые грузятся по полчаса…

Пока же — и обсуждать вроде нечего…
0
  • avatar
  • SWG
  • 01 ноября 2012, 16:47
Исправил :)
0
Это получается, что программа еще и не уместилась, если она занимает 666 байт из максимум 258 байт?
0
258048 байт — наверное, так? Очевидно, точка для наглядности
0
На самом деле там запетая должна бить. Я при наборе сделал ошибку :(
0
По русским стандартам там пробел должен быть, а не запятая.
0
Именно. Ну собственно то, что в минимуме 2 пустых метода не значит что это всё, что уходит на компиляцию.
Можно отказаться от их IDE и писать хоть на асме.
0
Согласен. Как раз и хотел посмотреть сколько занимает стандартный код инициализации. Но вот увидеть число 666 не ожидал :) Не то чтоб много или мало, просто три шестерки это сила. Теперь все сатанисты могут смело использовать Arduino O_o
0
В сети много споров о хорошом и плохом в Arduino. И вот после такого размера сразу вспомнилось сравнение Windows vs Unix.
В Window пользователя обслуживают службы и сервисы, а добрый администратор зависшую программу нежно завершает.
Другое дело Unix. Там водятся демоны и зомби и злой админ убивает зависшие процессы.
+1
злой админ
злой рут, видимо. Но в целом все так и есть :)
0
Cреда программирования и язык программирования Ардуино сделаны для НЕ ПРОГРАММИСТОВ, а для скульпторов, художников, моделистов, рекламщиков и прочих неспециалистов нуждающихся в программируемом устройстве. Остальные пишут на С. Но я понимаю, хочется и на халяву готовыми библиотеками попользоваться (которых для ардуино 100500) и на быдлокод поругаться, да? А сколько занимает пустая программа на .NET? Delphi 7?
+1
А сколько занимает пустая программа на .NET? Delphi 7?
1) Скромно, несколько килобайт
2) Скромно, от 15кб без извращений, от 1-2кб с ними.

Впрочем, 666 байт — это немного. Минимум половина из них — это накладные расходы самого C/C++. Остальное, надо полагать, настройки периферии и иже с ними.
0
Впрочем, 666 байт — это немного. Минимум половина из них — это накладные расходы самого C/C++. Остальное, надо полагать, настройки периферии и иже с ними.
Именно так. Причем при желании этот кусок можно сильно сократить.
0
.NET не очень удачный пример. Там то все библиотеки по хитрому в систему загнаны. И их код отсутствует в готовом приложении.
0
У С++/Win32 тоже библиотеки (kernel32, user32, тысячи их) по хитрому в систему загнаны и их код отсутствует в готовом приложении.
0
Кернел это часть системы, которая есть всегда — да, тоже по хитрому.
Но. Дельфи использует свои библиотеки, которых нет и быть не может на «голой платформе» пользователя. В итоге надо либо эти библиотеки поставлять со своей программой (вроде минимум полтора метра во времени дельфи 6 и билдера 5, а если хочешь не просто кнопочек, так ещё по полтора), либо вшивать их код в приложение (пол метра минимум там же). И весь этот код базируется на том же кернале, не забывайте.
.NET несколько похож на дельфю в этом плане. Ему тоже нужны свои библиотеки. Только подано оно иначе — платформа ставится отдельно от ПО и не входит в состав его дистрибутива.
0
.NET — это тоже часть системы. Особенно по нынешним временам. Но можно ее и как самостоятельную ОС рассматривать. Так что она не входит в состав программы никоим боком.
С Delphi хуже, там уже библиотеки — часть приложения. Обычно, кстати, в Delphi они компилируются статически, а не пакетами.
Но никто же не заставляет юзать VCL. Пишешь без нее — и прожка получается от 15кб :) А если еще подкрутить RTL — то и 2-4кб не будут проблемой.
0
А теперь внимательно читаем комментарий выше
.NET не очень удачный пример.

Дельфи 2-4кб? нуну. «You are wellcome». Самое мелкое что встречал — 5кБ.
0
От 478 байт.
0
Сама статья — допиливание экзешника всякими ресхаками, упаковщиками и тем более создание ком, а не экзе. Это чисто «маркетинговый ход», это не средства дельфи.
По ссылкам, откапали динозавра — дельфи 3, да ещё и чужой линкер использовали. Так довайте вообще билдеру дотнет прикрутим.

Упомянутые мною 5кБ — это честные 5кБ результата сборки средой, родным её копмилятором и линкером.
0
да, в 5кБ там был ещё и полезный функционал. Пустое приложение 4кБ вроде весило.
0
Я же сказал — с извратом. Без изврата — от 15 кб.
Впрочем, чистый размер того, что выдала Delphi — 3.5кб. Что тоже укладывается в «2-4кб». И это не Delphi 3 и с родным линкером.
После чего можно еще полкило мусора вычистить. Итого 3кб без применения пакеров.
Вот дальше уже черная магия, зато и дает размер около 600 байт — и это по прежнему с использованием обычной Delphi с ее родным линкером.
0
И да, в 4кб автор уже укладывает демку на OpenGL с музыкой.
0
Как раз удачный, ибо здесь тоже мы имеем высокоуровневый код, к которому линкуются невидимые библиотеки. А потом некоторые удивляются, почему одна строчка sdelat_pizdato(); им генерирует тонны кода.
0
А сколько занимает пустая программа на .NET? Delphi 7?
А какая разница? Ее что, в контроллер зашивать? Да и кому она нужна, пустая программа?

Обычный размер типичной программки на DELPHI 6 у меня (кроме довольно сложных) — от 0,5 мб до 2-3мб. Какое это значение имеет для современного компа с винтами в сотни гигов, и несколькими гигами памяти?

По моему, никакого смысла в этом нет. Особенно с учетом того, что большинство программ в компьютере, написанных обычно на «идейно правильном» С с плюсами и диезами, имеют размер на порядки больше…

Что касается темы — то и тут размер почти пустой программы, состоящей в основном из инициализации периферии, тоже ни о чем не говорит. По любому, например, в AVR есть здоровенная таблица векторов прерываний. Используются прерывания или нет, а вектора эти обычно по умолчанию присутствуют, хоть и с затычками… Также — настройка портов, таймеров, USART, LCD индикатора, и всего прочего.

Другое дело — сравнивать реально работающие программы, где задействована большая часть начинки, крутятся несколько параллельно исполняемых задач, в реальном времени, с сигналами всяких датчиков и интерфейсов… Тут уже все зависит от программиста. Один — уложится в несколько килобайт, другому — и мегабайта не хватит…
+2
Я это и имел в виду. А то здесь уже начали охать что 666 байт + загрузчик это очень много.
0
4К ровно. Сам загрузчик может быть и меньше, но секция под него — строго 1/2/4кб (не знаю конкретный набор вариантов для ATMEGA2560).
Ну и
256 * 1024 — 258048 = 4100
Ты это как считал? 4096 же.
0
  • avatar
  • Vga
  • 01 ноября 2012, 20:55
Вот как получилось.
Это мой первый пост, и единственная цель которую я преследовал — это загадочная хитрая, или как там ее еще называют «магия чисел».
В общем думал, или точнее надеялся что это вызовет улыбки на лицах суровых тружеников эмбед сообщества.
Но увы результат очень плохой. Сурово все получилось :(

Простите пожалуйста!!! :(
+2
Не переживай, все хорошо. Вы и так здесь заставили задуматься.
0
Тут все живут «на своей волне». Напиши что зделал для МК девайс для расчета квадратного уравнения, тебе ответят: «я вот пользую мепл/матлаб/прочуюбабайштуку, она производные считать умеет». Это в лучшем случае.
Твой пост тому подтверждение.
Так что при написание шутливых постов надо подробно и в деталях описать в чём заключается шутка, и дважды выделить место где надо начинать смеятся.
+2
P.S.: К Arduino тут питают особую ненависть (все же мегакрутые разработчики). Это слово вообще опасно тут произносить. Так что ты поаккуратнее.
+4
Ну переросло в о(б)суждение ардуины, чего и следовало ожидать. :)
… Бывший коллега, в какой-то мере наставник, был жутко суеверен, числа 0x0D и повторяющихся шестёрок всячески избегал (даже вкручивал дополнительные проверки в местах, где они могли возникнуть). И тут ему подсказывают, что в его детище частота повторения машинных циклов 666,(6) кГц (контроллер был из атмеловских 51 с кварцем на 8 МГц)…
+2
И как он отреагировал? :-)))
0
Долго думал, много курил и пил кофе, но смирился. Кварц решили не менять. :)
Изделие, впрочем, прожило на рынке лет 7.
+1
ааа, прикололо) =D
0
  • avatar
  • Dmi
  • 02 ноября 2012, 16:40
Прикольно, речь шла о 666 байтах а тему гобализировли :)

Раз так, выскажу свое мнение, хотя, подозреваю, многим оно не понравится. Если смотреть глобально, то написание программ давно престало быть искусством и стало объектом массового производства/потребления. Этот факт (как для меня) печален но очевиден и логичен. Можно долго вспоминать старые добрые времена: когда программисты боролись за каждый байт в коде и за каждый такт процессора. Но сейчас такой поход (нравится Вам это или нет) не конкурентоспособен. Использование современных платформ и средств разработки позволяет уменьшить затраты на разработку но за «универсальность» данных средств приходится платить. Сопротивляется этому бесполезно – согласитесь, программист одиночка (или группа программистов) не в стоянии разработать за приемлемый срок разработать БД уровня Oracle. Зато наличие готовой БД со стандартизированным SQL интерфейсом позволит ему (программисту) на порядок ускорить время реализации конкретного приложения. Поэтому, вопрос «использовать готовую БД или писать свою» даже не стоит. И мерять размер «пустой» прошивки абстрактного компилятора/фреймворка тоже особо смысла нет. В данном случае 666 байт – это, наверное, много. Можно написать свой, намного более компактный код инициализации. Но стоит ли оно того?
+2
Но сейчас такой поход (нравится Вам это или нет) не конкурентоспособен.
Да и порочен, тащемта. Затрата на это сил часто приводит к потерям в функциональности, а главное такой подход склонен к продукцированию ошибок, причем достаточно сложных в отлове.
0
Кажысь ми тут холливар устроили!
0
А давайте доберем в етом топике 666 коментов и остановымся? :))
+3
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.