-
- Прерывание можно даже не блокировать, а положить рядом с данными счетчик, который изменяется в прерывании вместе с данными. Если и до и после чтения данных этот счетчик неизменен, то данные годные, иначе перечитать. Хотя проще заблокировать. - mr-x(13.10.2014 14:48)
- Это уже перетерли. - Codavr(13.10.2014 14:55)
- Про критическую секцию уже перетерли. Это как вариант, возможно даже и лучший в этом случае. Просто хочется чтобы "огласили весь список". - Codavr(13.10.2014 13:46)
- Ну если хочется альтернативы... то банальный FIFO достаточной глубины позволяет неспешно работать с данными без пропусков, а если хочется иметь всегда оперативные данные, то потребитель просто вычёрпывает его и использует последнее значение. =AlexD=(105 знак., 13.10.2014 14:30)
- Кольцевой буфер имеется ввиду, где данные не двигаются, а только указатель начала и конца? - Codavr(13.10.2014 14:49)
- Да, кольцевой. - =AlexD=(13.10.2014 14:50)
- Это тема. Спасибо. - Codavr(13.10.2014 14:54)
- Да, кольцевой. - =AlexD=(13.10.2014 14:50)
- Кольцевой буфер имеется ввиду, где данные не двигаются, а только указатель начала и конца? - Codavr(13.10.2014 14:49)
- ping-pong buffer + некольцевой DMA уже перетирали? - Vit(13.10.2014 14:01)
- Вроде еще нет. Излагай шо за зверь. - Codavr(13.10.2014 14:01)
- 2+ буфера. в обработчике DMA первым делом перезаряжаешь указатель на свободный буфер и запускаешь, из теперь уже "предыдущего" буфера можешь грести медленно и печально и даже в том же обработчике - Vit(13.10.2014 14:07)
- А если такая ситуевина Codavr(172 знак., 13.10.2014 14:12)
- в любом случае - один длинный буфер или 2+ коротких - общая длина должна быть с каким-то запасом. значение указателя для DMA актуально для DMA, та же фигня со свободными буферами и их "потребителями". сильно неспеша это медленнее, чем достаточно, Vit(171 знак., 13.10.2014 14:45)
- То есть мы читаем из дальнего конца буфра до которого кровавая рука обработчика DMA гарантировано не дотянется? Тогда по мне эстетичнее один кольцевой использовать. - Codavr(13.10.2014 14:53)
- сами буферы при 2+ могут быть расположены в памяти совсем не подряд. - Vit(13.10.2014 15:01)
- Я подумал, что 2+ это 2 буфера и больше. Я не ошибся, а то может я просто не понял? - Codavr(13.10.2014 15:04)
- не ошибся. - Vit(13.10.2014 16:07)
- Я подумал, что 2+ это 2 буфера и больше. Я не ошибся, а то может я просто не понял? - Codavr(13.10.2014 15:04)
- случаи бывают разные. например, вывод в ЦАП в MP3-плеере - там с парой буферов на канал достаточно удобно получается. - Vit(13.10.2014 14:58)
- Ну да, по ситуации это наверное может быть удобнее. - Codavr(13.10.2014 15:06)
- сами буферы при 2+ могут быть расположены в памяти совсем не подряд. - Vit(13.10.2014 15:01)
- То есть мы читаем из дальнего конца буфра до которого кровавая рука обработчика DMA гарантировано не дотянется? Тогда по мне эстетичнее один кольцевой использовать. - Codavr(13.10.2014 14:53)
- в любом случае - один длинный буфер или 2+ коротких - общая длина должна быть с каким-то запасом. значение указателя для DMA актуально для DMA, та же фигня со свободными буферами и их "потребителями". сильно неспеша это медленнее, чем достаточно, Vit(171 знак., 13.10.2014 14:45)
- А если такая ситуевина Codavr(172 знак., 13.10.2014 14:12)
- 2+ буфера. в обработчике DMA первым делом перезаряжаешь указатель на свободный буфер и запускаешь, из теперь уже "предыдущего" буфера можешь грести медленно и печально и даже в том же обработчике - Vit(13.10.2014 14:07)
- Вроде еще нет. Излагай шо за зверь. - Codavr(13.10.2014 14:01)
- Ну если хочется альтернативы... то банальный FIFO достаточной глубины позволяет неспешно работать с данными без пропусков, а если хочется иметь всегда оперативные данные, то потребитель просто вычёрпывает его и использует последнее значение. =AlexD=(105 знак., 13.10.2014 14:30)
- Прерывание можно даже не блокировать, а положить рядом с данными счетчик, который изменяется в прерывании вместе с данными. Если и до и после чтения данных этот счетчик неизменен, то данные годные, иначе перечитать. Хотя проще заблокировать. - mr-x(13.10.2014 14:48)