реклама на сайте
подробности

 
 
> Стэк в scmRTOS
spongebob
сообщение Apr 24 2012, 18:19
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 126
Регистрация: 14-11-10
Пользователь №: 60 879



Всем привет!

Поясните, пожалуйста, есть ли какая-нибудь взаимосвязь между стеком программы и стеками процессов в ОС?
И между их размерами...
Что конкретно хранится в стеках процессов?

Допустим, правильно ли следующее.

В системе два процесса (П1 и П2).
П1 завершает работу.
Планировщик копирует содержимое стека программы в стек П1, а содержимое стека П2 в стек программы и передает управление П2.
П2 работает, потом завершает работу.
Планировщик копирует содержимое стека программы в стек П2, а содержимое стека П1 в стек программы и передает управление П1.
Далее все повторяется по кругу...
Стеки процессов не должны превышать размеры стека программы. Допустим, если в mega1280 во внутренней памяти размещается только стек программы, то стеки каждого из процессов не должны превышать 8192 байт.

Бьюсь который день со спонтанной перезагрузкой, никак баг поймать не могу sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Apr 25 2012, 07:25
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Если массивы временные, то почему бы не использовать один и тот же, глобальный, для разных целей? Только уже без ОС.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 25 2012, 07:44
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ViKo @ Apr 25 2012, 13:25) *
Если массивы временные, то почему бы не использовать один и тот же, глобальный, для разных целей? Только уже без ОС.
А почему это вы думаете, что ОС запрещает использовать глобальные объекты? sm.gif

Цитата(spongebob @ Apr 25 2012, 11:57) *
Фактически, большая часть из этих массивов - временные, нужны иногда, поэтому было принято решение делать их локальными, чтобы они создавались на стеке (типа, память сэкономить).

В scmRTOS 4.0 появился механизм для вычисления используемого каждым процессом стека (см. пример 4-Debug). Включите его, погоняйте. Узнаете, сколько чего и где. Может быть, всё спокойно влезет во внутреннее ОЗУ.
Цитата(spongebob @ Apr 25 2012, 11:57) *
По поводу размещения... тут я совсем слаб...

Почитайте про линкерные скрипты. Примеры используемых avr-gcc скриптов находятся в lib\ldscripts.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 25 2012, 07:54
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AHTOXA @ Apr 25 2012, 10:44) *
А почему это вы думаете, что ОС запрещает использовать глобальные объекты? sm.gif

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

upd. Разве что с кооперативной многозадачностью...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 25 2012, 07:56
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А вот как раз для такого контроля в ОС и предусмотрены средства синхронизации sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 25 2012, 07:57
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AHTOXA @ Apr 25 2012, 10:56) *
А вот как раз для такого контроля в ОС и предусмотрены средства синхронизации sm.gif

Что это? sm.gif Мьютексы?
Работа с массивами - дело долгое. От многозадачности мало что останется, пмсм.
Go to the top of the page
 
+Quote Post
spongebob
сообщение Apr 25 2012, 10:37
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 126
Регистрация: 14-11-10
Пользователь №: 60 879



Цитата(ViKo @ Apr 25 2012, 11:57) *
Работа с массивами - дело долгое. От многозадачности мало что останется, пмсм.


Фактически дело обстоит так.
Имеется очередь (OS::channel) из элементов структур (в структуре массив 250 байт + еще несколько переменных).
Один процесс кладет в очередь данные (команды) когда нужно, другой процесс - извлекает их и обрабатывает.
Очередь нужна, чтобы "копить" команды, т. к., команды могут выполняться достаточно долго, а терять их очень нежелательно.
Ну и чтобы поместить элемент в очередь (push) и извлечь его оттуда (pop) приходится заводить временный элемент (тип и размер - выше), который и отжирает стек.
Сама очередь - глобальная.

Ну, может, архитектура не совсем нормальная... посоветуйте, пожалуйста, как лучше sm.gif

Цитата(AHTOXA @ Apr 25 2012, 12:24) *
А в случае топикстартера всё похоже ещё проще - с массивом работает одна задача. Просто массив надо вынести из стека задачи. В этом случае можно и без мутекса.


Да, с массивом работает одна задача. Но их как минимум два sm.gif
Принцип действия следующий.

Процесс 1 (главный, дает команды): команда -> функция подготовки команды и помещения ее в очередь (помещает данные в свой локальный буфер 1, а из него в очередь) -> очередь.
Процесс 2 (подчиненный выполняет команды): функция извлечения команды из очереди в буфер 2 и обработки команды.

Команды занимают приличный объем и имеют разный размер. Буферы 1 и 2 - одного типа, под все команды (универсальные).
Проблема в том как поместить в очередь команду, не используя для этого промежуточный буфер 1.

Цитата(ReAl @ Apr 25 2012, 11:56) *
Не надо так. Не только стеки, все внутренние структуры scmRTOS полетят во внешнюю память. Вообще всё. С соответствующим замедлением. Во внутренней останется только «стек main()», который и использовать-то толком тяжело.


