|
Можно ли добиться малого джиттера системного таймера, если есть прерывания с приоритетом выше сист. таймера |
|
|
|
 |
Ответов
|
Mar 10 2008, 12:59
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
И ещё одно отступление сделал от "классической" схемы построения вытесняющих RTOS.
Везде аватары пишуть, что ISR может "сразу же" иницировать смену текущего running-потока если ISR обнаружила, что "созрел" поток с более высоким приоритетом, чем у текщего running-потока.
Я не стал это делать "сразу же".
Объясню почему...
Смена running-потока у меня занимает порядка 350T (это в наихудшем случае, тут всё зависит что за потоки меняются: мининити или главные нити процессов, поток со статическим или с динамическим приоритетом и т.п.).
А размер тика системного таймера у меня получился 1800T.
Рассмотрим ситуацию когда происходят друг за другом 4 прерывания и каждое последующее прерывание приводит к тому, что переходит в состояние Ready поток с более высоким приоритетом..
Вот и представьте теперь..
Произошло прерывание 1. Мы переключились на поток Thread1 и потратили 350Т.
Произошло прерывание 2. Thread1 не успев отработать даже микросекунду была прервана прерыванием 2. Переключились на поток Thread2 и ещё потратили 350Т.
Произошло прерывание 3. Thread2 не успев отработать даже микросекунду была прервана прерыванием 3. Переключились на поток Thread3 и ещё потратили 350Т.
Произошло прерывание 4. Thread3 не успев отработать даже микросекунду была прервана прерыванием 4. Переключились на поток Thread4 и ещё потратили 350Т.
Произошло прерывание системного таймера. Thread4 не успев отработать даже микросекунду была прервана прерыванием системного таймера.
В iSR системного таймера выясняем, что перешёл в состояние ready поток Thread5. На него и переключаемся в конце концов.
Вопрос: и какой смысл было тратить 1400Т процессорного времени если Thread1,..., Thread4 не отработали ни одной команды?
Поэтому я решаю вопрос о смене текущей running-нити только в эпилоге ISR системного таймера. Но для того чтобы реактивность системы не пострадал делаю размер системного тика достаточно маленьким. Всего лишь 1800T
Сообщение отредактировал Дон Амброзио - Mar 10 2008, 13:03
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
Сообщений в этой теме
Дон Амброзио Можно ли добиться малого джиттера системного таймера Mar 6 2008, 06:50 Непомнящий Евгений Например: во всех нетривиальных аппаратных прерыва... Mar 6 2008, 08:32 Дон Амброзио Цитата(Непомнящий Евгений @ Mar 6 2008, 11... Mar 7 2008, 07:38 AlexandrY У вас похоже на типичную ошибку планирования ресур... Mar 7 2008, 08:24 Дон Амброзио Цитата(AlexandrY @ Mar 7 2008, 11:24) Пер... Mar 7 2008, 08:50  Baser Цитата(Дон Амброзио @ Mar 7 2008, 10:50) ... Mar 8 2008, 21:28   Дон Амброзио Цитата(Baser @ Mar 9 2008, 00:28) У АВР-о... Mar 9 2008, 00:24 arttab можно повысить рабочию частоту мк и за счет этого ... Mar 8 2008, 11:00 Дон Амброзио Решил делать так:
1.Запретить все прерывания, кром... Mar 9 2008, 09:30 AlexandrY Что-то у вас совсем там плохо.
На атмеге в нормаль... Mar 9 2008, 10:06  Дон Амброзио Цитата(AlexandrY @ Mar 9 2008, 13:06) Что... Mar 9 2008, 11:52   vshemm Цитата(Дон Амброзио @ Mar 9 2008, 14:41) ... Mar 9 2008, 12:00    Дон Амброзио Цитата(vshemm @ Mar 9 2008, 15:00) Как мо... Mar 9 2008, 12:05     vshemm Цитата(Дон Амброзио @ Mar 9 2008, 15:05) ... Mar 9 2008, 12:34 SSerge Если аппаратные приоритеты "неправильные... Mar 9 2008, 13:01 vshemm Цитата(SSerge @ Mar 9 2008, 16:01) Если а... Mar 9 2008, 13:15 Baser Цитата(Дон Амброзио @ Mar 9 2008, 02:24) ... Mar 9 2008, 17:20 vshemm SSerge умолчал о самом главном: после проверки фла... Mar 9 2008, 18:30 Baser Цитата(vshemm @ Mar 9 2008, 20:30) SSerge... Mar 9 2008, 19:49  vshemm Цитата(Baser @ Mar 9 2008, 22:49) "П... Mar 10 2008, 10:28   Дон Амброзио Спасибо всем ответившим.
Решил остановиться на та... Mar 10 2008, 10:54 vshemm При "классической" схеме подразумевается... Mar 10 2008, 15:46 Дон Амброзио Цитата(vshemm @ Mar 10 2008, 18:46) А уме... Mar 10 2008, 16:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|