реклама на сайте
подробности

 
 
> Можно ли добиться малого джиттера системного таймера, если есть прерывания с приоритетом выше сист. таймера
Дон Амброзио
сообщение Mar 6 2008, 06:50
Сообщение #1


Местный
***

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



Мне требуется в обработчике системного таймера вести поллинг сигнала (потому что в MCU таймеров всего 2 (ATmega8515): один используется для ШИМ, а другой как сист.таймер).
Для этого требуется маленькая погрешность точек на временной оси взятия отсчётов сигнала.

Из-за того, что существуют прерывания, приоритет которых выше прерывания таймера, приходиться их запрещать (дабы джиттер не увеличили сверх допустимого значения) и осуществлять их поллинг в обработчике сист.таймера. Из-за чего ISR системного таймера ещё больше "пухнет" в размерах. Из-за этого приходиться уменьшать частоту сэмплирования сигнала, что ухудшает качество девайса.

А как вообще в операционках решают задачу когда прерывание с более высоким программным приоритетом обслуживания имеет низкий аппаратный приоритет. Как для него добиваются того, что даже при наличии прерываний с аппаратным приоритетом выше его приоритета LatencyTime было для него в допустимых пределах?

Сообщение отредактировал Дон Амброзио - Mar 6 2008, 07:04


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Дон Амброзио
сообщение Mar 10 2008, 12:59
Сообщение #2


Местный
***

Группа: Участник*
Сообщений: 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


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Дон Амброзио   Можно ли добиться малого джиттера системного таймера   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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 20:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01442 секунд с 7
ELECTRONIX ©2004-2016