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)));

     dcr=0x55;

     u16 k=dcr;

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

 

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

你可能感兴趣的:(C/C++,程序人生,嵌入式系统,c++,编程语言,嵌入式)