Обработка исключений переполнения стека xe166 - PullRequest
0 голосов
/ 24 мая 2011

Если возникает ловушка переполнения стека , я бы хотел, чтобы контроллер:

  • отправить сообщение, информирующее пользователя о переполнении стека
  • сделать сброс после отправки сообщения

Интересно, будет ли хорошей идеей сбросить указатель стека перед запуском этой обработки исключений, чтобы убедиться, что процедура будет выполнена без проблем с памятью или есть лучший способ обработать это исключение?

1 Ответ

0 голосов
/ 24 мая 2011

Исключение переполнения стека не означает, что что-то не так все же , насколько я помню из моих дней программирования ранних C167 (из которых, я думаю, пришел xe166). Это просто означает, что вы находитесь в конце стека. Действительно, с достаточным количеством jiggery pokery вы можете использовать исключения переполнения стека и переполнения стека, чтобы «разместить» больший стек внутри и вне основной памяти!

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

Ваш комментарий относительно "перепутанного стека" не совсем проблема - как только указатель стека достигнет конца, любое дальнейшее использование стека испортит другие вещи , которые могут быть данными, которые собирается использовать ваш код исключения полагаться на. Похоже, вы должны гарантировать, что произойдет сброс, но если вы начнете забивать память ошибочным SP, вы не сможете предсказать, что может произойти.

Итак, если это удаленно критическая система, найдите способ выделить память для «аварийного стека», а затем укажите SP на нее, прежде чем продолжить работу с обработчиком исключений.

...