реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Время выполнения операции?
qulik
сообщение Jul 26 2009, 13:54
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 2-04-08
Из: Санкт-Петербург
Пользователь №: 36 424



Доброго времени суток! rolleyes.gif

Подскажите, плиз, как можно оценить время выполнения той или иной операции. В частности операции if (без входа внуть скобок). cranky.gif

Код
while(1)
{
    if (PINB & 0x01);
    else
    {
        ...
     }

    if(...);
    else
    {
        ...
    }


}
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
V_N
сообщение Jul 26 2009, 14:18
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 162
Регистрация: 12-01-09
Из: Харьков
Пользователь №: 43 270



Посмотреть результат компиляции ассемблерный листинг или посмотреть в симуляторе
Go to the top of the page
 
+Quote Post
ARV
сообщение Jul 26 2009, 14:20
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



В отладчике-симуляторе AVR Studio "прошагать"


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 26 2009, 14:31
Сообщение #4


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



А что, заглянуть в ассемблеровский листинг компилятора и посчитать такты религия не позволяет?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
ARV
сообщение Jul 26 2009, 14:58
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(Rst7 @ Jul 26 2009, 18:31) *
А что, заглянуть в ассемблеровский листинг компилятора и посчитать такты религия не позволяет?
но ведь в отладчике удобнее! там и такты считаются автоматически, знай жми F10 или F11...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 26 2009, 15:25
Сообщение #6


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
но ведь в отладчике удобнее! там и такты считаются автоматически, знай жми F10 или F11...


В отладчике мозг не будет задет. "Знай жми...". А так надо немного им (мозгом) поработать. Полезно.

PS Я может несколько грубовато выражаюсь, но топикстартер запостил этот вопрос не в раздел для новичков, а в раздел, где вроде-бы принят более профессиональный уровень вопросов. Так что извините, если что не так.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
qulik
сообщение Jul 31 2009, 12:47
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 2-04-08
Из: Санкт-Петербург
Пользователь №: 36 424



Эм. Ссори за повтор вопроса! smile.gif Ненашел свой топик, решил повторно создать темку и получил бан! smile3009.gif

Тем не менее всем спасибо за подсказки!! biggrin.gif
Насколько я понял в AVRStudio это можно сделать кликнув по View/Disassembler... и посчитав строчки.

Сообщение отредактировал qulik - Jul 31 2009, 12:47
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 31 2009, 17:18
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Для IAR
Если порт лежит в прямом адресном пространстве, то if будет выполнятся за 1/2 такта (будет сгенерирован sbis/sbic). Если в расширенном адресном пространстве (например mega640 некоторые порты), то будет 2 LDI (загрузка адреса) LDS (чтение порта) + sbrc/sbrs (само условие). Итого 5/6 тактов

1/2, 5/6 для if/else соответственно
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 1 2009, 08:58
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(qulik @ Jul 31 2009, 15:47) *
Насколько я понял в AVRStudio это можно сделать кликнув по View/Disassembler... и посчитав строчки.
Нет. Потому что разные строчки (на самом деле это называется "инструкции процессора" или "ассемблерные команды") исполняются разное количество тактов. Какая сколько - описано в документе AVR Instruction Set. Проще всего, как советовал ARV, пройти интересующий кусок в отладчике, наблюдая за счетчиком циклов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 1 2009, 18:43
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Я всегда советую осциллограф, поставив команды ногодрыганья в начале и конце участка.
Что толку считать команды, циклы и проч, если в системе могут прерывания, ПДП, а время доступа к внешней шине непредсказуемое, поскольку инициализация контроллера внешней памяти "чистодраная" из интернета.
Не упущу и этот случай smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
qulik
сообщение Aug 3 2009, 06:20
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 2-04-08
Из: Санкт-Петербург
Пользователь №: 36 424



Цитата(Сергей Борщ @ Aug 1 2009, 12:58) *
Нет. Потому что разные строчки (на самом деле это называется "инструкции процессора" или "ассемблерные команды") исполняются разное количество тактов. Какая сколько - описано в документе AVR Instruction Set. Проще всего, как советовал ARV, пройти интересующий кусок в отладчике, наблюдая за счетчиком циклов.


Да, Спасибо! Нашел где это отображается. Действительно самый простой вариант smile.gif
Go to the top of the page
 
+Quote Post
qulik
сообщение Aug 3 2009, 11:53
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 2-04-08
Из: Санкт-Петербург
Пользователь №: 36 424



Цитата(Dog Pawlowa @ Aug 1 2009, 22:43) *
Я всегда советую осциллограф, поставив команды ногодрыганья в начале и конце участка.
Что толку считать команды, циклы и проч, если в системе могут прерывания, ПДП, а время доступа к внешней шине непредсказуемое, поскольку инициализация контроллера внешней памяти "чистодраная" из интернета.
Не упущу и этот случай smile.gif


Осцилограф - эт хорошо! smile.gif Но не всегда он под рукой. А вот метод "ногодрыганья" и светодиоды в домашних условиях помогают, да бы поймать тот или иной момент! smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016