ARM9 SVC_STACK вне диапазона? - PullRequest
       30

ARM9 SVC_STACK вне диапазона?

3 голосов
/ 29 августа 2009

Я отлаживаю некоторые странные исключения ARM во встроенной системе, используя набор инструментов IAR Workbench. Иногда, когда исключение перехвачено, SVC_STACK сообщается как находящийся вне диапазона (очень вне диапазона!). Это актуально, или это просто артефакт отладчика JTAG J-Link? Для чего используется SVC_STACK? Он имеет размер 0x1000, но когда он выходит за пределы диапазона, он находится в области кучи. Спасибо!

1 Ответ

4 голосов
/ 29 августа 2009

ARM Режим SVC включается при возникновении исключения (не IRQ или FIQ - быстрый IRQ). Он также может быть введен напрямую с помощью кода, выполняемого в непользовательском режиме, путем установки регистра CPRS, но я думаю, что это необычно, за исключением случаев инициализации системы.

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

Третья возможность состоит в том, что вы используете ОСРВ, которая настраивает стеки ARM так, как она хочет (в основном переопределяя стек SVC, который мог бы установить код инициализации IAR). Если это так, возможно, что все в порядке, но отладчик IAR считает, что стек SVC находится вне диапазона - отладчик получит информацию из файла конфигурации компоновщика - но если что-то изменит стек на другую область памяти, тогда отладчик запутается.

Это происходило со мной все время со стеком пользовательского режима в IAR при использовании RTOS - стеки были распределены на основе блоков управления задачами, которых не было в сегменте CSTACK, в котором отладчик думал, что он должен быть, и отладчик будет издавать раздражающие предупреждения. Был какой-то параметр конфигурации проекта, который можно было использовать, чтобы скрыть предупреждения, но я не могу вспомнить, что это было - мы редко беспокоились об этом и просто жили с шумом.

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

Справочное руководство по архитектуре ARM (ARM ARM) находится в свободном доступе на сайте arm.com и подробно описывает работу стеков ARM. Другим хорошим примером является Руководство разработчика системы ARM Эндрю Слосса и др.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...