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

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发送一字节数据,读的效果都是读取接收到的一字节数据。

相关推荐

你若不曾来,叫我如何老
365bet在线注册

你若不曾来,叫我如何老

📅 07-24 👁️ 5746
魔兽世界TBC工程速冲375!超全1-375冲级攻略来了来源: 用户投稿2024-07-22 13:20:5932人浏览
相对论(8)为什么不能超光速?为什么存在光速极限?_手机网易网