Показано с 1 по 10 из 73

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Модератор
    Регистрация
    06.07.2008
    Возраст
    47
    Сообщений
    414
    Вес репутации
    452

    По умолчанию Быстродействие Arduino

    можно поставить 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 и только пару строчек таких, как выше - прямых обращений к портам при необходимости.
    Последний раз редактировалось SBorovkov; 05.03.2010 в 04:57.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •