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

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


Ally
******

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



У вас похоже на типичную ошибку планирования ресурсов.
В нормально спланированной системе нет проблем недостатка таймеров.
Общее время обслуживания всех реалтайм задач за время системного тика должно быть не больше 70% его продолжительности.
Фиксация точного времени поступления событий осуществляется capture логикой.
Если нужно генерировать сигналы с точным временем, то на это есть compare логика в таймерах.
Переходите на Cortex M3 и не будете иметь проблем.
Если реально времени системного тика не хватает на обработку всех прерываний, то используют 2-х и более процессорные схемы: http://aly.ogmis.lt/OpenProjects/ARMDominator4/ARMD4.htm



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

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

А как вообще в операционках решают задачу когда прерывание с более высоким программным приоритетом обслуживания имеет низкий аппаратный приоритет. Как для него добиваются того, что даже при наличии прерываний с аппаратным приоритетом выше его приоритета LatencyTime было для него в допустимых пределах?
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 7 2008, 08:50
Сообщение #3


Местный
***

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



Цитата(AlexandrY @ Mar 7 2008, 11:24) *
Переходите на ....

Цитата(AlexandrY @ Mar 7 2008, 11:24) *
... то используют 2-х и более процессорные схемы...

Просто "Железо" уже разработано. И надо использовать по максимуму его возможности.

P.S. Хотя конечно в следующей разработке будут учтены все "узкие" места. Но это в СЛЕДУЮЩЕЙ разработке. А мне нужно как-то выкручиваться с уже имеющемся "железом"


Цитата(AlexandrY @ Mar 7 2008, 11:24) *
У вас похоже на типичную ошибку планирования ресурсов.
В нормально спланированной системе нет проблем недостатка таймеров.

Тут даже проблема не в недостатке таймеров, а в том, что аппаратный приоритет прерывания системного таймера нельзя менять. В результате чего у меня получается, что прерывания имеющие низкий ПРОГРАММНЫЙ приоритет имеют высокий АППАРАТНЫЙ приоритет. Вот с этим главный гимор


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 8 2008, 21:28
Сообщение #4


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Дон Амброзио @ Mar 7 2008, 10:50) *
Тут даже проблема не в недостатке таймеров, а в том, что аппаратный приоритет прерывания системного таймера нельзя менять. В результате чего у меня получается, что прерывания имеющие низкий ПРОГРАММНЫЙ приоритет имеют высокий АППАРАТНЫЙ приоритет. Вот с этим главный гимор

Не понял вашего высказывания. У АВР-ок только один уровень прерываний. И соответственно, АППАРАТНЫЙ приоритет прерываний работает только тогда, когда ОДНОВРЕМЕННО происходит больше одного события, требующего обработки прерывания. А в случае, когда программа УЖЕ находится в прерывании, его не может прервать ни одно другое, даже с самым высоким аппаратным приоритетом.

Это возможно только при организации программных вложенных прерываний. Применял вложенные прерывания именно для уменьшения джиттера при динамической индикации. Правда там не было РТОС.
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 9 2008, 00:24
Сообщение #5


Местный
***

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



Цитата(Baser @ Mar 9 2008, 00:28) *
У АВР-ок только один уровень прерываний.

Цитата(Baser @ Mar 9 2008, 00:28) *
АППАРАТНЫЙ приоритет прерываний работает ...

Вторая фраза противоречит первой: получается из Ваших слов в AVR у прерываний приоритета нет, а вроде как бы и есть

И как же Вы уменьшали джиттер, используя вложенные прерывания? Наверное глобально разрешая как можно быстрей прерывания в обработчиках прерываний?

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


--------------------
После устранения бага в программе она стала работать....хуже
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
- - 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
- - Дон Амброзио   И ещё одно отступление сделал от "классическо...   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 Текстовая версия Сейчас: 3rd August 2025 - 11:13
Рейтинг@Mail.ru


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