Part Number:MCU-PLUS-SDK-AM243X
代码跑在R5的核中,需要获取PSP的值,所以#include "cmsis_armclang.h",想用里面的__get_PSP函数来获取PSP的值,但是编译不通过,会发生如图的错误,,该怎么解决?
Gary Lu:
加CMSIS头文件了吗
,
? ?:
试过加入#include "cmsis_armclang.h",但是还是不行
,
? ?:
这么多头文件应该加哪个?
,
Gary Lu:
core_cm4.h和core_cm7.h都试试加上
,
Gary Lu:
不是这个
? ? 说:"cmsis_armclang.h"
,
? ?:
我是R5的核,不应该用M4或M7的,而且试了一下,会报其他错
,
Gary Lu:
先检查一下编译器是否支持CMSIS内联汇编指令。
如果编译器不支持,试试用汇编语言实现。
或者
? ? 说:我是R5的核,不应该用M4或M7的,而且试了一下,会报其他错
再试试其他的
,
? ?:
编译器是能支持内联汇编指令的,如下图中, __asm volatile ("MRS R0, cpsr") ; __asm volatile ("MRS R0, spsr") ;这两句话都能编译通过,唯独 __asm volatile ("MRS R0, psp") ;这句话不行。我用汇编也试过,同样的效果,获取cpsr和spsr寄存器是可以的,但是psp寄存器不行,是不是psp指针根本不支持?
,
Gary Lu:
或者你尝试一下用不同的语法形式吧,下面是C的
register uint32_t psp_value; __asm volatile("MRS %0, psp" : "=r"(psp_value));用了寄存器约束 `"=r"`, 通过 `: "=r"(psp_value)` 将 `psp_value` 变量与寄存器关联起来。
,
? ?:
试过了,还是不行,如下图,还有另一个问题中提到的获取R14_USER,用汇编”mrs r0, R14_USER“,也编译不通过,所以针对获取psp和R14_USER等这些特殊寄存器有没有明确的方法?
,
Gary Lu:
已在您另外发布的帖子下回复,请查看:e2echina.ti.com/…/mcu-plus-sdk-am243x-r5-pc