Jump to content

    

Как включить счетчик циклов в IAR ARM 7.6

Собственно вопрос : что надо настроить чтобы работал счетчик циклов CYCLECOUNTER

Вопрос закрыт.  надо включить ВЦЕ  DWT->CTRL =0X40000001;

Share this post


Link to post
Share on other sites

Не понятно, а какое имеет это  отношение к IAR?

Share this post


Link to post
Share on other sites

При отладке ПО для процессора STM32L476 (в среде  IAR ARM 7.6) в окне регистров имеется счетчик циклов CYCLECOUNTER при отладке его значение  не изменялось в настройках IAR не нашел как активировать его . пришлось вначале программы  включить DWT  (  DWT->CTRL =0X40000001; ) и все заработало. Если есть другие варианты подскажите

Share this post


Link to post
Share on other sites
7 hours ago, Vasil_Riabko said:

Если есть другие варианты подскажите

Я к тому, что это не имеет отношение к IAR. Вы просто включили соответствующий модуль в МК. То же самое справедливо и для Keil, например. 

Share this post


Link to post
Share on other sites
16 часов назад, haker_fox сказал:

Я к тому, что это не имеет отношение к IAR.

В ИАРе для других контроллеров этот счетчик в симуляторе работает (во всяком случае, раньше работал) сам. ИАРом давно не пользуюсь, но если бы пользовался - для меня было бы неочевидно, что в эмуляторе для некоторых ARM Cortex этот счетчик привязан к счетчику циклов DWT. Но я имею привычку читать документацию, наверняка там это описано.

Share this post


Link to post
Share on other sites
13 minutes ago, Сергей Борщ said:

Но я имею привычку читать документацию, наверняка там это описано

+1

13 minutes ago, Сергей Борщ said:

ИАРом давно не пользуюсь

GCC?:blum:

13 minutes ago, Сергей Борщ said:

В ИАРе для других контроллеров этот счетчик в симуляторе работает

Гм, а ведь и правда. Сейчас глянул проект на LPC4337, счётчик работает. Хотя, стоп! У меня WDT включен.

Share this post


Link to post
Share on other sites

В том то дело что в  документе "IAR Embedded Workbench® C-SPY® Debugging Guide" кроме фразы -

"CYCLECOUNTER Cleared when an application is started or reset and is
incremented with the number of used cycles during
execution.
CCSTEP Shows the number of used cycles during the last performed
C/C++ source or assembler step.
CCTIMER1 and
CCTIMER2
Two trip counts that can be cleared manually at any given
time. They are incremented with the number of used cycles
during execution."

ничего о настройке или запуске CYCLECOUNTER я не нашел. Буду признательным если подскажите где можно посмотреть рекомендации по работе с CYCLECOUNTER.

Share this post


Link to post
Share on other sites
2 часа назад, haker_fox сказал:

GCC?:blum:

Он самый. +GDB, +Eclipse (CDT), +OpenOCD.

2 часа назад, haker_fox сказал:

Сейчас глянул проект на LPC4337, счётчик работает. Хотя, стоп! У меня WDT включен.

WDT != DWT. Не у всех кортексов есть DWT, поэтому я написал "для некоторых". А в симуляторе я его этот счетчик в свое время видел рабочим для MSP430, ARM7, AVR.

 

 

Share this post


Link to post
Share on other sites
5 hours ago, Сергей Борщ said:

WDT != DWT.

Опа, под вечер я и не разглядел различия))) Поздно было у меня на дворе... DWT я намеренно не включал. Ладно, на работе буду, погляжу в чём там дело.

Share this post


Link to post
Share on other sites

Для некоторых МК IAR или сам включает этот счётчик при подключении отладчика или он уже включен по дефолту после сброса. Насколько помню - на разных LPC он включён.

Я этот счётчик использую в firmware для отсчёта тактов CPU. Можно освободить один таймер. Правда при его включении потребление питания достаточно сильно растёт.

В 28.08.2019 в 22:37, Vasil_Riabko сказал:

Вопрос закрыт.  надо включить ВЦЕ  DWT->CTRL =0X40000001;

А зачем в read-only биты записываете? Прочитайте мануал на ядро с описанием регистра.

