stm32存储器结构、 IAR 开发环境下的.icf 文件、.map文件 解析

发布者:技术掌门最新更新时间:2017-09-29 来源: eefocus关键字:stm32  存储器结构  IAR  开发环境 手机看文章 扫描二维码
随时随地手机看文章

新建 IAR环境  STM32工程,报错:

Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated  minimum size of 0x9ca8 bytes in <[0x20000000-0x20004fff]> (total uncommitted space 0x5000). 

原因:没指定.icf文件而导致不能够给段/块分配空间....。当然,这解释未必使用其他情况。

回想下IAR 建立工程还有.icf 文件一说.....手生啦。

想着尽量弄清楚些,今个得空+有这个心情。奏起:

STM32存储器结构

首先,我们对比一下Cortex-M3存储器结构和STM32存储器结构:


可知,cortex-M3内核的寻址能力为32位,4G的空间,然 每个片子(stm32的) 用能够用上多少?少.............

这里关心stm32的信息。

code 代码的存放位置。

嵌入式闪存:闪存模块--出自相关手册


这里关注主存储快+信息快(系统存储器+选择字节)大小,不同片型,大小不同。我们在某些情况下读写flash,可操作主存储块的靠后的程序代码用不到的一部分。

SRAM:静态ram

STM32F103V8T6内置64K字节的静态SRAM。它可以以字节、半字(16位)或全字(32位)访问。SRAM的起始地址是0x2000 0000。

所以,我们调试程序时,能够看到的变量地址均在这20K的范围内。0x2000 0000后边的20k。

PERIPHERALS:片内外设

地址空间:0x4000 0000--0x4002 3400



下边说说

IAR中使用.icf文件 划分存储资源

设备:STM32F103V8T6--  ROM---64K  RAM:20K

认识IAR 开发环境下的.icf 文件: ----这篇文章可以当做IAP下载方式下,带外部SRAM的整个存储资源规划。

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


  1. /*###ICF### Section handled by ICF editor, don't touch! ****/  

  2. /*-Editor annotation file-*/  

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

  4. /*-Specials-*/  

  5. define symbol __ICFEDIT_intvec_start__ = 0x08000000;/*中断向量表开始地址*/  

  6. /*-Memory Regions-*/  

  7. define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;/*闪存起始地址*/  

  8. define symbol __ICFEDIT_region_ROM_end__   = 0x0800FFFF;/*闪存结束地址---flash大小64k*/  

  9. define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;/*SRAM起始地址*/  

  10. define symbol __ICFEDIT_region_RAM_end__   = 0x20004FFF;/*SRAM结束地址---SRAM大小20k*/  

  11. /*-Sizes-*/  

  12. define symbol __ICFEDIT_size_cstack__ = 0x800; /*栈大小*/  

  13. define symbol __ICFEDIT_size_heap__   = 0x200;/*堆大小*/  

  14. /**** End of ICF editor section. ###ICF###*/  

  15.   

  16. define memory mem with size = 4G;  

  17. define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];  

  18. define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];  

  19.   

  20. define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };//CSTACK块属性(8字节对齐、大小__ICFEDIT_size_cstack__)  

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

  22.   

  23. initialize by copy { readwrite };  

  24. do not initialize  { section .noinit };  

  25.   

  26. place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; //__ICFEDIT_intvec_start__赋值给.intvec标识符  

  27.   

  28. place in ROM_region   { readonly };  

  29. place in RAM_region   { readwrite,  

  30.                         block CSTACK, block HEAP };  



.map 目标文件实际的内存分配

首先当然要生成map文件了,注意IAR的默认设置是不生成map文件的,我们需要手动设置一下,如下图,然后点击准备就绪之后编译


map文件主要由以下几部分构成:

(1)文件头中显示链接器版本,输出文件名,MAP 文件名以及链接器命令行等。 
(2)RUNTIME MODEL ATTRIBUTES 部份显示 Endian等属性;
(3) PLACEMENT SUMMARY部份显示各sections 在存储器中的分布; 
(4)INIT TABLE 部份显示与初始化有关的section tables;
(5)MODULE SUMMARY部份显示所有被连接的文件信息,包括目标文件和库文件等;

(6)ENTRY LIST部份给出了所有函数的入口地址及其所在的目标文件。 

(7)文件尾中显示了总的代码和数据字节数(想看下最后目标代码占用多少Flash和多少RAM的可以从这里查到)。

详情见:深入剖析之通过IAR MAP文件查看目标文件内存分配

看看总是好的.......


关键字:stm32  存储器结构  IAR  开发环境 引用地址:stm32存储器结构、 IAR 开发环境下的.icf 文件、.map文件 解析

上一篇:IAR+STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
下一篇:STM32学习笔记-Flash做为存储器储存数据

推荐阅读最新更新时间:2024-03-16 15:39

