高级会员

- 积分
- 592
- 金钱
- 592
- 注册时间
- 2026-1-29
- 在线时间
- 41 小时
|
这样写的原因:
1. 写地址 "waddr += 4;" 的原因
STM32内部Flash是按字节寻址的,1个WORD(32位/4字节)数据占用4个字节的存储空间,因此每写入一个WORD,地址需要向后偏移4字节,才能写入下一个WORD,所以每次自增4。
2. 缓冲区地址 "(uint32t)&pbuf[i]" i4的原因
这和C语言数组的寻址规则有关:
- 数组"pbuf"如果是"uint32t"类型的数组,"pbuf[i]"本身就已经等价于"(pbuf + i4)"(编译器会自动根据数组元素类型计算偏移,每个uint32t元素占4字节)。
- 代码这里直接写"&pbuf[i]"取地址是正确写法,它本身已经得到了第i个WORD元素的正确缓冲区地址,不需要手动乘4。
如果"pbuf"是uint8t类型的字节数组,才需要手动"i*4"来偏移到第i个WORD的起始位置,这是适配不同数组类型的写法。
简单总结这个写法的逻辑:一次写入4个WORD,每个WORD占4字节,所以目标Flash地址每次+4;缓冲区地址直接通过数组下标取值就可以得到对应位置的地址,符合C语言的数组寻址规则。 |
|