Цитата(Golikov A. @ May 8 2014, 11:07)

таймер - это ограничение сверху, чтобы если задача не отдает процессор, его у нее отберут принудительно, спасибо за пояснения!
Только если для задачи с таким-же приоритетом могут отобрать! К примеру в uCOS, так как у всех задач уникальные приоритеты, процессор у активной задачи заберут
только когда появится более приоритетная, готовая к выполнению задача. А это означает - где-то будет вызвана функция освобождения семафора/мьютекса или
у более приоритетной задачи истечёт время приостановки задачи по OSTimeDelay().
И всегда есть самый низкоприоритетный IDLE-процесс, аккумулирующий все неиспользованные такты CPU в инструкциях WFE/WFI или в цикле вычисления загрузки CPU.
Цитата(Omnicake @ May 8 2014, 11:06)

У меня в дескрипторе есть строчка Status которая может быть либо 0 либо 1. Если 1 - то задача должна после обработки прерывания запустится, если 0 - то пропустить ее выполнение и вернуться к той, которая была. Судя по всему это именно вытесняющая многозадачность.
Отличие корпоратвиной от вытесняющей в том, что в первой использование времени CPU контролирует каждая задача самостоятельно, и сама должна следить сколько она времени отработала
и когда отпущенное ей время истечёт, самостоятельно передать управление другой задаче.
В вытесняющей эти функции берёт на себя шедулер.
Очевидно, что первый вариант более сложен для прикладных программистов, пишущих задачи, но более прост с точки зрения организации ОС.
К тому-же в первом варианте будут сложности с организацией семафоров, которые могут освобождаться в ISR.
PS: Вообще тема неверно озаглавлена. Ибо имеет отношение к STM ровно такое-же, как к любому другому Cortex-M, а к Keil - вообще никакого...