Перейти к содержанию
    

Странное поведение DWT_CTRL/DWT_CYCCNT при отключении отладчика.

Столкнулся со странным и неприятным поведением Data Watchpoint and Trace (DWT) на Cortex-M4F при отключении отладчика.

Пока отладчик подключен (или неподключен и не подключался), то бит0 в DWT_CTRL ==1 (а 25-й бит ==0), т.е. DWT_CYCCNT включен и инкрементируется. Всё ок.

Но при отключении отладчика (отключение отладочной сессии в IAR, сам эмулятор естественно не трогаю) происходит странное:

Содержимое DWT_CYCCNT перестаёт инкрементироваться, а из DWT_CTRL начинает считываться содержимое остановленного DWT_CYCCNT!  :wacko2: 

Т.е. - с обоих регистров (DWT_CTRL/DWT_CYCCNT) читается содержимое DWT_CYCCNT, которое было в момент перед отключением отладчика (DWT_CYCCNT заморозился).

Никакие дальнейшие попытки записи в DWT_CTRL не производят никакого эффекта - восстановить нормальное функционирование DWT_CTRL/DWT_CYCCNT не получается. :sad:

 

DWT_CYCCNT я использую у себя в программе и это очень неприятное его поведение.

Отладчик подключен по SWD. Пробовал разные типы сброса (в свойствах подключения отладчика в IAR) - не помогает.

 

Может я чего-то упускаю и есть некий бит конфигурации, управляющий поведением DWT_CYCCNT (кроме битов 0 и 25 DWT_CTRL)?

 

PS: Галка "J-Link\Leave Target Running" в меню IAR установлена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jcxz сказал:

Пока отладчик подключен (или неподключен и не подключался), то бит0 в DWT_CTRL ==1 (а 25-й бит ==0), т.е. DWT_CYCCNT включен и инкрементируется...

Вроде такого быть не должно - мануал на ядро говорит, что там по умолчанию 0, т.е. CYCCNT выключен.
А МК какой? Не пробовали провести аналогичный эксперимент на другом типе МК (другого производителя)?
Что в содержимом DEMCR при наблюдении проблемного поведения (заморожен CYCCNT)?

Мое ИМХО: при отключении отладчик сбрасывает бит TRCENA в DEMCR (и не важно, включали ли Вы его руками программно). Мануал гласит

Цитата

[24] TRCENA
Global enable for all DWT and ITM features:
0 = DWT and ITM blocks disabled.
1 = DWT and ITM blocks enabled.
If the DWT and ITM blocks are not implemented, this bit is UNK/SBZP.
When TRCENA is set to 0:
DWT registers return UNKNOWN values on reads. Whether the processor ignores writes to the DWT unit is IMPLEMENTATION DEFINED.
• ITM registers return UNKNOWN values on reads. Whether the processor ignores writes to the ITM unit is IMPLEMENTATION DEFINED.
Setting this bit to 0 might not stop all events. To ensure all events are stopped, software must set all DWT and ITM feature enable bits to 0, and then set this bit to 0.
The effect of this bit on the TPIU, ETM, and other system trace components is IMPLEMENTATION DEFINED.


Так что, вполне вероятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 минут назад, Arlleex сказал:

Вроде такого быть не должно - мануал на ядро говорит, что там по умолчанию 0, т.е. CYCCNT выключен.

У меня не по-умолчанию: при старте ПО я включаю бит0 DWT_CTRL. И пока отладчик подключен (или он вообще не подключался) - всё ок.

18 минут назад, Arlleex сказал:

А МК какой? Не пробовали провести аналогичный эксперимент на другом типе МК (другого производителя)?

XMC4700. Я только сейчас заметил. Да и на других мне особо не нужно - там везде есть хотя-бы один 32-битный таймер, а на XMC4700, к сожалению, - ни одного. :((((((((

18 минут назад, Arlleex сказал:

Мое ИМХО: при отключении отладчик сбрасывает бит TRCENA в DEMCR (и не важно, включали ли Вы его руками программно). Мануал гласит

Точно! Совсем забыл. Я же его самостоятельно устанавливаю перед включением CYCCNT. Но что-то совсем подзабыл. :wink2:

Спасибо Вам, что ткнули носом. :good2:

 

PS: Похоже никак не запретить отладчику его отключать. Придётся какой-то костыль ваять, для проверки и включения оного бита.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...