STM32 IAP时RAM范围设置的疑惑

来源:互联网 发布:监狱建筑师 for mac 编辑:程序博客网 时间:2024/05/21 14:22
在用STM32F103VET6芯片做IAP时发现一个不解的地方。IAP和APP程序除了要定义不同的中断向量表外,RAM和ROM都要分区,不能有重叠区域。但是多大区域才合适呢?有没有计算的方法?

我用的是IAR7.3。程序在编译完成后,在下方的Messages栏可以看到3个数据。如下图:

29958字节的只读code和9970字节只读数据。这两类数据都是在ROM区的,因此可以估算出ROM的占用空间是(29958+9970)字节。6268字节的读写数据是在RAM区的,但RAM区包含3类区域,RW数据区、CSTACK(栈)区、HEAP(堆)区。一般程序里的静态变量和全局变量都是在RW区的,在程序结束时释放内存。函数的形参、局部变量等都是在栈区的,由编译器自动分配释放。堆区里存放的数据一般都是我们自己分配释放,C中典型的malloc和free函数就是分配和释放的过程。

在IAR里options选项的linker项可编辑内存范围。如下图所示:


点击Edit弹出对话框,在这里可以修改向量表、内存范围和堆栈大小。打开STM32F103VET6的默认icf文件,即stm32f103xE.icf。看到他的内容如下:


堆栈的对齐方式是8字节对齐吗????

修改Vector Table、Memory Regions和Stack/Heap Size就可修改icf文件的相应值。

 

如果堆栈是8字节对齐的话,那RAM最小空间是不是可以这样计算?

RAM Size = RW Size(本例中是6268) +STACK Size+ HEAP Size

 

堆栈的大小取决于程序,一般都是设置较大些。


IAR和APP程序的RAM可以共用,只需将ROM分开就行了。



0 0