您的位置:程序门 -> linux/unix社区 -> 内核及驱动程序研究区



关于cpu寄存器的访问


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于cpu寄存器的访问[已结贴,结贴人:ch609]
发表于:2007-03-03 17:08:24 楼主
在arm中,我想访问一个寄存器,应该如何访问?假设寄存器的地址为0x87
发表于:2007-03-03 23:51:401楼 得分:10
看看你arm如果是32位寄存器,那么可以这么访问

#define   read_arm(addr)     *(volatile   unsigned   int*)addr

然后你就可以用read_arm函数去读写操作了。这是是代表取值,也可以用来赋值
发表于:2007-03-04 15:30:292楼 得分:0
上面的定义方法,在引导加载的时候可以这样使用;
当进入操作系统的时候这种用法好象是错误的吧;
比如   我在驱动程序中用read_arm(0x0800),则相当于*(volatile   unsigned   int*)0x0800,
语法本身好象就有错误,即使语法没有错误;那么0x0800也应该表示的是内核栈的虚拟地址,而不是cpu的寄存器地址。。。
发表于:2007-03-06 14:42:563楼 得分:0
help!!!!!
发表于:2007-03-06 15:14:164楼 得分:0
该回复于2007-12-28 17:42:07被管理员或版主删除
发表于:2007-03-10 09:03:095楼 得分:5
呵呵,,内存地址和寄存器地址是一回事,,现在比较流行的做法是将寄存器地址挂接到内存地址空间中,而不是挂接到io空间中,在io空间中软件要用专门的指令,不利于用高级语言开发。而在寄存器等在内存空间中就可以操作寄存器象操作内存一样,还能使用指针。但是注意要使用volatile,不然的话编译器可能对代码进行优化。寄存器毕竟和内存还是有点差别的,寄存器值可能不经过cpu控制而变化。
发表于:2007-03-11 15:45:126楼 得分:5
__raw_writel                   32   bits   reg
__raw_writew                   16   bits   reg  
__raw_writeb                     8   bit   reg


快速检索

最新资讯
热门点击