C/C++ 往指定地址读写的三种方式

    嵌入式编程中免不了要往指定地址读/写数据,如配置各种外设时需要写外设的寄存器,下面我总结了三种读写指定地址的方式:

我们这次准备使用的是STM32F4的串口3的数据寄存器:USART3->DR,地址0x40004804;

1.使用强制转换:

    写:*(u16*)0x40004804=0x55;

    读:u16 k=0; k=*(u16*)0x40004804;

C/C++的强制转换是一个非常重要的知识点,学好了可以为你的编程带来很大的方便,以上就是使用强制转换将数字0x40004804转换成无符号16位整形指针,然后再取其地址往改地址写入0x55;

2.使用指针:

    u16 *pt=(u16*)0x40004804;

    *pt=0x55;

    u16 k=*pt;

这个就不用了多说了,先定义一个指针让其指到0x40004804,在对这个指针指向的内容进行读写;

3.使用__attribute__+at

      u16 dcr __attribute__((at(0x40004804)));   //仅对于 ARM compiler 5有效,ARM compiler 6                                                                                //的语法形式跟这不一样

     dcr=0x55;

     u16 k=dcr;

先使用编译器指令 __attribute__+at 将变量dcr绝对定位到0x40004804地址,然后读写该变量就相当于往该地址读写了;值得提出的是,一般我们读写某个变量都是对SRAM进行读写,但是此时由于该变量已经被定位到外部外设区域了,所以此时对该变量的读写是读写的外设寄存器了,读写速度会慢很多。

以上3种方式,写的效果让串口3发送一字节数据,读的效果都是读取接收到的一字节数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值