EFM32在IAR开发环境下指定代码,数据的存储空间

为了便于后续的项目升级,管理,需要对代码,数据的存储空间加以设定,也在网上找下相关的资料,笔者水平有限,

如下内容不一定完全正确,如有错误之后,还望帮忙纠正.首先,有必要了解一下IAR开发环境的ILINK,IAR的版本要

在IAR5.xx以后,本人是在IAR6.21版本之上调试,目前我也将版本更新到6.50了,推荐使用IAR更新版本的.

下载地址:http://pan.baidu.com/share/link?shareid=328871&uk=3842212607

破解补丁下载地址:http://download.csdn.net/detail/fzhiping2435118a/6644531

安装好IAR开发环境之后,我们可以打开IAR的帮助文档,查看关于ILINK的使用说明.打开help的下拉菜单,打开C/C++ Development Guide选项。

第一部分有详细讲述关于ILINK

其实,刚开始我们建立工程的时候也有使用到这个,可能没有引起关注,在Project->Options选项中,我们可以根据

实际MCU的memory和堆栈的大小在这里进行配置.我们打开这个*.icf文件看看具体的内容.*号是通配符,名称可以用

户自定义更改,下面是EFM32TG110F32时使用的ICF文件:EFM32TG110F32.icf这里其实主要定义了ROM,RAM和

堆栈的起始地址,结束地址.

/*###ICF### Section handledby ICF editor, don't touch! ****/

/*-Editor annotation file-*/

/*IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */

/*-Specials-*/

define symbol__ICFEDIT_intvec_start__ = 0x00000000;

/*-Memory Regions-*/

define symbol__ICFEDIT_region_ROM_start__ = 0x00000000;

define symbol__ICFEDIT_region_ROM_end__   =(0x00000000+0x00020000-1);

define symbol__ICFEDIT_region_RAM_start__ = 0x20000000;

define symbol__ICFEDIT_region_RAM_end__   =(0x20000000+0x00004000-1);

/*-Sizes-*/

define symbol__ICFEDIT_size_cstack__ = 0x400;

define symbol__ICFEDIT_size_heap__   = 0x800;

/**** End of ICF editorsection. ###ICF###*/

define memory mem with size =4G;

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 block CSTACK    with alignment = 8, size =__ICFEDIT_size_cstack__   { };

define block HEAP      with alignment = 8, size =__ICFEDIT_size_heap__     { };

initialize by copy {readwrite };

do not initialize  { section .noinit };

keep { section .intvec };

place at addressmem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };

place in RAM_region   { readwrite,

block CSTACK,

block HEAP };

我们可以在C程序当中的代码前使用,获取当前代码的位置.

#pragma location = ".xxx"       这里没有结束分号,xxx为自定义的变量.

然后就可以在icf文件中加上:

define symbol__ICFEDIT_region_DATRAM_start__ = 0x20000500;

place at addressmem:__ICFEDIT_region_DATRAM_start__ {section .xxx };

__ICFEDIT_region_DATRAM_start__是符号的名称,用户可自行定义.

这里的地址也需要根据自己的MCU定义.

这里需要注意的是:如果是定义的ROM的空间里面,那么ROM里面只能是readonly的属性,因此,

假如一个数组char array[10];那么它必须是char const array[10]; 这样才能正确的指定到具体地址去.

例如:

C程序:

#pragma location = ".test"

Char const array[10];

Icf文件:

place in ROM_region   { readonly  .test};/* ROM_region 可以自己定义*/

修改完成之后,我们可以进入DEBUG模式,打开View菜单下的memory选项,查看具体的地址中的内容是否与你需要的内容一致呢。动手看看吧.

EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间的更多相关文章

  1. 痞子衡嵌入式:在IAR开发环境下为工程开启CRC完整性校验功能的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下为工程开启CRC完整性校验功能的方法. CRC校验在嵌入式领域里的应用非常广,比如在通信领域,CRC检验值可以作为数据 ...

  2. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  3. 痞子衡嵌入式:在IAR开发环境下RT-Thread工程函数重定向失效分析

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下RT-Thread工程函数重定向失效分析. 痞子衡旧文 <在IAR下将关键函数重定向到RAM中执行的方法> ...

  4. 痞子衡嵌入式:在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法. 痞子衡旧文 <在IAR下将关键函数重定向到RAM中执行的方法> ...

  5. Python开发环境配置

    好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...

  6. Visual studio 通用开发环境配置:SDL,FFMPEG为例

    引言 每一个C++库的使用都是从开发环境的配置开始的,其实每个库的配置过程都是大同小异,总结下来有下面几个步骤: 下载库文件,这里假定是已经预先编译完成的. 配置库文件的包含目录(include)和库 ...

  7. AndroidStudio开发环境配置-Windows

    Android Studio开发环境配置-Windows 最近突发奇想,开始研究Android开发.开始时使用Eclipse作为开发IDE,结果各种不好使,首先下载和安装SDK,以及不同版本的Imag ...

  8. WIN10下java8的开发环境配置与第一个java程序

    一.开发环境配置 1.在官网上下载jdk-8u111-windows-x64.exe 2.运行安装包,可以自定义安装路径 3.进入环境变量设置: 计算机右键-->属性-->高级系统设置-- ...

  9. Mac下golang开发环境配置

    go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...

随机推荐

  1. 【随手记-有空整理】使用PHPMailer和QQ邮箱实现邮件的自动发送

    使用PHPMailer和QQ邮箱发送邮件时,在密码一栏里要填写QQ邮箱提供的授权码,而不是邮箱的登录密码 授权码获取可参考:http://service.mail.qq.com/cgi-bin/hel ...

  2. 如何解决JavaWeb乱码问题

    作为一个合格的web开发人员应该是什么问题都遇到过的,尤其是乱码问题.大家也许都体会到了,我们中国人学编程,很大的一个不便就是程序的编码问题,无论学习什么技术,我们都需要探讨他的编码问题. 今天来讲一 ...

  3. awk参数详解

    wk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F| ...

  4. 在verilog中关于inout口的设计方法

    在学习IIC的时候我们知道这么设计inout inout   scl : reg    scl_reg ,  scl_en ; scl  = scl_en ?   scl_reg : 1'dz ; 当 ...

  5. BZOJ 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚

    题目 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 553   ...

  6. QT中QWidget类简介

    一.详细描述 QWidget类是所有用户界面对象的基类.通俗的来讲,Qt基本上所有的UI类都是由QWidget继承出来的,而QWidget继承于QObject,  大家可以查阅Qt source 即可 ...

  7. HDU 5091 线段树扫描线

    给出N个点.和一个w*h的矩形 给出N个点的坐标,求该矩形最多能够覆盖多少个点 对每一个点point(x.y)右边生成相应的点(x+w,y)值为-1: 纵向建立线段树,从左到右扫描线扫一遍.遇到点则用 ...

  8. db2 xml 转 table【XQuery系列】

    版本号:DB2 Version 9.1 1.创建測试表,初始化数据 create table emp (doc XML);   INSERT INTO EMP VALUES ('<dept bl ...

  9. 【Oracle】wmsys.wm_concat函数字段值为空

    这个是因为字符集的问题,和空值是没关系的.其实已经取到了数据,可以验证一下返回的不是0,但是由于这个里面有个chr(0)字符,而且可能第一个字符就是chr(0),所以就显示得怪异的空现象.至于为何会出 ...

  10. iOS原生App与H5页面交互笔记

    文/MikeZhangpy(简书作者)原文链接:http://www.jianshu.com/p/4ed3e5ed99c6著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 最近在做一个项 ...