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

 
 
> Можно ли добиться малого джиттера системного таймера, если есть прерывания с приоритетом выше сист. таймера
Дон Амброзио
сообщение 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 9 2008, 09:30
Сообщение #2


Местный
***

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



Решил делать так:
1.Запретить все прерывания, кроме прерываний системного таймера.
2.Создать в обработчике системного таймера некий микропоток, который будет вести поллинг для всех других потоков и обеспечивать малый джиттер моментов поллинга (делаем это так: вошли в обработчик; скомпенсировали джиттер момента входа в обработчик введя цикл простоя до LatencyTimeMax; сделали поллинг всего что требуется другим потокам)
3.Ввести в обработчик 3-4 микропотока, которые обрабатывают каждый свои данные, полученные микропотоком, произвёдшим поллинг

Минусы:
Обработчик системного таймера "распух" почти до 1800 тактов процессора

Плюсы:
1.Зато у меня теперь аж сразу 4 потока имеют джиттер моментов поллинга не более 10 тактов. Таким образом обеспечивается стабильность частоты поллинга 10/1800*100 = 0,55%, что вполне устроит даже самые требовательные к разбросу частоты поллинга приложения (например реализация программного UART)
2.Частота поллинга получается всё же достаточно высокой (1 поллинг в 1800 тактов процессора) сразу у 4-х потоков

Сообщение отредактировал Дон Амброзио - Mar 9 2008, 09:37


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 9 2008, 10:06
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Что-то у вас совсем там плохо.
На атмеге в нормальной RTOS все время переключения контекста занимает не более 640 тактов.
А выполнение ISR по системному тику и того меньше.
Один сигнал можно посадить на Input Capture Unit, т.е. прецизионно отслеживать вообще без всякого полинга. Остальные посадить на прерывания от Compatre Unit, т.е. делать полинг хоть каждые 10 мкс. (и джитер доли мкс. )
А ISR обслуживания RTOS делается обычно самой низкоприоритетной и ничего туда дополнительно не вставляется.
Только не надо аппелировать к вашим терминам "микропоток", "системный таймер"
и т.д. Этими понятиями обозначают обычно нечто иное чего не может быть в атмеге.

Цитата(Дон Амброзио @ Mar 9 2008, 14:00) *
Решил делать так:
1.Запретить все прерывания, кроме прерываний системного таймера.
2.Создать в обработчике системного таймера некий микропоток, который будет вести поллинг для всех других потоков и обеспечивать малый джиттер моментов поллинга (делаем это так: вошли в обработчик; скомпенсировали джиттер момента входа в обработчик введя цикл простоя до LatencyTimeMax; сделали поллинг всего что требуется другим потокам)
3.Ввести в обработчик 3-4 микропотока, которые обрабатывают каждый свои данные, полученные микропотоком, произвёдшим поллинг

Минусы:
Обработчик системного таймера "распух" почти до 1800 тактов процессора

Плюсы:
1.Зато у меня теперь аж сразу 4 потока имеют джиттер моментов поллинга не более 10 тактов. Таким образом обеспечивается стабильность частоты поллинга 10/1800*100 = 0,55%, что вполне устроит даже самые требовательные к разбросу частоты поллинга приложения (например реализация программного UART)
2.Частота поллинга получается всё же достаточно высокой (1 поллинг в 1800 тактов процессора) сразу у 4-х потоков
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 9 2008, 11:52
Сообщение #4


Местный
***

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



Цитата(AlexandrY @ Mar 9 2008, 13:06) *
Что-то у вас совсем там плохо.
На атмеге в нормальной RTOS все время переключения контекста занимает не более 640 тактов.

У меня переключение контекста (точнее смена текущего running-потока) занимает для самых "тяжеловесных" потоков порядка 150-ти тактов

Цитата(AlexandrY @ Mar 9 2008, 13:06) *
А выполнение ISR по системному тику и того меньше.
Это зависит от того, что нужно делать в обработчике. Если только обслужить датчик реального времени, то тогда да..

Цитата(AlexandrY @ Mar 9 2008, 13:06) *
Один сигнал можно посадить на Input Capture Unit, т.е. прецизионно отслеживать вообще без всякого полинга. Остальные посадить на прерывания от Compatre Unit, т.е. делать полинг хоть каждые 10 мкс. (и джитер доли мкс. )

Я же говорю, железо уже готово и MCU = ATmega8515. Таймер T1 используется для ШИМ-а, а T0 как системный таймер. Больше таймеров нет.


Цитата(AlexandrY @ Mar 9 2008, 13:06) *
А ISR обслуживания RTOS ..

Что за "зверь" такой? Никогда не слышал о нём

Цитата(AlexandrY @ Mar 9 2008, 13:06) *
Что-то у вас совсем там плохо.

Цитата(AlexandrY @ Mar 9 2008, 13:06) *
в нормальной RTOS ...

Цитата(AlexandrY @ Mar 9 2008, 13:06) *
Только не надо аппелировать к вашим терминам "микропоток", "системный таймер" и т.д. Этими понятиями обозначают обычно нечто иное чего не может быть в атмеге.


Давайте только поменьше негатива.. Может у меня и "НЕНОРМАЛЬНАЯ" (по Вашим понятиям) RTOS, давайте всё же больше говорить по существу, а эмоции оставим в стороне

P.S. Вернёмся всё же к "нашим баранам": как обеспечить малый джиттер таймера T0 в ATmega8515 если его прерывание имеет аж 13(!!!) приоритет (считая что 0 - это самый высокий приоритет)

Цитата(AlexandrY @ Mar 9 2008, 13:06) *
Один сигнал можно посадить на Input Capture Unit, т.е. прецизионно отслеживать вообще без всякого полинга.

Ага... Можно... А как же тот факт, что преывания INT0 и INT1 в ATmega8515 имеют более высокий приоритет , чем TIMER1CAPT? Т.е. вектор TIMER1CAPT стоит на 3-м месте после векторов INT0 и INT1..



А как Вы сделаете это на ATmega128 у которой вектор TIMER1CAPT стоит вообще на 11-м месте ?

Сообщение отредактировал Дон Амброзио - Mar 9 2008, 11:53


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
vshemm
сообщение Mar 9 2008, 12:00
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



Цитата(Дон Амброзио @ Mar 9 2008, 14:41) *
P.S. Вернёмся всё же к "нашим баранам": как обеспечить малый джиттер таймера T0 в ATmega8515 если его прерывание имеет аж 13(!!!) приоритет (считая что 0 - это самый высокий приоритет)

Как можно быстрее разрешать прерывания в обработчиках прерываний 0-12, а сам обработчик таймера выполнять при запрещенных прерываниях (последнее на джиттер не влияет) smile.gif
Ну или как Вы сделали.
Baser все правильно сказал smile.gif
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
|- - Дон Амброзио   Цитата(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
- - Дон Амброзио   И ещё одно отступление сделал от "классическо...   Mar 10 2008, 12:59
- - 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 Текстовая версия Сейчас: 31st July 2025 - 13:11
Рейтинг@Mail.ru


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