STM32固件库V3.3.0的CMSIS文件简析
STM32的V3.3.0库,内有CMSIS的文件夹为arm Cortex微控制器软件接口标准,现在将我实际工作中的作一个简要分析: 1.选择启动文件:根据自己所用的芯片的型号,选择正确的启动文件。这个根据数据手册上的划分。例如STM32F101VBT6,就选择startup_stm32f10x_md.s,在这个文件里,首选要定义自已的堆和栈的大小,这个根据自已的需要确定。文件中已经定义好了中断向量的位置及堆和栈的初始化操作。 Reset_Handler PROC EXPORT Reset_Handler IMPORT __main IMPORT SystemInit
[单片机]
Cortex M3寄存器组
1、通用目的寄存器R0~R7 R0-R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后的初始值是不可预料的。 2、通用目的寄存器 R8-R12 R8-R12 也被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们, 32 位的thumb-2 指令则不受限制。它们也是 32 位字长,且复位后的初始值是不可预料的。 3、特殊功能寄存器 程序状态寄存器:APSR, IPSR, EPSR ---- MRS/MSR APSR: N:负条件码标志位,运算结果小于0,N=1, 大于等于0,N=0; Z:零条件码标志位,运算结果为0,Z=1; C:进位条件码标志位,运算指
[单片机]
Cortex M3寄存器组
手把手之STM32启动代码
对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的启动代码。没有BIOS的电脑,那注定是一块板砖!BIOS主要是做一些开机前的准备工作,例如系统时间设定、启动顺序。。。扯远了 其实电脑本身就是从单片机而来,那么单片机也是有启动代码的,只是我们绝大部分情况 不去关心它。 启动代码究竟都干了些什么工作,为何需要它?想想你在c语言中用到了什么东西,而这些东西却是拿来就可以用的?堆、栈!没错,就是他们。我们知道堆和栈是内存中划分出的一块区域,那为什么我们没有亲自划分呢,因为启动代码帮了你的忙!!!再想想单片机工作的时候,有哪些配置被我们忽略了,而它却可以用?时钟,就是这货,我们可以不配置时钟,而你
[单片机]
手把手之<font color='red'>STM32</font>启动代码
STM32 IIC 详解 之 stm32 IIC 从机模式
1、IIC简介 第二节代码会用到该部分内容,对于IIC来说,从机是不能主动发送数据的,开始条件都是由主机生成。 1.1、主机发送数据流程 1) 主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始 2) 主机接着发送一个命令字节。该字节由 7 位的外围器件地址和 1 位读写控制位 R/W组成(此时 R/W=0) 3) 相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0) 4) 主机收到从机的应答信号后开始发送第一个字节的数据 5) 从机收到数据后返回一个应答信号 ACK 6) 主机收到应答信号后再发送下一个数据字节 7) 当主机发送
[单片机]
STM32_IAP详解(有代码,有上位机)
Iap,全名为in applacation programming,即在应用编程,与之相对应的叫做isp,in system programming,在系统编程,两者的不同是isp需要依靠烧写器在单片机复位离线的情况下编程,需要人工的干预,而iap则是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。在工程应用中经常会出现我们的产品被安装在某个特定的机械结构中,更新程序的时候拆机很不方便,使用iap技术能很好地降低工作量. 实现iap有两个很重要的前提,首先,单片机程序能对自身的内部flash进行擦写,第二,单片机要有能够和外部
[单片机]
STM32_IAP详解(有代码,有上位机)
STM32 (5) 自己写库 构建库函数雏形1 寄存器结构体定义
前面把基础部分讲得差不多,比如说什么是寄存器,寄存器映射,怎么样来寄存器编程,寄存器编程的时候应该参考官方的什么手册, 前面讲了什么是寄存器 怎么使用寄存器编程 寄存器编程的时候应该 参考哪些手册 接下来我们开始利用固件库编程,今天开始从 最底层开始写库函数 《在零死角玩转STM32》 第九章 l利用我们上节课的历程 下面这些是7个GPIO口的寄存器映射我们到GPIO口的寄存器映射,这些是最底层的东西,我们基本上已经学会了,那么接下来我们 进入固件库编程在真正进入固件库编程之前,我们应该了解固件库与寄存器的联系,参考《零死角玩转STM32F103-霸道》第九章 自己写库构建库函数雏形针对霸道 和指南者 上图是我们
[单片机]
<font color='red'>STM32</font> (5) 自己写库 构建库函数雏形1 寄存器<font color='red'>结构</font>体定义
STM32的Cortex-M3中断异常处理
前段时间用STM32F103VBT6写了一个中断的函数,借此机会想了解下STM32的中断机制,用过之后发现STM32的中断配置相当灵活,稳定行很高,测试发现几乎没出过什么差错。我在程序里开了三个中断,一个计数器用于精确延时用,另外两个为外部事件处理中断,下面一一详细介绍,方便初学者入门。 在进行STM32中断配置之前首先需要了解下它的中断部分: 一、Cortex-M3中断机制 在STM32处理器中有43个可屏蔽中断通道(不包含 16个 Cortex?-M3的中断线)。共设置了16个可编程的优先等级(使用了 4位中断优先级);它的嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和有效处理地处理
[单片机]
<font color='red'>STM32</font>的Cortex-M3中断异常处理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved