|
|
  |
FreeRTOS общие вопросы |
|
|
|
Nov 12 2009, 06:02
|
Группа: Участник
Сообщений: 14
Регистрация: 8-09-09
Пользователь №: 52 247

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

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(GetSmart @ Nov 12 2009, 12:10)  Кто может подсказать по-русски предназначение дефайна configIDLE_SHOULD_YIELD ? Вопрос не совсем понятен - проблемы, например, с хитро-английским модальным глаголом should, так в этом конкретном случае для выражения меньшей степени уверенности, нежели must - т.е. хорошо ложится на русское "может быть"? Или проблемы с переводом комментариев? Цитата Почему прерывание таймера, переключающее тред на следующий сделано с максимальным приоритетом? ИМХО логичнее делать минимальный. Это относится к конкретному порту - делайте, как считаете нужным в Вашем конкретном случае.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 12 2009, 09:38
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Nov 12 2009, 15:30)  Вопрос не совсем понятен - проблемы, например, с хитро-английским модальным глаголом should, так в этом конкретном случае для выражения меньшей степени уверенности, нежели must - т.е. хорошо ложится на русское "может быть"? Или проблемы с переводом комментариев? Для тех, кто в танке повторю вопрос: Кто может подсказать по-русски предназначение дефайна configIDLE_SHOULD_YIELD ? За ответ на второй вопрос спасибо.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 12 2009, 10:07
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(GetSmart @ Nov 12 2009, 12:51)  Надеюсь так понятней. Это написано в комментариях /* 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() из такого обработчика не вызывается.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 12 2009, 14:33
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(GetSmart @ Nov 12 2009, 16:07)  Объясните.. Относительно "portLONG" - чисто бзик Автора, от которого он в конце концов, слава те господи, отказался. Ну а (unsigned long)0x0020 или 0x0020UL это для полной определенности, дабы и человеку было видно и самым разным компиляторам нималейших шансов для непонимания не оставить.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 13 2009, 04:02
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Nov 12 2009, 20:33)  Относительно "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 ...) нормально препроцессором отрабатывается. Цитата(zltigo @ Nov 12 2009, 16:07)  /* 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 - Nov 13 2009, 04:00
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 17 2009, 10:50
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Цитата(zltigo @ Nov 12 2009, 16:07)  В реальности в Idle может быть полезным следить не сколько за наличием задач с приоритетом равным Idle (лично я не пользую таких), сколько за приоритетными задачами которые были включены в список в результате работы планировщика из обработчика прерывания, но сам обработчик не содержит громоздкого сохранения контекста и соответственно YIELD() из такого обработчика не вызывается. Т.е. если в обработчике прерывания(в котором нет YIELD), скажем в очередь складывается что-либо, то высокоприоритетная задача которая ждёт сообщений из этой очереди вызовется только в момент смены контекста вызванного каким-нибудь другим событием? И соответственно configIDLE_SHOULD_YIELD установленный в 1 поможет ускорить эту смену? Я правильно понимаю?
|
|
|
|
|
Nov 17 2009, 11:13
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Terminator @ Nov 17 2009, 13:50)  Т.е. если в обработчике прерывания(в котором нет YIELD), скажем в очередь складывается что-либо, то высокоприоритетная задача которая ждёт сообщений из этой очереди вызовется только в момент смены контекста вызванного каким-нибудь другим событием? Да, когда прерванная задача отдаст управление, или будут разборки по таймерному прерыванию. Цитата И соответственно configIDLE_SHOULD_YIELD установленный в 1 поможет ускорить эту смену? Для текущей официальной реализации, насколько я помню, это работает только для задач с приоритетом равным IDLE, т.е. при наличии в очереди задачи с таким приоритетом ей отдается управление. У Вас есть такие задачи? Но, естественно, в IDLE можно наворотить всякого и реализовать любой механизм, нежели надо.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 17 2009, 11:31
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Цитата(zltigo @ Nov 17 2009, 17:13)  Для текущей официальной реализации, насколько я помню, это работает только для задач с приоритетом равным IDLE, т.е. при наличии в очереди задачи с таким приоритетом ей отдается управление. У Вас есть такие задачи? Но, естественно, в IDLE можно наворотить всякого и реализовать любой механизм, нежели надо. Нет, задач с IDLE приоритетом у меня нет. Т.е. получается, что в худшем случае высокоприоритетная задача будет ждать 1 тик?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|