Есть и другое мнение: https://t.me/riscv_mcu/170203
а почему здесь вместо critical section не используется vTaskSuspendAll() и xTaskResumeAll() ?
просто critical section выключает прерывания, а в xStreamBufferSend() происходит копирование из одного буфера в другой
приостановка планировщика только на время отключает смену контекста, но прерывания обрабатываться будут
и разве самой функцией xStreamBufferSend() не гарантируется атомарность копирования? Наверняка там уже внутри копирование производится с помощью этого механизма
Ну и, собственно, всё началось с реализации, где я действительно использовал критические секции. Но проблема с непробуждением задачи была изначально.
Я шагаю отладчиком по инструкциям кода. Никаких прерываний, с момента входа в xStreamBufferSend(), никаких переключений контекста не случается - всё укладывается во время одного тика. Тем не менее, задача не пробуждается.