打印
[STM32F1]

STM32 IAP的icf文件的疑问

[复制链接]
1847|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 犹豫的大三 于 2016-6-1 16:26 编辑

在用STM32F103VET6芯片做IAP时发现一个不解的地方。IAP和APP程序除了要定义不同的中断向量表外,RAM和ROM都要分区,不能有重叠区域。但是多大区域才合适呢?有没有计算的方法?
我用的是IAR7.3。程序在编译完成后,在下方的Messages栏可以看到3个数据。如下图1:

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



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




堆栈的对齐方式是8字节对齐吗????
修改Vector Table、Memory Regions和Stack/Heap Size就可修改icf文件的相应值。
如果堆栈是8字节对齐的话,那RAM最小空间是不是可以这样计算?
RAM Size = RW Size(本例中是6268) +STACK Size * 8 + HEAP Size * 8
堆栈的大小取决于程序,一般都是设置较大些。

QQ截图20160601152443.png (13.74 KB )

图1

图1

QQ截图20160601154712.png (51.94 KB )

图2

图2

QQ截图20160601155821.png (69.32 KB )

图3

图3
沙发
犹豫的大三|  楼主 | 2016-6-1 16:41 | 只看该作者
其次的生成的.map文件里可以查看到堆栈的起始地址,在P2区的末尾。PS:不知道我的IAR生成的.map文件的P2区只有CSTACK,没有HEAP。我查看我之前工程.map文件也是只有CSTACK。

使用特权

评论回复
板凳
yklstudent| | 2016-6-1 20:41 | 只看该作者
IAR下不了解,感觉KEIL下好用

使用特权

评论回复
地板
zchong| | 2016-6-2 08:52 | 只看该作者
1、一般情况下boot和app的rom不能重叠,但ram可以重叠,因为一旦跳转到app,你的boot就不再运行了,所有的ram都可以给app用;
2、对齐的意思是分配的内存地址是对齐的,在这个意义上讲他和你要分配多大的内存无关

使用特权

评论回复
5
犹豫的大三|  楼主 | 2016-6-2 08:58 | 只看该作者
keil里的堆栈的大小在相应的启动文件的开头,ROM和RAM的范围在option选项里。和IAR操作不一样,但也都是能修改的。从keil生成的.map文件看堆栈的大小是以字节为单位的。

使用特权

评论回复
6
犹豫的大三|  楼主 | 2016-6-2 09:14 | 只看该作者
zchong 发表于 2016-6-2 08:52
1、一般情况下boot和app的rom不能重叠,但ram可以重叠,因为一旦跳转到app,你的boot就不再运行了,所有的r ...

1、我测试了一下,boot程序和app程序的RAM不做任何约束,都是芯片的RAM范围。发现boot程序可以执行,但app程序无法执行
2、8字节对齐感觉很不常见,所以有疑问。现在我知道堆栈的大小是以字节为单位的

使用特权

评论回复
7
泰山特曲123| | 2016-6-2 12:40 | 只看该作者
ram是可以重叠的,APP不能正常运行,是别的原因导致的

使用特权

评论回复
8
犹豫的大三|  楼主 | 2016-6-2 16:16 | 只看该作者
泰山特曲123 发表于 2016-6-2 12:40
ram是可以重叠的,APP不能正常运行,是别的原因导致的

确实,APP程序不运行不是因为RAM的问题。我的程序上电后必须要手动复位一下才可以运行,debug发现程序有时会在FSMC上跑飞了。从网上查有人也遇到这个问题,他的解决办法是重复初始化各功能模块。我重复初始化FSMC后,程序上电可以正常运行了。但是还是不清楚是什么引起上电后程序不运行?是因为boot0和boot1还没有将引脚电平锁存吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

494

帖子

9

粉丝