Jump to content

    
Sign in to follow this  
MALLOY2

FreeRTOS общие вопросы

Recommended Posts

Заранее извиняюсь за плохое знание аглицкого. Кто может подсказать по-русски предназначение дефайна configIDLE_SHOULD_YIELD ?

 

И ещё вопросик: Почему прерывание таймера, переключающее тред на следующий сделано с максимальным приоритетом? ИМХО логичнее делать минимальный.

Share this post


Link to post
Share on other sites
Кто может подсказать по-русски предназначение дефайна configIDLE_SHOULD_YIELD ?

Вопрос не совсем понятен - проблемы, например, с хитро-английским модальным глаголом should, так в этом конкретном случае для выражения меньшей степени уверенности, нежели must - т.е. хорошо ложится на русское "может быть"? Или проблемы с переводом комментариев?

Почему прерывание таймера, переключающее тред на следующий сделано с максимальным приоритетом? ИМХО логичнее делать минимальный.

Это относится к конкретному порту - делайте, как считаете нужным в Вашем конкретном случае.

Share this post


Link to post
Share on other sites
Вопрос не совсем понятен - проблемы, например, с хитро-английским модальным глаголом should, так в этом конкретном случае для выражения меньшей степени уверенности, нежели must - т.е. хорошо ложится на русское "может быть"? Или проблемы с переводом комментариев?

Для тех, кто в танке повторю вопрос:

Кто может подсказать по-русски предназначение дефайна configIDLE_SHOULD_YIELD ?

 

За ответ на второй вопрос спасибо.

Share this post


Link to post
Share on other sites
Надеюсь так понятней.

Это написано в комментариях

/* When using preemption tasks of equal priority will be

timesliced. If a task that is sharing the idle priority is ready

to run then the idle task should yield before the end of the

timeslice.

*/

В реальности в Idle может быть полезным следить не сколько за наличием задач с приоритетом равным Idle (лично я не пользую таких), сколько за приоритетными задачами которые были включены в список в результате работы планировщика из обработчика прерывания, но сам обработчик не содержит громоздкого сохранения контекста и соответственно YIELD() из такого обработчика не вызывается.

Share this post


Link to post
Share on other sites
Объясните..

Относительно "portLONG" - чисто бзик Автора, от которого он в конце концов, слава те господи, отказался. Ну а

(unsigned long)0x0020

или

0x0020UL

это для полной определенности, дабы и человеку было видно и самым разным компиляторам нималейших шансов для непонимания не оставить.

Share this post


Link to post
Share on other sites
Относительно "portLONG" - чисто бзик Автора, от которого он в конце концов, слава те господи, отказался.

От этого "бзика" у меня в проге не хотели компилиться конструкции типа

#define AdcRate        8000
#define AdcDivider    (((configCPU_CLOCK_HZ/4/11) + (AdcRate/2)) / AdcRate)

#if    (AdcDivider > 256)
#error "Недопустимая частота сэмплирования АЦП"
#endif

 

А вот при определении

#define configCPU_CLOCK_HZ            ( 24000000UL )
вместо
#define configCPU_CLOCK_HZ            ( ( unsigned portLONG ) 24000000 )

Эта конструкция (#if ...) нормально препроцессором отрабатывается.

 

/* When using preemption tasks of equal priority will be

timesliced. If a task that is sharing the idle priority is ready

to run then the idle task should yield before the end of the

timeslice.*/

Я опять ничерта не понял :). Особенно слово yield в данном контексте (вообще применительно к RTOS)

Edited by GetSmart

Share this post


Link to post
Share on other sites
Особенно слово yield в данном контексте (вообще применительно к RTOS)

Я озадачен :(. yield - "прекратить,уступить" ключевое понятие, а taskyield() самая "главная" функция именно RTOS. Это собственно переключение контекста. Используется, как для добровольного, так и для принудительного по таймеру перехода на другую задачу. Глагол should в этом контексте описан ранее.

Share this post


Link to post
Share on other sites
Я озадачен :(. yield - "прекратить,уступить" ключевое понятие

Мерси боку. Знаю много аглицких слов, но этого не знал. А в словаре у него с десяток разных смыслов. Не поймёшь какой здесь.

Share this post


Link to post
Share on other sites
В реальности в Idle может быть полезным следить не сколько за наличием задач с приоритетом равным Idle (лично я не пользую таких), сколько за приоритетными задачами которые были включены в список в результате работы планировщика из обработчика прерывания, но сам обработчик не содержит громоздкого сохранения контекста и соответственно YIELD() из такого обработчика не вызывается.

 

Т.е. если в обработчике прерывания(в котором нет YIELD), скажем в очередь складывается что-либо, то высокоприоритетная задача которая ждёт сообщений из этой очереди вызовется только в момент смены контекста вызванного каким-нибудь другим событием?

И соответственно configIDLE_SHOULD_YIELD установленный в 1 поможет ускорить эту смену?

 

Я правильно понимаю?

Share this post


Link to post
Share on other sites
Т.е. если в обработчике прерывания(в котором нет YIELD), скажем в очередь складывается что-либо, то высокоприоритетная задача которая ждёт сообщений из этой очереди вызовется только в момент смены контекста вызванного каким-нибудь другим событием?

Да, когда прерванная задача отдаст управление, или будут разборки по таймерному прерыванию.

И соответственно configIDLE_SHOULD_YIELD установленный в 1 поможет ускорить эту смену?

Для текущей официальной реализации, насколько я помню, это работает только для задач с приоритетом равным IDLE, т.е. при наличии в очереди задачи с таким приоритетом ей отдается управление. У Вас есть такие задачи? Но, естественно, в IDLE можно наворотить всякого и реализовать любой механизм, нежели надо.

Share this post


Link to post
Share on other sites
Для текущей официальной реализации, насколько я помню, это работает только для задач с приоритетом равным IDLE, т.е. при наличии в очереди задачи с таким приоритетом ей отдается управление. У Вас есть такие задачи? Но, естественно, в IDLE можно наворотить всякого и реализовать любой механизм, нежели надо.

 

Нет, задач с IDLE приоритетом у меня нет. Т.е. получается, что в худшем случае высокоприоритетная задача будет ждать 1 тик?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this