嵌入式爱好者

查看: 3661|回复: 0

[裸机程序] ok6410 为何用指针写入寄存器无法点亮LED

[复制链接]

2

主题

3

帖子

8

积分

扫一扫,手机访问本帖
发表于 2016-2-28 15:04:06 | 显示全部楼层 |阅读模式
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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-5-3 17:15

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表