如何从cpu的寄存器中获取值

时间:2019-06-27 18:25:47

标签: c cpu-registers

我想获取CPU上寄存器的值,我看了规格表,找到了地址(0xE000E018),我想命名变量,并将其值存储在“ subticks_per_tick”中

这是在运行FreeRTOS的TWR-K65F180M上。

register uint64_t 0xE000E018 asm ("subticks_per_tick");
register uint64_t subticks_per_tick asm ("0xE000E018");

第一行得到:错误:预期标识符或数字常量前的'('

第二行得到:'subticks_per_tick'的无效寄存器名称

2 个答案:

答案 0 :(得分:1)

我对FreeRTOS或您的硬件一无所知,但:

  1. 这看起来像一个地址,而不是寄存器名称(可能是寄存器映射到那里)
  2. 变量名称不能以数字开头,因此0xE000E014不能是名称,因此错误

要获取此寄存器的值,您可能应该做的是:

volatile uint32_t *subticks_per_tick = (volatile uint32_t *) 0xE000E014;

,然后通过取消引用此指针来读取值。

答案 1 :(得分:-2)

register是1980年代的C关键字,用于提示编译器您声明的整数变量可以很好地放入寄存器中。自从30多年以来,它不过是一个暗示而已,被认为已经过时(没有任何意义)。

如果要控制CPU上的寄存器,则需要插入汇编代码。