Секундомер Keil IDE не работает в режиме отладки

Я использую плату ST F4-Discovery в течение некоторого времени, как и многие другие друзья. У всех нас одна и та же проблема. Мы используем Keil IDE (использовались разные версии от 4.3 до 4.7). Всякий раз, когда мы измеряем что-либо с помощью точек останова и секундомера, он отлично работает в режиме симуляции. Однако, когда мы выполняем отладку на борту и запускаем один и тот же код, секундомер никогда не показывает правильное время. Это на самом деле случайно. Кто-нибудь знает, в чем проблема?

Спасибо


person The Byzantine    schedule 10.04.2013    source источник


Ответы (3)


Секундомер основан на внутреннем регистре SEC. Кажется, есть ошибка, из-за которой, если окно регистра не отображается, значения секундомера не обновляются. Во время отладки выберите окно View|Register и убедитесь, что вы видите обновление значения регистра SEC. Секундомер в строке состояния теперь тоже должен обновляться.

person Uncle Dave    schedule 03.10.2014
comment
Ответ на мою проблему, даже если это не проблема ОП. У меня была ситуация, когда это работало для меня, но не для моего коллеги, работающего над тем же проектом, или над некоторыми проектами, а не над другими. Тайна раскрыта - после почти 10 лет использования этого инструмента! Наконец-то перешел на гугл! - person Clifford; 04.10.2019

Чтобы решить проблему с секундомером, перейдите в: Tarjet options - debug - setting - trace - core clock и настройте частоту на 72МГц или ядро ​​вашего процессора.

person Janderson Blanski    schedule 11.04.2013
comment
Он уже установлен правильно. Та же проблема. Просто случайные числа. Это не изолированная проблема. У всех людей, которых я знаю (более десятка), такая же проблема. - person The Byzantine; 11.04.2013

Я нашел ответ гораздо позже по времени. Это связано с внутренней схемой отладки. По умолчанию периферийные устройства таймера не останавливаются, когда мы достигаем точки останова в режиме отладки, а продолжают считать. Вот почему мы продолжаем получать случайные интервалы измерения между экземплярами прерывания таймера с помощью секундомера. Чтобы получить точное время, нам нужна схема отладки, чтобы заставить периферийный таймер прекратить отсчет, как только мы достигнем точки останова, и возобновить ее позже, когда мы перешагнем через нее. Это можно сделать, написав этот код:

SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM3_STOP);

Что указывает таймеру 3 на шине APB1 прекратить подсчет в точках останова.

person The Byzantine    schedule 21.02.2016