Перейти к содержанию
    

freertos vCoRoutineSchedule

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

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

 

void vTask( void *pvParameters )

{

while(1)

{

vCoRoutineSchedule();

}

}

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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

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

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...