Вот так вот изначально было сделано... фактически во внутренних 8 кБ остался только стек main().
Кстати, возвращаясь к вопросу об устройстве стеков при использовании ОС. После старта ОС стек main() не используется (планировщик при передаче управления заносит в указатель стека адрес стека требуемого процесса, который может быть расположен где угодно)?

А почему стек main() использовать тяжело?

Цитата
Перенести только нужное во внешнюю память можно так http://electronix.ru/forum/lofiversion/index.php/t47714.html


Спасибо, почитаем.
Как я понял, надо осваивать скриптописание для линкера? sm.gif
В двух словах, создаем специальные секции, в которые по необходимости переносим некоторые переменные, а эти секции линкуются куда надо (в данном случае во внешнюю память)?

Цитата(AHTOXA @ Apr 25 2012, 11:44) *
В scmRTOS 4.0 появился механизм для вычисления используемого каждым процессом стека (см. пример 4-Debug). Включите его, погоняйте. Узнаете, сколько чего и где. Может быть, всё спокойно влезет во внутреннее ОЗУ.


Очень интересно sm.gif

Цитата
Почитайте про линкерные скрипты. Примеры используемых avr-gcc скриптов находятся в lib\ldscripts.


Спасибо, почитаем, главное - понять что там написано sm.gif Пока линкерные скрипты для меня страшны sad.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- spongebob   Стэк в scmRTOS   Apr 24 2012, 18:19
- - _Артём_   Цитата(spongebob @ Apr 24 2012, 21:19) До...   Apr 24 2012, 18:40
|- - spongebob   Цитата(_Артём_ @ Apr 24 2012, 22:40) Это ...   Apr 24 2012, 18:52
|- - _Артём_   Цитата(spongebob @ Apr 24 2012, 21:52) На...   Apr 24 2012, 19:05
|- - spongebob   Цитата(_Артём_ @ Apr 24 2012, 23:05) У ва...   Apr 24 2012, 19:28
|- - _Артём_   Цитата(spongebob @ Apr 24 2012, 22:28) Аг...   Apr 24 2012, 20:04
|- - ReAl   Цитата(_Артём_ @ Apr 24 2012, 23:04) Инте...   Apr 25 2012, 04:32
|- - spongebob   Цитата(ReAl @ Apr 25 2012, 08:32) Стоило ...   Apr 25 2012, 05:57
|- - ReAl   Цитата(spongebob @ Apr 25 2012, 08:57) Де...   Apr 25 2012, 07:56
|- - _Артём_   Цитата(ReAl @ Apr 25 2012, 10:56) Во внут...   Apr 25 2012, 11:52
|- - spongebob   Цитата(_Артём_ @ Apr 25 2012, 15:52) Можн...   Apr 25 2012, 14:56
|- - Сергей Борщ   QUOTE (spongebob @ Apr 25 2012, 17:56) Но...   Apr 25 2012, 16:38
|- - spongebob   Цитата(Сергей Борщ @ Apr 25 2012, 20:38) ...   Apr 26 2012, 05:12
|- - IgorKossak   Цитата(spongebob @ Apr 26 2012, 08:12) Но...   Apr 26 2012, 07:16
|- - Сергей Борщ   QUOTE (spongebob @ Apr 26 2012, 08:12) Но...   Apr 26 2012, 07:28
|- - ViKo   Цитата(Сергей Борщ @ Apr 26 2012, 10:28) ...   Apr 26 2012, 09:04
- - IgorKossak   Если массивы большие и нужда в них возникает редко...   Apr 25 2012, 06:50
|- - AHTOXA   Цитата(ViKo @ Apr 25 2012, 13:57) Что это...   Apr 25 2012, 08:24
|- - AHTOXA   Цитата(spongebob @ Apr 25 2012, 16:37) Пр...   Apr 25 2012, 12:59
- - ViKo   Может, ляпну глупость, но, разве в очередь (messag...   Apr 25 2012, 12:39
- - spongebob   Кстати, насколько прожорлив sprintf? Сколько он по...   Apr 26 2012, 19:32
|- - Сергей Борщ   Кучу - нет. По стеку можно посмотреть его исходник...   Apr 26 2012, 21:06
|- - spongebob   Цитата(Сергей Борщ @ Apr 27 2012, 01:06) ...   Apr 27 2012, 06:25
||- - Сергей Борщ   QUOTE (spongebob @ Apr 27 2012, 09:25) Кс...   Apr 27 2012, 10:01
|- - ReAl   Цитата(Сергей Борщ @ Apr 27 2012, 00:06) ...   Apr 27 2012, 18:46
|- - Сергей Борщ   QUOTE (ReAl @ Apr 27 2012, 21:46) добавля...   Apr 27 2012, 21:18
- - ReAl   Точно. Давненько я туда не заглядывал. Работает, д...   Apr 28 2012, 17:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016