Jump to content

    
Alex_Golubev

Вычисление загрузки ЦПУ на stm32h7

Recommended Posts

5 minutes ago, MrBearManul said:

Коллеги, у всех эта ссылочка открывается?

UPD. Меня опередили.

 

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

Не работает ссылка :( Или мы им сервер обвалили :biggrin:

У меня открылась

Share this post


Link to post
Share on other sites

Хмм... У меня тоже открывается. Попробуйте по словам "CPU load monitor for STM32F4xx" первой ссылкой в гугле.

P.S. Хотя да, сайт у них открывается дольше чем другие. Секунд пять уходит на получение ответа и обновление странички.

Share this post


Link to post
Share on other sites

Если используется какая-нибудь RTOS, можно создать задачу с самым низким приоритетом, и считать время простоя в ней. Типа такого: http://we.easyelectronics.ru/os-rtos/freertos-opredelyaem-srednyuyu-zagruzku-yadra-mikroprocessora-cpu-utilization.html

Share this post


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

Если используется какая-нибудь RTOS...

Распределение времени между задачами и нагрузка на CPU - это совершенно разные вещи.

Share this post


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

Хмм... У меня тоже открывается. Попробуйте по словам "CPU load monitor for STM32F4xx" первой ссылкой в гугле.

Спасибо. Сейчас и через гугл нашлось и по вашей ссылке открылось. Статья интересная, кое-какие мысли из нее очень пригодятся.

 

P.S. кто-нибудь может объяснить, зачем они делают

    /* Add to working time */
    WorkingTime += DWT->CYCCNT - l;
    
    /* Save count cycle time */
    t = DWT->CYCCNT;

вместо

    /* Save count cycle time */
    t = DWT->CYCCNT;
    /* Add to working time */
    WorkingTime += t - l;
    

?

Share this post


Link to post
Share on other sites
1 час назад, Сергей Борщ сказал:

P.S. кто-нибудь может объяснить, зачем они делают...

Думаю, Ваш вариант даже лучше...

Хотя нет. Между чтениями CYCCNT может еще пройти какое-то количество тактов, и для переменной l оно должно учитываться.

Share this post


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

Хотя нет. Между чтениями CYCCNT может еще пройти какое-то количество тактов, и для переменной l оно должно учитываться.

Там больше тактов на чтение CYCCNT уйдет. А что там еще компилятор наоптимизирует - никому заранее неизвестно. С другой стороны два лишних чтения регистра периферии (одно в приведенном коде, второе - в коде чуть дальше), который компилятор оптимизировать не имеет права, при запрещенных прерываниях программе явно на пользу не пойдут.

Share this post


Link to post
Share on other sites
1 час назад, Сергей Борщ сказал:

Там больше тактов на чтение CYCCNT уйдет.

Уйдет. Только они будут учтены в счет времени работы (WorkingTime). 

Вот их код без лишней требухи
image.png.6f8ade7d0475b1f28e55c359bac8ff4a.png

Зеленая область - область учета тактов, потраченных на полезную работу.
Красная зона - это область, где учитываются только такты, потраченные на сон (не берем в расчет доступ к CYCCNT).
За счет порядка чтения переменных в зеленом контуре будет учтено время выполнения этого тела, вместе с инструкциями в красной зоне.

Если сделать как Вы предлагаете
image.png.89cfef65b683a14822af0ffc4980c3b2.png

То в зону учета времени сна будут входить лишние такты, ко сну не относящиеся.
Конечно, тактов там не так много, но все-же, ИМХО, корректнее их вариантом делать.

P.S. Предложу свой вариант (на деле не проверял пока)

void GoToSleepMode(void)
{
  static u32 wtim = 0, // work  time
             stim = 0, // sleep time
             ltim = 0; // last  time
  
  __disable_irq();
  u32 prev = DWT->CYCCNT;
  __WFI();
  u32 next = DWT->CYCCNT;
  __enable_irq();
  
  wtim += prev - ltim;
  stim += next - prev;
  ltim  = next;
}

Share this post


Link to post
Share on other sites

Неудобный какой-то метод... Обычный способ со счётчиком в низкоприоритетной idle-задаче имхо - лучше. И DWT.CYCCNT не требует....

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.