做IAP时需要找一块未使用的RAM,网上没见有人做过类似的图,图片是以STM32G473RCT6为例,结合map文件绘制,分区图已经过硬汉的验证。
RW+ZI区可由map文件或keil编译后窗口得出大小,可以看到,我们在main中定义的第一个全局变量,是被定义在0x2000 0000的。
Heap区的大小在启动文件中定义,位置是硬汉老师说的,行为也是可预知的,malloc等操作不会影响到其他区。
Stack区,首先可以在map文件找到栈顶的位置,即initial_sp,大小同样由启动文件定义。栈生长方向如此设计,对我来说有个直观的好处:即使系统栈区爆满,也不会破坏未使用的区域,Unused的地方是我们可以确定不会被使用的。