【发布时间】:2018-03-01 14:17:59
【问题描述】:
我正在尝试读取以下片上系统中的 CP15 协处理器
Cortex A7 - ARMv7-A
在我的sn-p下面
void main (void)
{
unsigned int reg_value = 0;
asm volatile("mrc p15, 0, %0, c0, c0, 0" : "=r"(reg_value) );
printf("reg_value: %d", reg_value);
}
我不知道这是否是读取协处理器寄存器的正确方法,但它的编译已完成且没有错误。 执行过程中出现问题(代码在root下执行):
Illegal instruction
如果我使用 gdb,我会得到以下结果:
0x000086a0 <+16>: str r3, [r11, #-40] ; 0x28
=> 0x000086a4 <+20>: mrc 15, 0, r3, cr0, cr0, {0}
0x000086a8 <+24>: str r3, [r11, #-40] ; 0x28
为什么我无法读取协处理器寄存器?我的代码有什么问题?
【问题讨论】:
-
你确定你被允许读这个寄存器了吗?
-
您使用的是哪个编译器?您要读取哪个寄存器(名称)?
-
另外看起来你是在 USR 模式下运行它。这些寄存器只能在特权模式下访问(SVC/SYS/IRQ/FIQ/ABT)。在root下运行用户空间应用还是
USR。 -
我正在尝试读取 MIDR= 主 ID 寄存器。我想我正在以 USR 的身份工作:我该如何检查?
-
你能打印
$cpsr吗?