问题描述
今天在学习野火STM32HAL库的过程中,看到了存储器区域功能划分这个章节。
他的0x00000000 - 0x1FFFFFFF为什么是512MB。本人曾经参加了一次软考,考的嵌入式系统设计工程师,当时也没准备就去了,结果就是没过…回想当时也有这个题,如何计算地址范围。今天咨询了下同事,经过一顿友好的交流(鄙视~)大概明白了。
解决
如第一个,0x0000 0000 - 0x1FFF FFFF,总共有29位(1FFF是13BIT, FFFF16BIT,相加是29),那么大小就是2^29次方。
那2的29次方怎么计算呢,当然可以用计算器,但是,如果考试的话怎么能带计算器呢?嘿嘿,经过我的求教,我的同时说作为一个程序员这都不知道,你可以拆解啊。例如
- 2^10=1024(1K)
- 2^20=1,048,576(1M)
- 2^30=1,073,741,824(1G)
综上可得,2^29 = (2^30)/2 =(1G/2)=512M么?如果你想用别的方法也可以229=229=(210)3/2=(1024)^3/2,当然这种方法不推荐,也基本用不上,考试也不会考