Кстати - и включение не совсем правильное. Про регистр DEMCR забыли. Я включаю этот счётчик так:

  NVIC.DEMCR |= B24;  //разрешение работы DWT.CYCCNT
  if (!(DWT.CTRL & B0)) DWT.CTRL = B0;

Работает и на STM32F4 и на XMC4xxx.

Share this post


Link to post
Share on other sites
25 minutes ago, jcxz said:

А зачем в read-only биты записываете? Прочитайте мануал на ядро с описанием регистра.

Кстати - и включение не совсем правильное. Про регистр DEMCR забыли. Я включаю этот счётчик так:


  NVIC.DEMCR |= B24;  //разрешение работы DWT.CYCCNT
  if (!(DWT.CTRL & B0)) DWT.CTRL = B0;

 

Вы ошибаетесь   в документации на ядро :
"

8.3. DWT Programmers Model

Table 8.1 lists the DWT registers. Depending on the implementation of your processor, some of these registers might not be present. Any register that is configured as not present reads as zero.

Table 8.1. DWT register summary

Address Name Type

Reset

Description
0xE0001000 DWT_CTRL RW

See [a]

Control Register
0xE0001004 DWT_CYCCNT RW 0x00000000 Cycle Count Register

"

Про включение можно подробнее . При чем здесь NVIC ?

DWT->CTRL =0X40000001  реально включает DWT .

Share this post


Link to post
Share on other sites
22 минуты назад, Vasil_Riabko сказал:

Вы ошибаетесь   в документации на ядро :

В чём ошибаюсь?  :wacko2:

Цитата

Про включение можно подробнее . При чем здесь NVIC ?

NVIC не при чём. При чём DEMCR. Прочитайте его описание - поймёте при чём.

Но если DWT_CYCCNT используется только чтобы в IAR-е посмотреть такты, то возможно IAR его сам включает и тогда необязательно.

Цитата

DWT->CTRL =0X40000001  реально включает DWT .

Значит повезло. На LPC например для "реального включения" вообще ничего не нужно было делать.  :wink:

Share this post


Link to post
Share on other sites

Я думаю, здесь путают DWT, встроенный в МК, и счетчик тактов с измерителями интервалов, имеющийся в отладчике. 

Share this post


Link to post
Share on other sites
2 hours ago, jcxz said:

В чём ошибаюсь?  :wacko2:

 

NVIC не при чём. При чём DEMCR. Прочитайте его описание - поймёте при чём.

Но если DWT_CYCCNT используется только чтобы в IAR-е посмотреть такты, то возможно IAR его сам включает и тогда необязательно. 

Значит повезло. На LPC например для "реального включения" вообще ничего не нужно было делать.  :wink:

Регистр DWT_CTRL - Read/write .

Что касается регистра DEMCR то бит TRCENA  при старте отладчика IAR установлен в 1 и никаких телодвижений не надо . А вот разрешить работу DWT надо DWT->CTRL =0X40000001 . Вопрос и возник из-за того что отладчик не включает DWT (возможно я не нашел в опциях разрешение работы DWT) .
Поясните пожалуйста что значит следующая  строка  -

NVIC.DEMCR |= B24;  //разрешение работы DWT.CYCCNT
         
         
         

 

Share this post


Link to post
Share on other sites
В 31.08.2019 в 14:09, Vasil_Riabko сказал:

Регистр DWT_CTRL - Read/write .

Откройте уж наконец-то мануал (ARM ® v7-M Architecture Reference Manual) и прочитайте описание битов DWT_CTRL!:

DWT_CTRL:NUMCOMP, bits[31:28] 
Number of comparators implemented.
A value of zero indicates no comparator support.
These bits are read-only. The reset value is IMPLEMENTATION DEFINED.

 

В 31.08.2019 в 14:09, Vasil_Riabko сказал:

Поясните пожалуйста что значит следующая  строка  -


NVIC.DEMCR |= B24;  //разрешение работы DWT.CYCCNT
 

Значит то, что работает DWT у Вас только потому, что 24-й бит в NVIC.DEMCR уже оказывается установленным (возможно ставится отладчиком). Если отладчик его не установит, то и работать DWT не будет.

Описание битов DEMCR следует искать опять-же в том же мануале.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now