如何根据一个已知的内存地址,读取值

在stm32中实现

#define APB2_BUS_BASE         ((uint32_t)0x40010000U)        /*!< apb2 base address                */

#define GPIO_BASE             (APB2_BUS_BASE + 0x00000800U)  /*!< GPIO base address                */


#define GPIOB                      (GPIO_BASE + 0x00000400U)

#define REG32(addr)                  (*(volatile uint32_t *)(uint32_t)(addr))

#define GPIO_CTL0(gpiox)           REG32((gpiox) + 0x00U)    /*!< GPIO port control register 0 */



printf("\n\rGPIO_CTL0(GPIOB) = %8x\n\r", GPIO_CTL0(GPIOB));

也就是说

int addr  = 0x11223344;//虚拟地址

int x  = (*(volatile uint32_t *)(uint32_t)(addr))

         =  (*(volatile uint32_t *)(uint32_t)(0x11223344))

         = ( * ( uint32 * )( 虚拟地址值 ))

延申一下上面的x也是可以直接赋值的,也即是已知的这个地址也是可以直接赋值的。在单片机中相当于直接操作内存映射的外设(或者内存)。

/* set GPIO_CTL0 register */
GPIO_CTL0(gpio_periph) = reg;

参考链接

如何根据一个已知的内存地址,读取值-CSDN社区

特此记录

anlog

2024年8月5日

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值