|
|
  |
FreeRTOS на AT91SAM7, непонятно с Supervisor Mode |
|
|
|
May 26 2007, 13:07
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 038

|
В имеющихся примерах (от самой FreeRTOS и от WinARM), под "Supervisor Mode" выделяют обьемный (от 256 до 1К) стек. Однако все потоки выполняются в "System mode", а тело планировщика в прерывании от таймера (т.е. в IRQ Mode).
Вопрос : зачем стек неработающему режиму?
|
|
|
|
|
May 26 2007, 16:13
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 038

|
Цитата(zltigo @ May 26 2007, 17:32)  В Supervisor проходит вся инициализация и scheduler работает (посмотрите taskYIELD() ) в нем а не только в IRQ. Посмотрел. Увидел следующее : если используется "ручное" переключение потоков, или выбран не вытесняющий планировщик, то вызывая "SWI" мы в итоге вызовем код который почти 1в1 повторяет код в таймерном прерывании. И действительно, этот код будет вызван из Supervisor Mode. Значит ли это, что если я использую вытесняющую многозадачность и не использую со-функции, то могу уменьшить SVC-stack? (смехота, в примерах с вытесняющей многозадачностью - вектор прерывания SWI указывает на заглушку, но SVC-stack имеет размер в 1К)
|
|
|
|
|
May 26 2007, 16:57
|

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

|
Цитата(YKonstantin @ May 26 2007, 19:13)  Значит ли это, что если я использую вытесняющую многозадачность и не использую со-функции, то могу уменьшить SVC-stack? А что, Вам удалось построить систему с приложениями никогда добровольно не отдающими время  ? Ну довытеснялись задачи до самой приоритетной и что? Самая приоритетная никогда не кончится и все остальные будут вечно ждать? Цитата (смехота, в примерах с вытесняющей многозадачностью - вектор прерывания SWI указывает на заглушку, но SVC-stack имеет размер в 1К) Не смешно. "Заглушек" нет и быть не может. Смотрите тщательнее. P.S. 1. Размеры стеков от фонаря в 'примерах' указаны - думайте сами о достаточных размерах. 2. Если руки чешутся (и это правильно  ) уменьшить - выкиньте совсем ненужный "System Mode" стек.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 26 2007, 18:25
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 038

|
Мда-с. Сразу не обратил внимание на количество ссылок на "taskYIELD". Должен признать : используется, да еще как [используется]!
Значит просто уменьшу размер стека ...
|
|
|
|
|
May 27 2007, 08:44
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 038

|
Цитата(zltigo @ May 26 2007, 21:52)  Ну а CSTACK выбросили? Что это такое - "CSTACK"? (использую WinARM)
|
|
|
|
|
May 27 2007, 09:22
|

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

|
Цитата(YKonstantin @ May 27 2007, 11:44)  Что это такое - "CSTACK"? Традиционное название сегмента стека, для ARM, это конечно не однозначно. Имел ввиду System/User Stack. В портах этот сегмент обычно присутствует без всякой на то надобности. Иногда, правда, его указатель инициализируют в самый низ стеков и не указывают линкеру размер и он вроде как есть, а вроде как и нет  Цитата (использую WinARM) GCC этот компилятор называется  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 27 2007, 10:41
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 038

|
По поводу UserStack - да, его нет. А вот с SystemStack ... Проверил еще раз и сделал вывод о том, что начитался примеров от криворуких авторов! Примеры для IAR не трогают SysMode, а примеры для GCC содержат инициализацию SysMode в стартап-файле.
|
|
|
|
|
May 27 2007, 11:34
|

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

|
Цитата(YKonstantin @ May 27 2007, 13:41)  По поводу UserStack - да, его нет. А вот с SystemStack ... У этих режимов один и тот-же Stack и набор регистров  Цитата Проверил еще раз и сделал вывод о том, что начитался примеров от криворуких авторов! К сожалению, такие примеры преобладают в интернете  Всегда нужно при возможности критически оценивать  . Ну а демка порта IAR для AT91SAM7 в части инициализации стеков содержит своих тараканов - сегменты под стеки не описали - просто откусили с конца памяти линкеру не сообщив. Вот весело будет, когда память на стеки молча наедет..
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 27 2007, 14:16
|
Участник

Группа: Новичок
Сообщений: 28
Регистрация: 7-11-06
Пользователь №: 22 038

|
Цитата(zltigo @ May 27 2007, 14:34)  У этих режимов один и тот-же Stack и набор регистров  Теперь ясно.
Сообщение отредактировал YKonstantin - May 27 2007, 14:20
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|