为啥 0x40010800 + 0x0C 等于 0x40010830?

Posted

技术标签:

【中文标题】为啥 0x40010800 + 0x0C 等于 0x40010830?【英文标题】:why 0x40010800 + 0x0C equals 0x40010830?为什么 0x40010800 + 0x0C 等于 0x40010830? 【发布时间】:2021-06-04 22:14:00 【问题描述】:

我尝试访问 RCC_APB2ENR 寄存器作为第一步,以使 stm32nucleo f103rb 上的绿色 LED 闪烁

然后我将 0x0C 添加到 0x40010800(RCC 基地址)。

预期结果是 0x4001080C 但实际结果是 0x40010830!!!

似乎 0x0C 左移了两次,但我不明白为什么会发生这种情况。

即使在 Ubuntu 中,也发生了同样的事情。

请告诉我

板:stm32 nucleo f103rb IDE:uVision 5

【问题讨论】:

【参考方案1】:

RCC_BASE 指向unsigned int。在您的平台上,这种类型的大小是 4 个字节。

在对指针进行加减运算时,您通过操作数乘以元素大小来增加(或减少)地址。

详情看Pointer Arithmetic

【讨论】:

以上是关于为啥 0x40010800 + 0x0C 等于 0x40010830?的主要内容,如果未能解决你的问题,请参考以下文章

C#从数据库中提取数据生成XML文件,系统报错,提示"♀(十六进制值0x0c)是无效的字符"

为啥 0.9 等于 0.89999997615814208? [复制]

C++ Prime 0x0C 练习题解

C++ Prime 0x0C 学习笔记

为啥这个数组的第 0 个索引仍然不等于 0?

为啥整数 0 等于 PHP 中的字符串? [复制]