Alex_Golubev 0 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба Может кто решал задачу с вычислением загрузки ЦПУ на stm32. И может подсказать как это делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба Например, вот так. Вообще, процессор загружен всегда, если не спит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба 12 минут назад, Arlleex сказал: Например, вот так. Не работает ссылка :( Или мы им сервер обвалили Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrBearManul 0 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба 13 минут назад, Arlleex сказал: Например, вот так. Коллеги, у всех эта ссылочка открывается? UPD. Меня опередили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба 5 minutes ago, MrBearManul said: Коллеги, у всех эта ссылочка открывается? UPD. Меня опередили. 5 minutes ago, Сергей Борщ said: Не работает ссылка :( Или мы им сервер обвалили У меня открылась Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба Хмм... У меня тоже открывается. Попробуйте по словам "CPU load monitor for STM32F4xx" первой ссылкой в гугле. P.S. Хотя да, сайт у них открывается дольше чем другие. Секунд пять уходит на получение ответа и обновление странички. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба Если используется какая-нибудь RTOS, можно создать задачу с самым низким приоритетом, и считать время простоя в ней. Типа такого: http://we.easyelectronics.ru/os-rtos/freertos-opredelyaem-srednyuyu-zagruzku-yadra-mikroprocessora-cpu-utilization.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба 6 минут назад, arhiv6 сказал: Если используется какая-нибудь RTOS... Распределение времени между задачами и нагрузка на CPU - это совершенно разные вещи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба 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; ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cybersonner 1 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба на FreeRTOS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба 1 час назад, Сергей Борщ сказал: P.S. кто-нибудь может объяснить, зачем они делают... Думаю, Ваш вариант даже лучше... Хотя нет. Между чтениями CYCCNT может еще пройти какое-то количество тактов, и для переменной l оно должно учитываться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба 56 минут назад, Arlleex сказал: Хотя нет. Между чтениями CYCCNT может еще пройти какое-то количество тактов, и для переменной l оно должно учитываться. Там больше тактов на чтение CYCCNT уйдет. А что там еще компилятор наоптимизирует - никому заранее неизвестно. С другой стороны два лишних чтения регистра периферии (одно в приведенном коде, второе - в коде чуть дальше), который компилятор оптимизировать не имеет права, при запрещенных прерываниях программе явно на пользу не пойдут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба 1 час назад, Сергей Борщ сказал: Там больше тактов на чтение CYCCNT уйдет. Уйдет. Только они будут учтены в счет времени работы (WorkingTime). Вот их код без лишней требухи Зеленая область - область учета тактов, потраченных на полезную работу. Красная зона - это область, где учитываются только такты, потраченные на сон (не берем в расчет доступ к CYCCNT). За счет порядка чтения переменных в зеленом контуре будет учтено время выполнения этого тела, вместе с инструкциями в красной зоне. Если сделать как Вы предлагаете То в зону учета времени сна будут входить лишние такты, ко сну не относящиеся. Конечно, тактов там не так много, но все-же, ИМХО, корректнее их вариантом делать. 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба Блин, хотел на своем Cortex-M0 запустить - да нету в нем CYCCNT... Но, ИМХО, можно на обычном таймере замутить. Или на SysTick-е. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 30 апреля, 2021 Опубликовано 30 апреля, 2021 · Жалоба Неудобный какой-то метод... Обычный способ со счётчиком в низкоприоритетной idle-задаче имхо - лучше. И DWT.CYCCNT не требует.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться