每个芯片开发商都会针对每款芯片来编写一个.icf文件便是传说中的链接文件。关于根本的使用,这个.icf文件足以满意你的工程需求。但有时也会需求改动,比方当你的项目要增加外部RAM时就要修正一下icf。
1、Icf究竟干了啥呢?
界说了芯片存储空间的巨细。
界说ROM的巨细和开端、完毕地址。
界说RAM的巨细和开端、完毕地址。
当然这些都是最根本的,你也能够设置以下的东西来匹配你的具体项目。
链接时是否保存位块与符号
设置你的发动进程
设置你的堆与栈的巨细和对齐方法
修正编译器默许的初始化进程。
关于默许库的处理等。。。
2、下面我简略介绍几个功用,具体请参阅 EWARM_DevelopmentGuide
2.1 增加额定的region
比方我要增加另一个名为ROM2的ROM区域,巨细是256bytes,开端地址是0x80000.
define region ROM = Mem:[from 0x80000 size 0x100];
2.2 教你怎样放置SECTION
假如你要把你的只读常量放置在你指定的域而不是编译器默许的方位,你就得按如下操作了:
define region CONST_region = Mem:[from 0x100 size 0x100];
place in CONST_region{readonly secTIon .rodata}
2.3 把一个段放置在指定方位
place at address Mem:[0] {readonly secTIon .intvec} //–将向量表放置在地址0处。
Note:之前在看发动代码时,老在想这个向量表明怎样放到地址0处的呢,查了一下reference
__vector_table是编译器专有字符,表明出处开端放置向量表。
在代码开端处就声明晰此段为.intvec。链接的时分在根据icf把它放到地址0处。
2.4 将需求从RAM中运转的代码搬到RAM中
IniTIalize by copy {section .textrw}
二、下面是我对generic_cortex.icf的注解
三、总结
咋看一下,这些东西对咱们实践编程没有太大效果,有的同学或许学了良久的单片机了也没接触到这个icf(我便是),可是个人觉得,这关于咱们了解单片机有很大的协助。否则的话,关于单片机的了解就简略停留在外设操作了。