打印
[牛人杂谈]

菜鸟详解iar的icf文件

[复制链接]
1886|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
每个芯片开发商都会针对每款芯片来编写一个.icf文件就是传说中的链接文件。对于基本的应用,这个.icf文件足以满足你的工程需要。但有时也会需要改动,比如当你的项目要添加外部RAM时就要修改一下icf。

1、Icf到底干了啥呢?
定义了芯片存储空间的大小。
定义ROM的大小和起始、结束地址。
定义RAM的大小和起始、结束地址。
当然这些都是最基本的,你也可以设置以下的东西来匹配你的具体项目。

链接时是否保存位块与符号
设置你的启动过程
设置你的堆与栈的大小和对齐方式
修改编译器默认的初始化过程。
关于默认库的处理等。。。


沙发
21mengnan|  楼主 | 2019-1-25 15:43 | 只看该作者
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的注解





使用特权

评论回复
板凳
21mengnan|  楼主 | 2019-1-25 15:43 | 只看该作者
三、总结

咋看一下,这些东西对我们实际编程没有太大作用,有的同学可能学了许久的单片机了也没接触到这个icf(我就是),但是个人觉得,这对于我们理解单片机有很大的帮助。不然的话,对于单片机的理解就简单停留在外设操作了。

使用特权

评论回复
地板
xinpian101| | 2019-1-25 16:41 | 只看该作者
这个必须选对。跟那个Keil的启动文件类似。

使用特权

评论回复
5
643757107| | 2019-1-25 21:37 | 只看该作者
这个用错了,那就麻烦的很。

使用特权

评论回复
6
玛尼玛尼哄| | 2019-1-25 22:22 | 只看该作者
DCD是什么指令

使用特权

评论回复
7
捉虫天师| | 2019-1-27 13:52 | 只看该作者
是的,这个不能选错了。

使用特权

评论回复
8
yiy| | 2019-1-27 23:35 | 只看该作者
对,这个文件必须选对,不同的单片机,内部不同。

使用特权

评论回复
9
wanduzi| | 2019-1-29 20:30 | 只看该作者
定义了地址。

使用特权

评论回复
10
mintspring| | 2019-2-22 23:51 | 只看该作者
猛男分享的好

使用特权

评论回复
11
天灵灵地灵灵| | 2019-2-23 20:04 | 只看该作者
用这个可以修改高级用法。

使用特权

评论回复
12
小明的同学| | 2019-2-24 09:15 | 只看该作者
一般使用默认的就行了,我很少修改这个。

使用特权

评论回复
13
小明的同学| | 2019-2-24 09:15 | 只看该作者
不太懂那些修改这个的人是出于何种目的

使用特权

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

本版积分规则

78

主题

978

帖子

1

粉丝