Easyelectronics.ru

Электроника для всех
Текущее время: 24 сен 2022, 20:51

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Возможен ли срыв стека на PIC?
СообщениеДобавлено: 16 май 2021, 05:27 
Старожил

Зарегистрирован: 03 июл 2012, 19:16
Сообщения: 209
siarzhuk писал(а):
"Мешает" используемый ТС язык программирования. ;-) Особенно второму утверждению.

good bye, printf? В sp+3 будет адрес возврата. Его переписать - значит улететь по ret на околоземную орбиту. Выделить место за ним (sp+4) - суть обращаться к локальной переменной функции - работать будет до тех пор пока прерывание не подловит нас прямо на выходе из функции, пока мы ещё не успели прочитать "результат", и не попользует "свободное" место стека под свои нужды.

так это проблемы только языка программирования и компилятера :)
по ret мы не улетим, т.к. адреса возврата хранятся в своем стеке.
ну и какойта компилятер (под пик18, но это совершенно не важно (с)) делает так:
стек с аргументами чистится уже после возврата из функцыи, а не в эпилоге.
под локальные переменные выделяется отдельный стек (а вот он в эпилоге чистится).
и наверняка в этом есть какойта глубокий философский смысл.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможен ли срыв стека на PIC?
СообщениеДобавлено: 16 май 2021, 10:15 
Старожил
Аватара пользователя

Зарегистрирован: 11 фев 2021, 21:02
Сообщения: 1172
Да с топикстартером то всё норм. Просто тут начали кое-кто почему то писать, что якобы через аппаратный стек PIC16 можно якобы передавать параметры функций и переменные. Вот потому и говорю - вначале загляните в даташит:
Вложение:
Снимок экрана 2021-05-16 111405.png
Снимок экрана 2021-05-16 111405.png [ 30 Кб | Просмотров: 1487 ]

этот стек хранит 8 адресов возврата, и больше ничего

_________________
СМЕРТЬ БАЙДЕНУ!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможен ли срыв стека на PIC?
СообщениеДобавлено: 16 май 2021, 16:06 
Старожил

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 296
Int_13h писал(а):
так это проблемы только языка программирования и компилятера :)

Скорее всё же аппаратная ограниченность ресурсов, абсолютно резонно отфутболенная уровнем выше. ;-)

Int_13h писал(а):
по ret мы не улетим, т.к. адреса возврата хранятся в своем стеке.

Т.е. ret получает адрес возврата параметром? Интересно, зачем он ещё нужен если с этой задачей справится и обычный переход по адресу?

Int_13h писал(а):
ну и какойта компилятер (под пик18, но это совершенно не важно (с)) делает так:
стек с аргументами чистится уже после возврата из функцыи, а не в эпилоге.

Да, абсолютная Си-шная классика - чистка стека от параметров тем, кто вызывает функцию. Вот гляжу на 18F14K50 якобы оптимизированный под С-программы - и там всё тот-же аппаратный стек для адресов возврата из функций и прерываний - размером правда аж 31 level. Остальное - похоже и на самом деле компилятор организует. Ну и ладно.

Int_13h писал(а):
под локальные переменные выделяется отдельный стек (а вот он в эпилоге чистится).
и наверняка в этом есть какойта глубокий философский смысл.

Подозреваю, ответ тот-же что и в пункте первом этого сообщения. ;-)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB