Скажите пожалуйста что такое стек?
Где он находится? как его установить?
Влияет ли он на выполнения прерываний или подпрограмм?
На что он похож?
Приведите пожалуйста примеры доступные для понимания...
Прочитаная книга и перевод даташита не произвело на мой мозг положительного результата Надеюсь на вашу помощь! Спасибо!
Стек - это память для данных, организованная особым образом. От английского глагола, который можно в данном случае перевести как "складывать в стопку". Смысл в том, что данные складываются в стек строго друг за другом, а извлекаются в обратном порядке - то, что лежит "сверху" извлекается первым. Место в памяти, где находится "верхушка" этого стека всегда известно. На него указывает особая переменная (как правило, специальный регистр микроконтроллера) которая называется указателем стека.
Для этого самого стека в оперативной памяти микроконтроллера должно быть выделено специальное место. И на нижнию границу этого места должен быть установлен указатель стека. Эта процедура называется инициализацией стека. Если этого не сделать, то случится катастрофа - Ваша программа будет работать ровно до того места, пока не будет вызвана подпрограмма, или не возникнет прерывание. Потому как, при вызове подпрограммы, или при обработке прерывания, текущие данные, в том числе и адрес возврата, запоминаются в стеке. Ну а если указатель стека, вместо нужного места в оперативной памяти указывает дьяволу на рога... Сами понимаете, что будет.
В заключение, совет. Чтобы никогда не заморачиваться инициализацией стека - забейте на ассемблер и используйте языки высокого уровня, например, "Си". Там заботу об указателе стека берёт на себя компилятор...
Скажите почему в регистр SPL всегда заносят low(ramend)
а в некоторых контроллерах его вобще трогать не надо ибо он аппаратный? Что будет если занести другое значение в этот регистр??
Спасибо! И еще вопрос стек расположен в памяти программ?