Отображение стека вызовов под обработчиком IRQ на MSP430 с IAR - PullRequest
0 голосов
/ 08 марта 2011

Я пытаюсь найти переполнение стека в проекте на MSP430 и обнаружил, что это происходит в основном, когда происходит прерывание IRQ после того, как стек довольно заполнен.

Я установил точку останова в стекезапись указателя со значением, меньшим, чем начальный адрес стека, и процессор останавливается в обработчике IRQ.

Отображение стека вызовов в IAR C-SPY затем завершается в функции обработчика, однако я 'Мне было бы интересно узнать, что находится ниже, так как это то, что заполнило стек.

Есть ли способ отобразить стек вызовов ниже текущего обработчика прерываний?

1 Ответ

0 голосов
/ 11 марта 2011

Если обработчик прерываний написан на C, это должно работать правильно, так как сгенерированный CFI (информация о кадре вызова) должен быть корректным даже для функций прерывания.

Однако, если это (по какой-то причине) не должно работать, или если подпрограмма прерывания написана на ассемблере (без надлежащих директив CFI), вы можете использовать небольшую хитрость. Вы можете вручную изменить регистры ПК и SP в окне регистров, извлекая ПК из стека и «резервируя» SP на сумму, которая была откорректирована внутри функции. После этого отладчик отобразит функцию, которая выполнялась при возникновении прерывания.

Обратите внимание, что в традиционном ядре MSP430 ПК хранится в виде простого 16-битного значения. Однако в ядре MSP430X 20 бит немного переплетены с регистром состояния, подробности см. В руководстве по архитектуре.

...