Ну вы, батенька и хам! Когда нечего сказать - переходите на оскорбления?
В чем тут ахинея - это абсолютно рабочий фрагмент, реализующий переключение контекста.
Выбор задачи - это совсем другое. Я не собираюсь тут выкладывать алгоритмы, но все отлично работает.
При двух задачах - вообще не медленнее ваших ISR-костылей.
Частота системного таймера 1 КГц, но вполне можно выставить и 20.
Прерывание не вызывают! Это прерывание вызывает ISR. Такие оговорки вызывают сомнения в вашей компетентности.
Смена контекста происходит не в ISR. После обработки любого прерывания вызывается диспетчер задач, который и осуществляет переключение.
Кроме того, переключение происходит при попытке захвата закрытого семафора, при выполнении функций типа taskDelay и т.п.
Ничуть не больше, чем в вашей ISR от таймера! Каждая из трех задач будет однократно активирована раз в 50, 70 и 90 мсек.
Че? Вы сами-то поняли, что сказали? Когда задача хочет перейти из состояния ACTIVE в состояние DELAYED это просто вызов процедуры переключения контекста. Для ARM-процессора при вызове процедуры в стек вообще ничего не записывается, чтоб вы знали. Адрес возврата передается в LR.
А вы попробуйте дизассемблировать код ISR. Или просто реализуйте ISR на ассемблере. Разглагольствовать все горазды, а разок попробовать - вся спесь куда-то девается.