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

Здравствуйте, не поскажите, есть-ли в FreeRTOS поддержка рабоы на 2х ядрах PowerPC405/440 ?

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


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

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

 

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

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


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

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

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

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

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

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


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

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

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

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

 

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

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


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

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

Тогда считайте, что я в танке, ибо отвечать не понимая, что Вам не понятно не могу.

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


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

На что влияет установка configIDLE_SHOULD_YIELD в 0 или в 1 ?

Надеюсь так понятней.

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


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

Надеюсь так понятней.

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

/* 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() из такого обработчика не вызывается.

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


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

Объясните пожалуйста глобальный смысл в дефайнах FreeRTOSа конструкций типа этой. Просто 0x0020 не катит?

 ( ( unsigned portLONG ) 0x0020 )

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


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

Объясните..

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

(unsigned long)0x0020

или

0x0020UL

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

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


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

Относительно "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)

Изменено пользователем GetSmart

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


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

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

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

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


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

Я озадачен :(. yield - "прекратить,уступить" ключевое понятие

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

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


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

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

 

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

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

 

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

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


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

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

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

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

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

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


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

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

 

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

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


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

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

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

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

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

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

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

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

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

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