int main(){
char * ptr = (char *) 0x1000;
*(char *)ptr = 0; //Illegal memory access
printf("ptr %p\n", ptr); //prints the address (hex); ptr is pointing memory location 0x1000.
printf("ptr %d\n", *ptr); //illegal memory access
return 0;}
上面的代码片段在我的linux机器上运行 但;当我在32位的目标板PTR是挥发性的指针uInt32类型映射寄存器地址然后它的好来注册类似下面写上说:以下c逻辑有什么问题?
*(volatile uint32*)ptr = 0x00000001;
你的目标CPU /平台/系统是什么?该CPU /平台/系统上地址0x1000的含义是什么?如果它是一个32位寄存器,那么你不能只是部分写入它? –
是否改变相关更改或更改为uint32 *? – Yunnosch
这两个代码片段都不相互关联。我的查询与某些地址赋值的方式有关。当我做'*(volatile uint32 *)ptr = 0x00000001;'这工作正常,我在这里ptr指向IO映射地址。而当我运行第一个小代码片段到我的Linux机器时,它给我分段错误。 –