我正在尝试编写以下代码:
#define CONFIG_PMP_SLOTS 16
#define PMPCFG_STRIDE 4
#define CSR_PMPCFG_BASE 0x3a0
void csr_pmp_check(){
for(int i = 0; i < (CONFIG_PMP_SLOTS / PMPCFG_STRIDE); i++)
{
int pmp_cfg;
__asm__ volatile("csrrs %0, %1, x0"
: "=r" (pmp_cfg) // output operand
: "r" (CSR_PMPCFG_BASE + PMPCFG_STRIDE * i ) // input operand
);
}
}
但是当我尝试编译时,我得到了以下错误:
测试c:汇编器消息:
测试c:9:错误:未知CSR 'a5'
我尝试替换:
: "r" (CSR_PMPCFG_BASE + PMPCFG_STRIDE * i ) // input operand
签署人:
: "i" (CSR_PMPCFG_BASE + PMPCFG_STRIDE * i ) // input operand
但如果我这样做,我得到一个错误告诉我warning: 'asm' operand 1 probably does not match constraints
。
顺便说一句,我编译如下:
riscv32-unknown-elf-gcc -nostdlib test.c
1条答案
按热度按时间jxct1oxe1#
所以这个代码看起来很有效。非常感谢彼得和杰斯特。