搜索
bottom↓
回复: 18

认识IAR 开发环境下的.icf 文件

  [复制链接]

出0入0汤圆

发表于 2013-4-23 13:30:52 | 显示全部楼层 |阅读模式
本帖最后由 tmfwt 于 2013-4-23 13:33 编辑

IAR 开发环境下使用 .icf文件定义 MCU及其外扩资源的应用范围,这些在项目设计之前必须被确定下来。所以认识它非常重要。那么该文件是如何定义的呢?
下面通过一个.icf来认识其具体结构:
这是一个基于STM32芯片的.icf文件定义结构:

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/********************************-Specials-************************************/
/*由于STM32内部flash的起始地址为 0x08000000, 所以如下语句定义程序的起始地址,但对于一个应用程序,其起始运行地址不一定是 芯片定义的初地址,其可根据实际需要修改,当修改后,必须特殊设计一段引导代码使其能跳到应用程序中来。 由于作者的系统的APP 起始地址为 0x08008000 ,所以我的应用程序app start addrress 定义如下:*/
define symbol __ICFEDIT_intvec_start__ = 0x08008000;     
/********************************-Memory Regions-******************************/
/* 定义内部FLASH地址 */
define symbol __ICFEDIT_region_ROM_start__ = 0x08008000;
define symbol __ICFEDIT_region_ROM_end__   = 0x0807FFFF;
/*  定义内部RAM地址 */
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x2000FFFF;

/* 定义扩展RAM地址 */
define symbol __ICFEDIT_region_EXRAM_start__    = 0x68000000;
define symbol __ICFEDIT_region_EXRAM_end__      = 0x68040000;

/*********************************-Sizes-***************************************/
/* 栈和堆大小,一般不需要修改 */
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__   = 0x200;
/******************************* End of ICF editor section. ###ICF###***********/
define memory mem with size = 4G;
define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

/*定义内部 RAM ROM, 以及外部RAM 地址范围 */
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
define region EXRAM_region = mem:[from __ICFEDIT_region_EXRAM_start__   to __ICFEDIT_region_EXRAM_end__];

/*
********************************************************************************
                    Define Bootloader address
********************************************************************************
*/
/* 这段语句相当于一个标志位,使的以 ILOADER  声明的代码放在如下空间内,具体声明方式如下:
#pragma location = "ILOADER"
__root const unsigned char RBL_Code[] = {
  0x00, 0x04, 0x00, 0x20, 0x85, 0x2C, 0x00, 0x08, 0x9D, 0x2C, 0x00, 0x08, 0x9F, 0x2C, 0x00, 0x08,
  0xA1, 0x2C, 0x00, 0x08, 0xA3, 0x2C, 0x00, 0x08, 0xA5, 0x2C, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA7, 0x2C, 0x00, 0x08,
};
*/
define region ILOADER_region         = mem:[from 0x08000000 to 0x08003FFF];      
place in ILOADER_region         { readonly section ILOADER };
/*******************************************************************************/
/* 下列语句定义所定义地址空间内可完成的操作类型*/
initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };      
/* 对外部RAM操作类型的声明 */                 
place in EXRAM_region {readwrite data section SDRAM };          /* EXTSRAM_region */
/* 定义一个标志位,代表扩展RAM的起始地址,可以再应用函数中直接调用SDRAM_BASE_ADDR 这个变量 */
define exported symbol SDRAM_BASE_ADDR = __ICFEDIT_region_EXRAM_start__;

/******************************* End of this file ******************************/

出0入0汤圆

发表于 2013-4-23 13:39:25 | 显示全部楼层
讲解得很好。。

出0入0汤圆

发表于 2013-4-23 15:51:12 | 显示全部楼层
MAR
标记

出0入0汤圆

发表于 2013-11-17 15:23:47 | 显示全部楼层
mark!!!!!!!!!!!1

出0入0汤圆

发表于 2013-11-17 17:39:51 | 显示全部楼层
抄收学习帮顶了!

出0入0汤圆

发表于 2013-11-17 20:15:01 | 显示全部楼层
好文档,非常有用,顶起

出0入0汤圆

发表于 2014-3-5 15:18:16 | 显示全部楼层
刚接触就遇到这个问题    感谢讲解哈   以后了解更多了再来回头琢磨

出0入0汤圆

发表于 2014-7-22 14:46:08 | 显示全部楼层
不错啊,刚好用得上。

出0入0汤圆

发表于 2014-7-24 16:26:58 | 显示全部楼层
感谢讲解  

出0入0汤圆

发表于 2014-7-29 11:04:29 | 显示全部楼层
mark, thks

出0入0汤圆

发表于 2014-11-17 14:45:30 | 显示全部楼层
mark,新手不是很明白哦

出0入0汤圆

发表于 2014-11-17 15:47:16 | 显示全部楼层
学习 学习

出0入0汤圆

发表于 2014-11-17 16:13:01 | 显示全部楼层
标记学习中

出0入0汤圆

发表于 2014-11-17 17:05:13 | 显示全部楼层
mark一下。。。。

出0入0汤圆

发表于 2015-3-6 14:55:34 | 显示全部楼层
讲得很好,支持一下

出10入95汤圆

发表于 2018-4-22 22:15:20 | 显示全部楼层
又来学习一下,多谢分享!

出0入0汤圆

发表于 2018-5-23 10:34:23 | 显示全部楼层
收了,学习中

出0入0汤圆

发表于 2018-5-23 21:53:00 | 显示全部楼层
mark 讲解icf文件

出0入0汤圆

发表于 2019-2-25 15:55:25 | 显示全部楼层
好文章,有没有STM8的icf文件讲一下!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 13:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表