Доступ к регистрам MSP и PSP Cortex-M3 в коде C / C ++ с использованием Keil µVision - PullRequest
4 голосов
/ 01 июня 2010

Мне нужен доступ к регистрам MSP и PSP (регистры основного и стекового процессов) процессора Cortex-M3.

Я пишу на C / C ++.

µVision и связанный с ним компилятор не позволяют выполнять встроенную сборку для этого единственного ядра Thumb-2 (и я не уверен, что в любом случае это будет хорошей идеей).

Мне нужно сделать это, чтобы я мог извлечь непосредственное значение инструкции svc независимо от того, была ли она выполнена в режиме потока или обработчика.

Спасибо

Ответы [ 2 ]

4 голосов
/ 01 июня 2010

В данный момент у меня нет доступа к компилятору Keil, чтобы проверить это, но согласно документам, вы должны иметь возможность использовать функцию "именованного регистра переменной" компилятора:

register uint32_t msp __asm("msp");
register uint32_t psp __asm("psp");
1 голос
/ 01 июня 2010

Для чего-то подобного я обычно использую крошечный вызов сборки, чтобы сделать это.

Вы можете использовать специальную инструкцию доступа к регистру (MRS / MSR) для доступа к любому SP. Я думаю, что с uVision, MSP SP_main , а PSP SP_process .

Моя сборка ARM немного ржавая, но я думаю, что это будет что-то вроде:

MRS   R0, SP_process   // R0 holds retval
BX    LR                // return

Из вашего вопроса кажется, что вы уже понимаете различие между MSP и PSP и знаете, как определить, какой из них читать (через LR).

...