Как стать автором
Обновить

Комментарии 16

НЛО прилетело и опубликовало эту надпись здесь
Ну, спинлок реализовать — здесь много ума не надо. Достаточно просто SVC вызывать в цикле.

С семафорами сложнее, но концептуально для них тоже всё готово.
При кооперативной многозадачности можно и без них.
Задача и так знает, в какой момент времени она отдает управление.
На самом деле нет. Например, при доступе к ресурсам. Два кооперативных потока могут неподелить доступ к шине i2c, например.
Да, если требуемое время доступа к ресурсу превышает «квант».

Но можно спроектировать так, что или задача не отдает управление, пока не закончит возиться с ресурсом, то есть увеличить «квант» (если вносимая этим задержка выполнения других задач некритична), или так, чтобы непосредственно с ресурсом работала одна выделенная низкоуровневая задача — «драйвер», разгребающая запросы от разных задач уровнем выше — а постановка запроса в очередь может делаться быстро.

Некий аналог критических секции требуется для обеспечения атомарности доступа к данным из прерываний.
НЛО прилетело и опубликовало эту надпись здесь
Блин, действительно о вытесняющей — перечитываю и не понимаю, где мне кооперативная померещилась.
Если пойти дальше, то можно сделать многозадачную систему бе стеков задач. Такая event driven тогда не надо использовать СистемТик периодический и бесцельно просыпаться для проверки есть задача или нет… Принцип примерно такой, таймер знает, что задача должна выполнится через 100мс, он настраивается на 100мс, и по его истечению вызывается функция задачи, правда она не должна быть сделана в бесконечной петле, т. е. Это просто периодический вызов функции на том же стеке. Преимущества: меньше ОЗУ, меньше потребление, проще архитектура ПО.
Теорию можно почитать тут:

www.state-machine.com/qpc/arm-cm_qk.html
Ну, это не пойти дальше. Это скорее пойти в другом направлении.
Tickless scheduling с невытесняющей многозадачностью — это, собственно, основной метод в энергоэффективных RTOS.

Иначе на системе, в которой события происходят редко, SysTick может сожрать значительную часть батарейки.

Можно и с вытесняющей…

Хрень полная. Минус. Я б еще один влепил, за пропаганду "не хочу учить ОС", но не получится.
Суть всех ОС в том, что они предлагают язык абстракций, т.е. другой разаботчик зная этот язык гораздо быстрее поймет ваш код, нежели в случае использования такого велосипеда.

Так и не понял, зачем вместо бесплатной кроссплатформенной FreeRTOS (к примеру) изобретать велосипед…

"не хочу использовать проверенную и понятную ртось, потомучто мне лень, а вот свой велосипед написать не лень"


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

Напишите мне на Яндекс.
Я там digitman. Я Вам пришлю. Но оно пока мало полезно. Просто работоспособность проверена.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории