Цитата(uriy @ Aug 15 2017, 17:18)
В прерывании по завершению DMA взводится семафор. Внутри задачи жду этот семафор, после получения переключаю буфер и так дальше.
В этом скорее всего и есть причина разрывов.
DMA надо перезапускать в самом ISR. А ещё лучше: организовать double-buffer DMA (чтобы после завершения передачи через DMA очередного блока сразу начинал передаваться следующий и при этом происходило прерывание, сигнализирующее о смене блока). И данные для следующих блоков уже должны быть подготовлены заранее задачей.
В задачу спускать только нотификацию о необходимости подкачки данных в кольцевой буфер DMA-блоков.
Цитата(uriy @ Aug 15 2017, 17:18)
Когда работает несколько задач возникает ощущение что на переключение контекста уходит много времени и получается разрыв в ЦАП.
Конечно. И когда будут (или уже есть) другие ISR, то они тоже будут приводить к задержке переключения контекста.