|
|
  |
Определение загрузки микроконтроллера., свободные ресурсы |
|
|
|
Sep 17 2012, 11:24
|
Знающий
   
Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245

|
Цитата(Сергей Борщ @ Sep 17 2012, 14:43)  А чем занимается этот контроллер, когда он ничего не делает? Выставьте в том пустом цикле какую-либо ногу в ноль, а при выходе из этого цикла и при входе в прерывания устанавливайте на нее единицу. Вольтметром измерьте усредненное напряжение на этой ноге - чем оно ближе к питанию, тем выше загрузка процессора. Для простого случая понятно, МК крутится в пустом цикле (ожидает или прерывание или запуск вычисления), не засыпает, тут все хорошо. А если это ОСРВ? Видел реализацию в uCOS-II называлась uCOS-VIEW, кто нибудь знает на каком принципе это реализовано там?
|
|
|
|
|
Sep 17 2012, 11:31
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Lagman @ Sep 17 2012, 14:24)  Для простого случая понятно, МК крутится в пустом цикле (ожидает или прерывание или запуск вычисления), не засыпает, тут все хорошо.
А если это ОСРВ? Видел реализацию в uCOS-II называлась uCOS-VIEW, кто нибудь знает на каком принципе это реализовано там? Если это ОСРВ, то наверняка есть задача Idle, которой передаётся управление, когда делать больше нечего. Там и нужно выдавать на выход что-нибудь характерное. А если программа - просто round-robin с непустым основным циклом, то как мне кажется, несколько сложнее определить загрузку процессора - Idle-то нету.
|
|
|
|
|
Sep 17 2012, 11:39
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
По идее, считается отношение числа тиков, за которое выполняется самая низкоприоритетная задача(system idle) к общему числу системных тиков за отчетный период. Упс. не так выразился: в idle тики суммируются, при каждом переключении на нее. Цитата(_Артём_ @ Sep 17 2012, 14:31)  А если программа - просто round-robin с непустым основным циклом, то как мне кажется, несколько сложнее определить загрузку процессора - Idle-то нету.  кто мешает его туда добавить?
Сообщение отредактировал _Pasha - Sep 17 2012, 11:41
|
|
|
|
|
Sep 17 2012, 12:04
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(_Артём_ @ Sep 17 2012, 14:48)  Как вы себе это представляете? Пример не приведёте? Простейший. Пусть у нас никакие не protothreads, а просто последовательность функций в теле цикла. Понятное дело, в каждой ф-ции проверяются условия, если они не выполняются, то выходим из пп. А вот если не выходим...тогда у нас и увеличивается потребление сабжевого ресурса, растет загрузка. Ставим нашу idle() в любое место списка. При входе читаем таймер. Код float resource_usage; void idle(void) { static tick_t mem_tick, sum_tick; tick_t tmr = get_tick(); // читаем текущий систаймер tick_t wrk = tmr - mem_tick; if(wrk >= INTERVAL_REP) { mem_tick = get_tick(); resource_usage = 1 - sum_tick/wrk;//updated sum_tick = 0; } sum_tick += tick_diff(tmr); // tick_diff = get_tick()-tmr return; } Вроде, ничего не ошибся.  Не, ошибся. Упдатед.
Сообщение отредактировал _Pasha - Sep 17 2012, 12:15
|
|
|
|
|
Oct 10 2012, 07:46
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 24-12-05
Пользователь №: 12 627

|
На любой стимул должна последовать реакция в течение некоторого времени. Если нужно среагировать на несколько стимулов, то время реакции увеличится. В правильной системе управления время реагироавния всегда укладывается в нормы. Если стимул приходит периодически и вы знаете время реакции, то загрузка = t рек / t стим
Делайте засечки времени для своих задач по ниболее загруженным веткам. Тупо сложите задержки и получите оценку времени рекции.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|