Стек и прерывания

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Артур
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Стек и прерывания

Сообщение Артур »

Скажите пожалуйста что такое стек?
Где он находится? как его установить?
Влияет ли он на выполнения прерываний или подпрограмм?
На что он похож?
Приведите пожалуйста примеры доступные для понимания...
Прочитаная книга и перевод даташита не произвело на мой мозг положительного результата :(
Надеюсь на вашу помощь! Спасибо!
Век живи! - Век учись!
ICQ-15B87330h
Gorec
Родился
Сообщения: 15
Зарегистрирован: Сб сен 15, 2007 15:18:21
Откуда: Майами

Сообщение Gorec »

В рубрике "обучалка" http://radiokot.ru/start/mcu_fpga/avr/ это хорошо расписано
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

Стек - это память для данных, организованная особым образом. От английского глагола, который можно в данном случае перевести как "складывать в стопку". Смысл в том, что данные складываются в стек строго друг за другом, а извлекаются в обратном порядке - то, что лежит "сверху" извлекается первым. Место в памяти, где находится "верхушка" этого стека всегда известно. На него указывает особая переменная (как правило, специальный регистр микроконтроллера) которая называется указателем стека.
Для этого самого стека в оперативной памяти микроконтроллера должно быть выделено специальное место. И на нижнию границу этого места должен быть установлен указатель стека. Эта процедура называется инициализацией стека. Если этого не сделать, то случится катастрофа - Ваша программа будет работать ровно до того места, пока не будет вызвана подпрограмма, или не возникнет прерывание. Потому как, при вызове подпрограммы, или при обработке прерывания, текущие данные, в том числе и адрес возврата, запоминаются в стеке. Ну а если указатель стека, вместо нужного места в оперативной памяти указывает дьяволу на рога... Сами понимаете, что будет.
В заключение, совет. Чтобы никогда не заморачиваться инициализацией стека - забейте на ассемблер и используйте языки высокого уровня, например, "Си". Там заботу об указателе стека берёт на себя компилятор...
Аватара пользователя
Артур
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Сообщение Артур »

Скажите почему в регистр SPL всегда заносят low(ramend)
а в некоторых контроллерах его вобще трогать не надо :shock: ибо он аппаратный? Что будет если занести другое значение в этот регистр??
Спасибо! И еще вопрос стек расположен в памяти программ?
Век живи! - Век учись!
ICQ-15B87330h
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Артур писал(а):Скажите почему в регистр SPL всегда заносят low(ramend)

Не всегда. Это от размера RAM зависит.

Артур писал(а): И еще вопрос стек расположен в памяти программ?

Выше вроде ПО РУССКИ растолковали.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Артур
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн дек 04, 2006 09:50:08
Откуда: Vladivostok

Сообщение Артур »

СПАСИБО! :)
Век живи! - Век учись!
ICQ-15B87330h
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»