Jump to content

    

freertos vCoRoutineSchedule

Можете подсказать по vCoRoutineSchedule

я вызываю планировщик vCoRoutineSchedule не в vApplicationIdleHook а в обычной вытесняющей Task

 

void vTask( void *pvParameters )

{

while(1)

{

vCoRoutineSchedule();

}

}

 

работает нормально т.е кооперативные Task работают вместе с вытесняющими Task

вопрос: можно ли вызывать планировщик vCoRoutineSchedule таким образом, нет ли каких либо подводных камне?

Share this post


Link to post
Share on other sites
вопрос: можно ли вызывать планировщик vCoRoutineSchedule таким образом, нет ли каких либо подводных камне?

Можно. Только Вы должны понимать, что в этом случае вы работаете на памяти этой задачи и эта задача жрет все время оставшееся от задач с более низким приоритетом. При этом, эта задача должна иметь минимальный приоритет, поскольку у Вас она в sleep не уходит. Задача с минимальным приоритетом в системе уже есть. На ней висит тот самый Hook, которым Вы не пользуетесь. Вопрос, а зачем Вы так сделали? Смысла нет, кроме затрат на память и время...

Share this post


Link to post
Share on other sites

 

1. Если я запускаю кооперативный планировщик (vCoRoutineSchedule) в вытесняющей Task1 и с таким же приоритетом есть еще вытесняющая Task2, то они будет делить время работы.В отличии от Hook где vCoRoutineSchedule запускаеться только в том случае когда все задачи приостановлены. А в случае vCoRoutineSchedule в Task1 получаеться можно приостановить кооперативный планировщик(vCoRoutineSchedule) и еще воспользоваться Hook функцией.

2. По поводу затрат памяти. Да нет никаких затрат. Как я понимаю просто в случае где кооперативный планировщик (vCoRoutineSchedule) в вытесняющей Task1, память кооперативных программ будет распалагаться в стеке RTOS, а вот в

случае vCoRoutineSchedule в Hook наверное в стеке компилятора.

Вопрос как раз в этом случае. Не будет ли проблем при использовании кооперативным планировщиком (vCoRoutineSchedule) запущеном в вытесняющей Task1 проблем с памятью???!!!

3. Затраты на время будет + работа кооперативного планировщика(vCoRoutineSchedule).

 

 

Share this post


Link to post
Share on other sites
1. Если я запускаю кооперативный планировщик (vCoRoutineSchedule) в вытесняющей Task1 и с таким же приоритетом есть еще вытесняющая Task2, то они будет делить время работы

Между собой не отдавая другим задачам более низкого приоритета. Посему, как ни крути, в том виде, как Вы написали это самая НИЗКОПРИОРИТЕТНАЯ задача должна быть. Принципиально это ничем не отличается от уже имеющейся Idle, которая в Вашем случае просто никогда не получит управление. А в ней, между прочим, бывают кроме вызова Hook и другие полезные действия.

А в случае vCoRoutineSchedule в Task1 получаеться можно приостановить кооперативный планировщик...

Его и так можно остановить, при желании.

2. По поводу затрат памяти. Да нет никаких затрат.

Вы создали ЛИШНЮЮ задачу не воспользовавшись уже имеющейся. Бесполезные затраты ресурсов на эту лишнюю задачу есть.

Как я понимаю просто в случае где кооперативный планировщик (vCoRoutineSchedule) в вытесняющей Task1, память кооперативных программ будет распалагаться в стеке RTOS, а вот в случае vCoRoutineSchedule в Hook наверное в стеке компилятора.

Ой, как запущено :(. Слова "стек RTOS" и "стек компилятора" - полная бессмыслица :(. Начните с азов - у каждой задачи свой Task Control Block и Stack.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this