每个芯片开发商都会针对每款芯片来编写一个.icf文件就是传说中的链接文件。对于基本的应用,这个.icf文件足以满足你的工程需要。但有时也会需要改动,比如当你的项目要添加外部RAM时就要修改一下icf。

1、Icf到底干了啥呢?

  1. 定义了芯片存储空间的大小。
  2. 定义ROM的大小和起始、结束地址。
  3. 定义RAM的大小和起始、结束地址。

当然这些都是最基本的,你也可以设置以下的东西来匹配你的具体项目。

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

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(我就是),但是个人觉得,这对于我们理解单片机有很大的帮助。不然的话,对于单片机的理解就简单停留在外设操作了。

STM32中stm32f0xx_flash.icf文件的作用详解!相关推荐

  1. linux文件目录:Linux中各目录(文件夹)作用详解(持续更新)

    进入Linux系统,我们就是畅游在各种目录文件中,毕竟Linux是"文件系统",文件的存放就是在目录下面,那我们了解下"Linux中各目录(文件夹)作用详解"还 ...

  2. php中读取大文件实现方法详解

    php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...

  3. 微信小程序项目中JSON文件的作用详解

    在微信小程序开发项目中,会包含多个JSON文件,不同的JSON文件会有不同的作用,下面就微信小程序开发中的json文件进行说明. JSON配置文件: json 是一种数据格式,在实际开发中,json总 ...

  4. Linux中log的目录,/var/log目录中Linux日志文件的功能详解

    介绍下/var/log/中日志文件的所在位置以及包含的内容. 了解这些不同的日志文件,有助于在遇到紧急情况时,从容找出问题并加以解决. 这里介绍20个位于/var/log/ 目录之下的日志文件. 其中 ...

  5. Android中attrs.xml文件的使用详解

    $*********************************************************************************************$ 博主推荐 ...

  6. /var/log目录中Linux日志文件的功能详解

    介绍下/var/log/中日志文件的所在位置以及包含的内容. 了解这些不同的日志文件,有助于在遇到紧急情况时,从容找出问题并加以解决. 这里介绍20个位于/var/log/ 目录之下的日志文件. 其中 ...

  7. VScode 插件中 package.json 文件 activationEvents 字段详解

    一.activationEvents 插件在 VScode 中默认是没有激活的,通过 activationEvents 来进行配置: onLanguage:${language} onCommand: ...

  8. handler.ashx文件的作用详解

    ASP.NET2.0 Person Web Site:将图片以二进制的从数据库读取 在ASP.NET Person Web Site Starter Kits中,图片的是以二进制的形式存放在数据库里, ...

  9. c语言中数组的概念及作用,详解C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...

最新文章

  1. 微信小程序把缓存的数组动态渲染到页面
  2. 51Nod-1136 欧拉函数【数论】
  3. SPC.NET,为5年的开发做个结尾
  4. 摄像机的上方向(UpDirection)- 使用WPF演示
  5. J.U.C系列(二)CyclicBarrier的使用
  6. ActiveMQ安装配置
  7. Java中string,map,json之间的常用转换方法(json转map,map转json,json转string等)
  8. 结构方程模型及PLS估计【评价】
  9. 文件恢复原理Linux文件恢复工具-foremostextundelete
  10. 鸢尾花数据集的数据可视化
  11. 一起欣赏:50+ 极具创意的个人简历设计【下篇】
  12. Excel表格将多个单元格内容合并到一个单元格中_工作中使用记录_2021-03-29
  13. 按钮点击后的颜色css,CSS实现按钮点击后根据背景色加深效果-一颗优雅草bigniu...
  14. 电路单位本质与dB家族
  15. 818打响,家电第一渠道苏宁下一步目标是什么?
  16. Linux 关机与重启
  17. 关于Android Pie(Android 9.0)
  18. uniapp输入框弹起软键盘顶起页面
  19. 2021年安全员-B证考试报名及安全员-B证模拟考试题
  20. Springboot + elementUI实现上传用户头像

热门文章

  1. 小程序加载本地图片路径问题
  2. Ubuntu终端多窗口分屏Terminator
  3. mybatis-config.xml整理
  4. 手把手带你使用JS-SDK自定义微信分享效果
  5. 利用浏览器LocalStorage缓存图片,视频文件
  6. hdu2041java
  7. 浏览器插件 火狐插件
  8. [GRYZ2015]快排练习
  9. OpenGL画矩形函数:glRectf,四个参数分别表示了位于对角线(左下到右上)上的两个点的横纵坐标
  10. Matlab Robotic Toolbox V9.10工具箱(三):轨迹规划