我正在尝试将我的源代码编译从 armcc 编译器 v5.06 迁移到 armclang v6。而且我看到 armclang 错误说它无法识别 cp15 寄存器。看起来 armcc 与 clang 的声明方式可能会有所不同。但是,我在迁移文档或编译器文档中找不到任何内容。
这是代码片段 -
void reset_clock_count(void)
{
register uint32_t reg_cp15_pmcr __asm("cp15:0:c9:c12:0");
reg_cp15_pmcr |= RESET_CYCLE_COUNTER;
}
和错误片段 -
error: unknown register name 'cp15:0:c9:c12:0' in asm
register uint32_t reg_cp15_pmcr __asm("cp15:0:c9:c12:0");
^
对于类似声明的寄存器,我在其他地方看到相同的错误。任何可能出现问题的指针都会有所帮助。
编辑: 实际答案如下。
register uint32_t val;
__asm volatile ("mrc p15, 0, %0, c9, c13, 0": "=r"(val));
val |= RESET_CYCLE_COUNTER;
__asm volatile ("mcr p15, 0, %0, c9, c13, 0":: "r"(val));