IAR C-SPY: предупреждение о переполнении стека |
Добавил(а) microsin |
В некоторых случаях отладчик C-SPY выдает предупреждения о переполнении стека, хотя причины для такого предупреждения нет, поскольку в стеке имеется достаточно свободного места: The stack 'CSTACK' is filled to 100% (4096 bytes used out of 4096). The warning threshold is set to 90% Когда проект создается, то его опции устанавливаются в значения по умолчанию. Одно из таких значений - разрешение проверки стека (C stack checking). Это хорошая возможность выявления потенциальных ошибок при написании и отладке обычных встраиваемых приложений. Проверка стека в C-SPY изначально встроена в среду разработки IAR Embedded Workbench (в более ранних версиях эта проверка была реализована через плагин C-SPY). С другой стороны, в приложениях на основе RTOS эта проверка стека не работает так, как это ожидалось. Проверка стека не может "понять", почему указатели стека находятся вне "известных" областей стека. Причина такой ситуации в том, что RTOS поддерживает и переключает задачи между разными стеками, у каждой задачи RTOS есть свой собственный стек. [Решение проблемы] Можно запретить появление предупреждающего сообщения C stack checking, если снять галочку 'Warn when stack pointer is out of bounds' через диалог Tools -> Options... > раздел Stack. Для старых версий IAR Embedded Workbench, которые используют C-SPY stack plugin, запретите этот плагин снятием галочки в меню Project -> Options -> Debugger -> Plugins -> Stack. При использовании RTOS не разрешайте проверку стека C-SPY. Возможно, что в плагине для RTOS есть возможность разрешения проверки переполнения стека для задачи. [Другие проблемные ситуации] Если приложение не использует RTOS, причины для предупреждения о переполнении стека могут быть следующие. • Предупреждение корректно, требуется внести изменения во встраиваемое приложение (как минимум увеличить пространство под стек). [Ссылки] 1. Stack overflow Technical Note 57348 site:iar.com. |