- 积分
- 8
贡献34
飞刀2 FD
注册时间2015-10-16
在线时间1 小时
扫一扫,手机访问本帖
|
ok6410 为何用指针写入寄存器无法点亮LED
编译器使用 arm-none-eabi-g++
开发板是 ok6410-B 看以下三个代码段,分别是用宏书写地址 ,用指针指向寄存器地址 用引用指向寄存器地址
书上写的代码使用宏 对led的 gpio 寄存器读写可以点亮led
#define GPBCON (*(volatile unsigned long * ) 0x7f008820)
#define GPBDAT (*(volatile unsigned long * ) 0x7f008824)
int main(){
GPBCON=0x1111;
GPBDAT=0x08;
return 0;
}
#endi
我改动了一下使用指针的方式访问寄存器
//指针方式写入 无法点亮led
typedef volatile unsigned long * reg_pt;
reg_pt GPBCON=(volatile unsigned long * )0x7f008820;
reg_pt GPBDAT=(volatile unsigned long * )0x7f008824;
int main(){
*GPBCON=0x1111;
*GPBDAT=0x08;
return 0;
}
#endif
//引用方式写入寄存器 可以点亮led
typedef volatile unsigned long & reg_pt;
reg_pt GPBCON=*(volatile unsigned long * )0x7f008820;
reg_pt GPBDAT=*(volatile unsigned long * )0x7f008824;
int main(){
GPBCON=0x1111;
GPBDAT=0x08;
return 0;
}
百思不得其解,为何指针指向寄存器无法正常工作呢。
这是crt0.S
.text
.global _start
.global halt_loop
_start:
ldr sp,=1024*8
bl main
halt_loop:
b halt_loop
|
-
-
arm.zip
63.55 KB, 下载次数: 1, 下载积分: 贡献 1
|