为啥 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)是无效的字符"