QUOTE (Jenya7 @ Jun 7 2018, 12:42)
функция без прерываний[code]uint8_t spi_rw_flash(uint8_t tx, uint8_t* rx)
Вот не делал бы я поллинг в системе, которая является событийно-ориентированный. Вы просто угробляете время проца, вместо того, чтобы отдать его более важной задачи. Я понимаю, что сейчас этой задачи нет. Но всё равно, так лучше не делать.
QUOTE (Jenya7 @ Jun 7 2018, 12:42)
а как нужно отдавать управление шедулеру? по идее он сам знает когда переключиться на другой таск.
Да, если это ос вытесняющая, то таймер переключит вас с одного процесса на другой. Ну, а если вы молотите поллингом в задаче, у которой приоритет наивысший, то задачи с меньшим приоритетом никогда не получат управление. Нужно использовать прерывания, и ждать в задаче событий (используя семафоры, очереди, уведомления). Вот тогда, пока благородная железка занимается своим делом, вы ждёте прерывание, а процессор отдаёт это ожидание задаче, которая хочет что-то поделать, пусть она даже и низкоприоритетная. Когда железка закончит, она вызывает прерывание, а в прерывании вы сигналите задаче: "задача, для тебя есть работа". И если нет других, более приоритетных задач, то она получает управление. Обратите внимание, что в обоих случаях (по поллингу и с исопльзованием средств ос) задача ждёт, но время тратиться по-разному.
Почитать об этом вы можете в руководство на любую ос. Я рекомендую на scmRTOS. Там всё доходчиво разъяснено. Также почитайте
эту тему более, чем десятилетней давности. Там я задавал такие же вопросы)))
Выбор.