Bethowen81 0 8 июня, 2011 Опубликовано 8 июня, 2011 · Жалоба Можете подсказать по vCoRoutineSchedule я вызываю планировщик vCoRoutineSchedule не в vApplicationIdleHook а в обычной вытесняющей Task void vTask( void *pvParameters ) { while(1) { vCoRoutineSchedule(); } } работает нормально т.е кооперативные Task работают вместе с вытесняющими Task вопрос: можно ли вызывать планировщик vCoRoutineSchedule таким образом, нет ли каких либо подводных камне? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 8 июня, 2011 Опубликовано 8 июня, 2011 · Жалоба вопрос: можно ли вызывать планировщик vCoRoutineSchedule таким образом, нет ли каких либо подводных камне? Можно. Только Вы должны понимать, что в этом случае вы работаете на памяти этой задачи и эта задача жрет все время оставшееся от задач с более низким приоритетом. При этом, эта задача должна иметь минимальный приоритет, поскольку у Вас она в sleep не уходит. Задача с минимальным приоритетом в системе уже есть. На ней висит тот самый Hook, которым Вы не пользуетесь. Вопрос, а зачем Вы так сделали? Смысла нет, кроме затрат на память и время... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bethowen81 0 9 июня, 2011 Опубликовано 9 июня, 2011 · Жалоба 1. Если я запускаю кооперативный планировщик (vCoRoutineSchedule) в вытесняющей Task1 и с таким же приоритетом есть еще вытесняющая Task2, то они будет делить время работы.В отличии от Hook где vCoRoutineSchedule запускаеться только в том случае когда все задачи приостановлены. А в случае vCoRoutineSchedule в Task1 получаеться можно приостановить кооперативный планировщик(vCoRoutineSchedule) и еще воспользоваться Hook функцией. 2. По поводу затрат памяти. Да нет никаких затрат. Как я понимаю просто в случае где кооперативный планировщик (vCoRoutineSchedule) в вытесняющей Task1, память кооперативных программ будет распалагаться в стеке RTOS, а вот в случае vCoRoutineSchedule в Hook наверное в стеке компилятора. Вопрос как раз в этом случае. Не будет ли проблем при использовании кооперативным планировщиком (vCoRoutineSchedule) запущеном в вытесняющей Task1 проблем с памятью???!!! 3. Затраты на время будет + работа кооперативного планировщика(vCoRoutineSchedule). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 9 июня, 2011 Опубликовано 9 июня, 2011 · Жалоба 1. Если я запускаю кооперативный планировщик (vCoRoutineSchedule) в вытесняющей Task1 и с таким же приоритетом есть еще вытесняющая Task2, то они будет делить время работы Между собой не отдавая другим задачам более низкого приоритета. Посему, как ни крути, в том виде, как Вы написали это самая НИЗКОПРИОРИТЕТНАЯ задача должна быть. Принципиально это ничем не отличается от уже имеющейся Idle, которая в Вашем случае просто никогда не получит управление. А в ней, между прочим, бывают кроме вызова Hook и другие полезные действия. А в случае vCoRoutineSchedule в Task1 получаеться можно приостановить кооперативный планировщик... Его и так можно остановить, при желании. 2. По поводу затрат памяти. Да нет никаких затрат. Вы создали ЛИШНЮЮ задачу не воспользовавшись уже имеющейся. Бесполезные затраты ресурсов на эту лишнюю задачу есть. Как я понимаю просто в случае где кооперативный планировщик (vCoRoutineSchedule) в вытесняющей Task1, память кооперативных программ будет распалагаться в стеке RTOS, а вот в случае vCoRoutineSchedule в Hook наверное в стеке компилятора. Ой, как запущено :(. Слова "стек RTOS" и "стек компилятора" - полная бессмыслица :(. Начните с азов - у каждой задачи свой Task Control Block и Stack. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться