timerОтже як виміряти якийсь проміжок часу, який пройшо під час виконання якоїсь задачі. Тут нам допоможе таймер який буде відраховувати час і записувати його в змінну. Ардуінщикам в цьому плані добре знайома стандартна функція “millis()”. Особисто я не великий фанат ардуіно, можна навіть сказати, вона мені не дуже подобається, бо я не бачу як працює код цього середовища.
Так сталось, що для проекту мені знадобилось виміряти час виконання операції на мікроконтролері. Не став вигадувати велосипедів і почав шукати готове рішення. Натрапив на реалізацію ардуіновської “millis()” для Atmel Studio. По великому секрету ділюсь цією приблудою з вами.
Працює бібліотека за допомогою приривання “timer0”, так що для використання на інших МК уважно дивіться на регістри таймера, вони можуть неспівпадати із заданими в бібліотеці.
Щоб бібліотека почала працювати, в Мейні потрібно викликати ініціалізацію таймера, за допомогою функції “timer0_Init()”.
Щоб почати рахувати час, викликається функція “millis()”, яка повертає число із діапазону “unsigned long“.

1
2
3
4
5
6
7
8
9
10
11
12
// Ініціалізуємо змінні для обрахунку часу
unsigned long firstCount = 0;
unsigned long secondCount = 0;
unsigned long result = 0;
 
firstCount = millis();      // Викликаємо замірчасу перший раз
// ......
// Робимо якісь дії....
// ......
secondCount = millis();     // Викликаємо замірчасу другий раз
 
result = secondCount - firstCount; // Обчислюємо результат виконання операції

 

Бібліотеку можна скачати з GitHub

Comments:

Одна думка про «Millis – вимірюємо час на AVR»

  1. Якщо потрібно дізнатись час роботи функції/шматка коду тільки для дебагу, можна зробити простіше, без використання апаратного таймера. Створюємо проект в Atmel Studio (чи в старішій AVR Studio). Ставимо брекпойнти перед викликом функції та виходом із неї, запускаємо програму в дебаг режимі. Вона зупиниться на першому брекпойнті. В нас є можливість бачити всі регістри мікроконтроллера у вкладці Processor Status. Нам потрібний Stop Watch. Після першої зупинки на брекпойнті він покаже нам час від початку виконання програми до цього брекпойнта (в мкс чи мілісек).Обнуляємо його, запускаємо на виконння. Після зупинки на наступному брекпойнті ми побачимо час виконання.

    Registers

    Відповів

Написати відповідь

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

вимагається