Вот две программы, выполняющие одно и тоже, но размер первой 1 076 байт, а второй - 214 байт. Код (Text): void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); } Код (Text): #include <avr/io.h> #include <avr/delay.h> int main(void) { DDRB = 0xff; while (1) { PORTB = 0b00100000; _delay_ms(1000); PORTB = 0b00000000; _delay_ms(1000); } }
Это плата за удобство програмирования, для тех людей, которым собственно и адресована плата Ардуино вместе с IDE и стандартной библиотекой. Проект Ардуино задуман, как удобный конструктор, для людей которым надо помигать парой светодиодов, и покрутить одним моторчиком или сервоприводом. Заботиться о занятой памяти и быстродействии не приходится, и так хватает с запасом. Задача Ардуино вовлечь в электронику и програмирование людей креативных, но далёких от техники, второй вариант записи их просто отпугнёт. Когда мне понадобилось быстро помигать восьмью светодиодами, уменя случился ступор, я смотрел на референсную реализацию языка програмирования для Ардуино, и думал, наверно это возможно, но очень трудно. Ведь главное отличие второго варианта, что можно писать одновременно состояние всего порта, всех восьми светодиодов, мне так думать проще, но я железячник.
Небольшое дополнение, если пользоваться прямой записью в порт, придётся читать документацию по контроллеру и плате Ардуино. Не все выводы всех портов контроллера равнозначны и равноценны, в некоторые нельзя писать, поэтому найти целиком доступный порт, все 8 выводов задача не простая А два порта рядом, увы нельзя совсем, а было-бы так удобно...
В дополнение к сказанному Дмитрием. Простые функции вроде `pinMode`, `digitalWrite` при компиляции тянут за собой большую портянку функций, используемых библиотекой Wiring/Arduino. Использовав их единожды вы тянете за собой overhead фиксированного размера. Написанная с помощью wiring, да, будет больше в размере, но её размер не будет расти так драматично, как в простых примерах вроде того, что вы привели.