问题描述
我正在开发 Cortex-A72 (Armv8),我需要实现这个伪代码:
put addr1 into X9
put addr2 into X10
for i := 0 to N − 1 do
STR X0,[X9]
STR X0,[X10]
DC CVAC,X9
DC CVAC,X10
遵循我的 C 代码:
int main(){
unsigned char temp = 0xff;
unsigned char *mem;
mem = mmap(NULL,BUF_SIZE,PROT_READ | PROT_WRITE,MAP_ANON | MAP_PRIVATE,-1,0);
if (mem == MAP_Failed){
perror("mmap()");
return 1;
}
memset(mem,0xff,BUF_SIZE);
/* Select two random addresses within memory pool*/
size_t offset1 = (rand()<<12)%BUF_SIZE;
size_t offset2 = (rand()<<12)%BUF_SIZE;
unsigned char *addr1 = (unsigned char*) (mem+offset1);
unsigned char *addr2= (unsigned char*) (mem+offset2)
for (int i = 0; i < 10000; i++){
asm volatile("str %x1,%x0" : "=m"(*addr1) : "r"(temp));
asm volatile("str %x1,%x0" : "=m"(*addr2) : "r"(temp));
__asm__ __volatile__("dc cvac,%0\n\t" : : "r" (addr1));
__asm__ __volatile__("dc cvac,%0\n\t" : : "r" (addr2));
}
.
.
.
}
我只想知道我是否以正确的方式使用汇编代码。 目标是直接访问物理内存中的数据,绕过缓存。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)