Официальный сайт компании Arduino по адресу arduino.cc
Время исполнения кода.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 18/06/2013 - 17:48
Есть кусок кода.
PORTD = something; delayMicroseconds(3);NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP; PORTD = something; delayMicroseconds(3);NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP; PORTD = something; delayMicroseconds(3);NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP; PORTD = something; delayMicroseconds(3);NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP; PORTD = something; delayMicroseconds(3);NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP; PORTD = something; delayMicroseconds(3);NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP; PORTD = something; delayMicroseconds(3);NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP; PORTD = something; delayMicroseconds(3);NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP; PORTD = something; NOP;NOP;NOP;NOP;
NOP - то же самое, что и asm("nop"); - задержка на 62.5ns. (на Ардуино 16MHz)
Собственно говоря, какое количество времени займет исполнение этого кода на Arduino Duemilanove либо Uno? Пробовал измерять время с помощью Micros(), но там низкая точность - мне нужно узнать время в микросекундах с точностью до десятых.
16.75 uS
хотя в ардуине там еще таймера тикают.
16.75 uS
Если не секрет, то как это считается? :)
ну вы же как-то посчитали что "nop" это 62.5ns.
а вобще в отладчиках такое считается. например, в том же avrstudio.
А запись в порт сколько занимает?
А запись в порт сколько занимает?
Произвел рассчет в AtmelStudio 6.0: Atmega168, 16MHz - заняло 0,06мкс. Это хорошо, я думал, что писать в порт - долго. :)
Чистая запись значение в порт - два такта:
Однако, как верно заметили выше, еще есть таймеры, которые внутри прерывания натикивают сколько-то тактов.
Пробовал измерять время с помощью Micros(), но там низкая точность - мне нужно узнать время в микросекундах с точностью до десятых.
Если время одного события слишком мало для того, чтобы его замерить - естественный способ - замерить суммарное время N событий и разделить его на N.