Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Очередь в прерываниях, чаще системного тика
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
Cosmojam
Есть некая задача, требующая прерывания каждые 250мкс и обмен данными с другими задачами. Для получения этого времени использую таймер. Системный тик - 1мс.
Подскажите, нормально ли использовать встроенный механизм очередей для обмена данными между задачами и прерыванием, которое в 4 раза чаще тика?
diwil
Цитата(Cosmojam @ Feb 15 2012, 12:37) *
Есть некая задача, требующая прерывания каждые 250мкс и обмен данными с другими задачами. Для получения этого времени использую таймер. Системный тик - 1мс.
Подскажите, нормально ли использовать встроенный механизм очередей для обмена данными между задачами и прерыванием, которое в 4 раза чаще тика?


нормально, если очередь длинная, но очень неэффективно.
Terminator
Цитата(diwil @ Feb 15 2012, 15:49) *
нормально, если очередь длинная, но очень неэффективно.

Почему?
diwil
Цитата(Terminator @ Feb 15 2012, 13:26) *
Почему?


для записи элемента в очередь используется довольно-таки большой и тяжелый механизм. Он будет вызываться 4 раза на тик. Это будет отъедать время, которое могут использовать другие задачи (включая сон).



Если известно, что данные точно приходят, то более разумно организовать кольцевой буфер, а в прерывании вообще не использовать механизмов оси. При этом синхронизацию организовать либо на спинлоках, либо вообще просто ждать в приемнике данных в цикле, когда обновится индекс записи в буфер.

Например:

FreeRTOS 7.0, Keil. Тики - 10мс. UART @57600 примерно 2kbytes/sec передается. STM32L152 @ 16MHz. Разница очереди (каждый принятый байт в очередь) и буфера - примерно 0.2мА не в пользу очереди.
Cosmojam
Спасибо за ответы
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.