30615
Как узнать количество тактов, затрачиваемых на выполнение команд. Блок DWT
Как узнать количество тактов, затрачиваемых процессором на выполнение команд?
Точно производить измерения по количеству тактов, которые затрачивает процессор на выполнение тех или иных задач, можно при помощи блока DWT (Data Watchpoint and Trace) отладочного модуля. Блок имеется лишь в составе следующих ядер Cortex: M3/M4/M7/M33. Это означает, что работать с блоком можно на следующих микроконтроллерах компании Миландр: K1986ВЕ92QI, K1901ВЦ1QI, K1986ВК01GI.
Программная модель блока DWT представлена в официальной документации ARM.
Блок DWT начинает свою работу сразу же после старта работы микроконтроллера в режиме отладки. При этом важно отметить, что блок DWT не функционирует, если отладка не выполняется. Чтобы запустить в работу блок DWT вне отладки, необходимо произвести конфигурацию поля TRCENA в регистре ядра DEMCR. Например, следующим образом:
Количество тактов хранится в регистре DWT_CYCCNT, который доступен по адресу 0xE0001004. По сбросу значение регистра равно нулю.
Самый простой способ ввести отслеживание адреса регистра DWT_CYCCNT для получения значения тактов можно директивой #define при помощи указателя:
И если стоит задача определить количество тактов, которое микроконтроллер тратит на выполнение определенной задачи, то необходимо обнулить значение счётчика перед началом выполнения задачи следующим образом:
После этого в режиме отладки поставить точку останова на том месте, где необходимо зафиксировать результат. Значение regDWT_CYCCNT будет содержать точное число тактов.
Программная модель блока DWT представлена в официальной документации ARM.
Блок DWT начинает свою работу сразу же после старта работы микроконтроллера в режиме отладки. При этом важно отметить, что блок DWT не функционирует, если отладка не выполняется. Чтобы запустить в работу блок DWT вне отладки, необходимо произвести конфигурацию поля TRCENA в регистре ядра DEMCR. Например, следующим образом:
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
Количество тактов хранится в регистре DWT_CYCCNT, который доступен по адресу 0xE0001004. По сбросу значение регистра равно нулю.
Самый простой способ ввести отслеживание адреса регистра DWT_CYCCNT для получения значения тактов можно директивой #define при помощи указателя:
#define regDWT_CYCCNT *(volatile unsigned long *)0xE0001004
Теперь regDWT_CYCCNT будет содержать в себе количество тактов, которые были посчитаны микроконтроллером с начала его работы в режиме отладки. И если стоит задача определить количество тактов, которое микроконтроллер тратит на выполнение определенной задачи, то необходимо обнулить значение счётчика перед началом выполнения задачи следующим образом:
regDWT_CYCCNT = 0;
После этого в режиме отладки поставить точку останова на том месте, где необходимо зафиксировать результат. Значение regDWT_CYCCNT будет содержать точное число тактов.
Документация
Версия 2.6.0 от 18.06.2024
2.6.0 от 19.06.2024
1.1.0 от 30.07.2024
2.5.0 от 20.05.2024
2.8.0 от 26.07.2024