Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2010, 00:33   #1
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию Переполнение аппаратного стека

Здравствуйте!
Возник вопрос, помощь в решении которого я прошу у Вас=)
Есть аппаратный стек, возможно ситуация когда он проваливается, вопрос в том что делать если он провалился?
Вызывать прерывание(как-то немного бредово, имхо, да и на контроллерах я такого не видел), все время писать в верхнюю ячейку, или начать писать по новой?

P.S. Почему аппаратный лучше не спрашивайте, архитектура такая xD
P.S.S. Про Попова тоже желательно не вспоминать)))

Последний раз редактировалось Levsha100; 13.07.2010 в 00:45.
Levsha100 вне форума Ответить с цитированием
Старый 13.07.2010, 01:04   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Ну так а какая архитектура?
Что подразумевает аппаратный стек?
Это просто аппаратная обработка команд типа (ret iret push pop и т.д.) или что-то большее? Если что-то большее, то где находится стек?

Поидее, стек должен находиться в ОЗУ, т.е. там же, где находятся переменные. В таком случае чудеса в программе начнутся гораздо раньше, чем стек переполнится. Стек на контроллере, это забота программиста, а не контроллера. Так что ничего не делать, совсем ничего не делать.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 13.07.2010, 01:08   #3
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Цитата:
Ну так а какая архитектура?
Эээ, пока сказать не могу.
Пока Гарвардская, но может немного позже осилю и фон Неймана.
Цитата:
Это просто аппаратная обработка команд типа (ret iret push pop и т.д.) или что-то большее?
Только загрузка/выгрузка в/из регистров.
Цитата:
Поидее, стек должен находиться в ОЗУ
Кх кх, ну тут ка бы пока нет оперативки, есть только несколько регистров =)
Цитата:
Так что ничего не делать, совсем ничего не делать.
Ммм, ну как бы делать что-то придется =) Может тупо запретить запись? Тогда нужно выделять флаг в регистре состояний.

Последний раз редактировалось Levsha100; 13.07.2010 в 01:12.
Levsha100 вне форума Ответить с цитированием
Старый 13.07.2010, 01:30   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Эээ, пока сказать не могу.
Пока Гарвардская, но может немного позже осилю и фон Неймана
ЩИТО - я не знаю, ХИТО это ?
Я вообще немного о другом.
В любом случае стек - это кусок памяти, работающий по определённым правилам (LIFO - FIFO). Как будет контролироваться переполнение стека это как раз и зависит от того, как эта память организована (разделяет она одну область озу с пользовательскими данными или нет). Например, как можно, проконтролировать переполнение стека на AVR-е?

Вобще как можно контролировать переполнение стека, наверное, определив его верхнюю и нижнюю границы. Тогда для этого какие-то специальные регистры можно придумать. Если всё это будет аппаратно реализовано, то тогда не грех и прерывание по такому случаю поднять.
Какое нибудь коварное (типа Reset).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 13.07.2010, 01:37   #5
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Стек будет как отдельное устройство, пока тупо два входа (push, pop) и вход/выход инфы(ну и переход в высокоимпедансное состояние) + возможен выход для прерывания. Пока все =))
Наверно просто запрещу запись и повешу флаг переполнения.

Последний раз редактировалось Levsha100; 13.07.2010 в 01:42.
Levsha100 вне форума Ответить с цитированием
Старый 13.07.2010, 01:56   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Наверно просто запрещу запись и повешу флаг переполнения.
Мне кажется это ни к чему. Стек ведь аппаратный, а тут получается, что я кладу в него данные и не уверен, что они кладутся. Как контролировать, программно извне проверять после каждого push/pop флаг переполнения. Переполнение стека однозначно означает, что программа (нормальная программа) работать дальше не может, или будет делать это с какими то чудесами. Сделайте это устройство как WatchDog. С выходом прерывания на перезагрузку. Т.е. всё, стек переполнен, гарантировать программа больше ничего не может, убить всех человеков. Устройство полностью перезагружается (сбрасываются все внутренние указатели) и основную программу тоже на ресет. Я бы так поступил, это критическая ошибка.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 13.07.2010, 01:59   #7
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Цитата:
убить всех человеков.
Неплохая идея, стоит подумать =)
Цитата:
Устройство полностью перезагружается (сбрасываются все внутренние указатели) и основную программу тоже на ресет. Я бы так поступил, это критическая ошибка.
Да, пожалуй так и сделаю+ еще можно будет записать в логгер причину сброса, но это потом =)



Я вот что подумал: если я захочу прикрутить многозадачность, то стек нужно выделять в памяти процесса, значит нужно его размещать в оперативке или делать грабли. Ладно, пока это тестовый набросок без многозадачностей и всяких плюшек, так что обойдемся пока внешним стеком.

Последний раз редактировалось Levsha100; 13.07.2010 в 02:03.
Levsha100 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переполнение стека NoHeart Общие вопросы Delphi 8 08.11.2009 16:03
Переполнение стека (Stack overflow) zotox Помощь студентам 4 13.09.2009 03:16
переполнение стека. помогите решить эту проблему Hikari Паскаль, Turbo Pascal, PascalABC.NET 1 01.06.2009 18:58
Переполнение стека Ake Паскаль, Turbo Pascal, PascalABC.NET 3 30.05.2009 22:39
Переполнение Стека Викдон Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2008 19:16