Jump to content

    
Sign in to follow this  
Cosmojam

Очередь в прерываниях, чаще системного тика

Recommended Posts

Есть некая задача, требующая прерывания каждые 250мкс и обмен данными с другими задачами. Для получения этого времени использую таймер. Системный тик - 1мс.

Подскажите, нормально ли использовать встроенный механизм очередей для обмена данными между задачами и прерыванием, которое в 4 раза чаще тика?

Share this post


Link to post
Share on other sites
Есть некая задача, требующая прерывания каждые 250мкс и обмен данными с другими задачами. Для получения этого времени использую таймер. Системный тик - 1мс.

Подскажите, нормально ли использовать встроенный механизм очередей для обмена данными между задачами и прерыванием, которое в 4 раза чаще тика?

 

нормально, если очередь длинная, но очень неэффективно.

Share this post


Link to post
Share on other sites
Почему?

 

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

 

 

 

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

 

Например:

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this