STM32的icf文件有什么作用

每个芯片开发商都会针对每款芯片来编写一个.icf文件就是传说中的链接文件。对于基本的应用,这个.icf文件足以满足你的工程需要。但有时也会需要改动,比如当你的项目要添加外部ram时就要修改一下icf。
1、icf到底干了啥呢?
定义了芯片存储空间的大小。
定义rom的大小和起始、结束地址。
定义ram的大小和起始、结束地址。
当然这些都是最基本的,你也可以设置以下的东西来匹配你的具体项目。
链接时是否保存位块与符号
设置你的启动过程
设置你的堆与栈的大小和对齐方式
修改编译器默认的初始化过程。
关于默认库的处理等。。。
2、下面我简单介绍几个功能,详细请参考ewarm_developmentguide
2.1 添加额外的region
比如我要添加另一个名为rom2的rom区域,大小是256bytes,起始地址是0x80000.
defineregionrom=mem:[from0x80000 size0x100];
2.2 教你怎样放置section
如果你要把你的只读常量放置在你指定的域而不是编译器默认的位置,你就得按如下操作了:
define region const_region = mem:[from 0x100 size 0x100];
place in const_region{readonly section .rodata}
2.3 把一个段放置在指定位置
placeataddressmem:[0] {readonlysection.intvec}//--将向量表放置在地址0处。
note:之前在看启动代码时,老在想这个向量表示怎么放到地址0处的呢,查了一下reference
__vector_table是编译器专有字符,表示出处开始放置向量表。
在代码开始处就声明了此段为.intvec。链接的时候在依据icf把它放到地址0处。
2.4 将需要从ram中运行的代码搬到ram中
initializebycopy{section.textrw}
二、下面是我对generic_cortex.icf的注解
三、总结
咋看一下,这些东西对我们实际编程没有太大作用,有的同学可能学了许久的单片机了也没接触到这个icf(我就是),但是个人觉得,这对于我们理解单片机有很大的帮助。不然的话,对于单片机的理解就简单停留在外设操作了。

PCB品控出问题 iPhone XR订单削减
嵌入式系统的基础知识有哪些?
基于NPX系列芯片轮胎压力监测系统的解决方案
手机企业与产业链逐渐形成捆绑关系,小米对产业链的掌控力不足
虹科分享 | 如何应对冷冻干燥挑战?新型冻干专用无线温度验证系统TrackSense® LyoPro给你答案
STM32的icf文件有什么作用
频谱分析仪DSA815-TG产品资料
IGBT的应用领域及现状分析
怎样绘制家庭路由器指标图
阿里云将在沙特提供公共云服务:未来五年投资 5 亿美元
碳纳米管为硅阳极开辟了锂离子电池材料的新领域
瑞萨发布双向齐纳二极管,采用小型2引脚封装解决安装面积瓶颈
45万的SUV车主的青睐:传祺GS4,凭借的可不仅仅是颜值的征服!
抢占安全监控市场,FPGA、DSP厂商动作频频
什么是变频器软启动模式
阿里巴巴专项投资于高端智能纯电汽车项目
国产操作系统完成对龙芯平台的适配 将打破“缺芯少魂”的局面
由室温超导材料研究,看功率放大器在材料测试领域中的应用
IIC-China 2010参展商展前专访:上海华桑电子
对于定时开关而言,它最高可以带动多大功率的电器