можно поставить AVR studio (она бесплатная), GCC и посмотреть буквально по тактам.
Но, я не знаю как Arduino проект открыть в AVR Studio, хотя Arduino использует при компиляции тот же самый GCC, что и AVR Studio.
Большинство команд AVR выполняется за 1 такт, но команды очень простые+восьмибитность. Поэтому чтение 8-битной переменной состоит из задания регистровой пары (2 операции)+чтение(эта команда исполняется 2 два такта).
Очень долго выполняются некоторые Arduino куски кода, поскольку заточены под максимальную универсальность. Точно знаю про очень долгое дергание ногами посредством команд arduino.
UPD: Скомпилил под AVR Studio простейший проект Arduino.
Для примера смотри, вот этот код
uint8_t volatile w,k;
k=0;
for (w=10;w<250;w++)
{
k++;
if (k==5 && ((PIND & (1<<PIN5)) != 0))
k--;
}
Цикл совершается за 20 тактов если не выполняется k-- и 26 если выполняется. Если убрать volatile и таким образом разрешить не располагать эти регистры в памяти (проц оперирует только регистрами), то цикл без захода в k-- выполняется 12 тактов.
Вот такой цикл (по сути даже проще верхнего)
uint8_t w,k;
k=0;
for (w=10;w<250;w++)
{
k++;
if ((digitalRead(5) != 0))
k--;
}
выполняется 78 тактов.
digitalWrite(5,HIGH) выполняется 72 такта
а при этом похожая команда
digitalWrite(13,HIGH) в которой отличается только номер выводв выполняется 57 тактов.
На обыкновенной ардуине стоит 16 МГц резонатор. Это означает, что за секунду выполняется 16 миллионов тактов.
UPD2:
Для сравнения быстродействия:
Ниже приведены команды, которые при понимании логики работы программы в 99% случаев делают одно и то же.
digitalWrite(5,HIGH); // 72 такта
DDRD |=(1<<PIN5); // 2 такта
Но тут надо заметить, что это крайний случай. Во многих случаях разница незначительная, либо ее вообще нет.
Можно все написать на Arduino и только пару строчек таких, как выше - прямых обращений к портам при необходимости.