Прошу помощи. Взглянул в хэлп на асм. И в примеры асм-вставок из core_cmXX.c. Хочу чтобы функция возвращала значение стека (регистра SP), но не знаю как. Для универсальности решения платформа пусть будет ARM7. Регистр PSP/MSP не предлагать.
Код
static __inline unsigned long __get_CPSR(void)
{
register unsigned long ret;
__asm
{
MRS ret, CPSR;
}
return ret;
}
Так работает. Для любого Кортекса тоже, если заменить CPSR на другой регистр специального назначения. Но, если заменить этот регистр на SP или R13 с инструкцией MOV, то уже не работает. Функция компилится без ошибок, но значения не возвращает, т.к. кода функции (инструкций процессора) нет вообще. А в R0 (где результат функции) какое-то старое содержимое.
Код
static __inline unsigned long __get_SP(void)
{
register volatile unsigned long stck __asm("sp");
return stck;
}
Этот вариант аналогично не ругается и код функции отсутствует.
Сообщение отредактировал GetSmart - Nov 16 2015, 23:39