关于IAR的一些总结 -- ARM调试和Flash调试的区别

发布者:shtlsw最新更新时间:2019-03-06 来源: eefocus关键字:IAR  ARM调试  Flash调试 手机看文章 扫描二维码
随时随地手机看文章

最近一直埋头于毕业论文的撰写当中,真是有种“两耳不闻窗外事,一心只写毕业论文”的感觉啊。成天大眼对小眼地面对着word、viso和知网客户端等等文字编辑工具真是有种麻木的赶脚,不写论文不知道,一写论文吓一跳,感觉让我写上几万行代码也比坐在电脑面前憋出几万字论文来的轻巧,“问君能有几多愁,恰似一江春水向东流”,哎,突然间发现,人生最最痛苦的不是人死了钱没花了,而是写了十几天的论文才发现,晕,还有一多半没写呢,不过木有办法,只能硬着头皮上了,再此之前还是更篇博客为好,不然该沉底落灰了(话说貌似断更了好长时间了,不过幸好不是写小说,不然该被拍砖了),哈哈~


闲话少说,下面进入正题。其实关于Flash调试和RAM调试的概念,我也是从调试Kinetis的时候才开始接触,最初只是随便用用,没有深究,之后用的多了才开始深入研究两者之间的区别,发现里面大有文章可作,这也是我为什么后来又把本文的前缀改成【原创精品】的缘故,翻看了网上的一些资料,大多是授人以鱼的文章,所以觉着有必要在这里谈谈自己的一点看法,做个笔记:


imageimage

上图为在IAR环境下的Flash调试界面和RAM调试界面


首先说说什么是Flash调试和RAM调试,Flash调试就是通常意义下的普通调试,即将编译链接之后的code下载到单片机的ROM区,数据放到RAM区,然后进行调试;而RAM调试则是将数据放到RAM区的同时再从RAM区中额外开辟出一段空间存放可执行code,这样就是code和数据同时运行在RAM区里面。

 

至于为什么要刻意区分出这两种调试方式,其实在低端MCU领域是没有RAM调试这个概念的,其中很大一部分原因是它没有足够大的RAM空间在存放编译后code代码的同时仍然可以拿出额外的空间作为数据RAM的,而在高端MCU领域中,比如ARM,动辄几十KB的RAM是很常见的,在不运行超大工程的情况下是完全可以拿出一部分空间运行代码的,所以也就出现了RAM调试这种方法了。

    

相比于Flash调试,RAM调试则与生俱来的带来两个最大的先天优势,一个是RAM的可擦写的次数理论上是无限的,在调试代码的期间我们往往是需要不断下载更新的,而Flash的擦写次数是有限的(一般几万次、几十万次不等,虽然看起来足够多,但是也心疼的慌),因此在调试期间我们可以选择RAM调试;另一个方面,则更是RAM调试的强项(Flash真够悲催的),在RAM区的代码执行速率和效率远高于需要不断地读写Flash区代码的,这点毋庸置疑,所以在当今智能手机比拼硬件的时代,我们选择一款强大的CPU是应该的,但是要想让系统运行的更流畅,足够大的机载RAM是必须的,呵呵。当然RAM调试的缺点是掉电丢失,在RAM区运行的代码在掉电的情况下是不会被保存的,下次上电单片机仍然会执行Flash区内部的老的代码,这点是需要注意的,很多人忘记考虑这点,在RAM调试功能完毕,等拿到现场单片机独立运行的时候却发现程序是不对的,咳咳,那当然不对啦。。。

    

理论部分介绍完毕,下面我们结合IAR开发环境来分析一下怎么实现Flash调试和RAM调试的。其实我们仔细研究发现,Flash调试和RAM调试在IAR下的区别只是.icf配置文件的不同罢了,其实很简单很容易理解,也就是把单片机的内存映射改变了,下面单拿出两者不同的部分晒出来(重要部分加了注释,供参考):


flash调试的256KB_Pflash.icf文件:

/*-Specials-*/ 
define symbol __ICFEDIT_intvec_start__ = 0x00000000;/* 中断向量的起始地址为ROM的首地址 */ 
/*-Memory Regions-*/ 
define symbol __ICFEDIT_region_ROM_start__ = 0x0; 
define symbol __ICFEDIT_region_ROM_end__   = 0x00040000;/* 256k ROM空间 */ 
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff8410; 
define symbol __ICFEDIT_region_RAM_end__   = 0x20000000;

define exported symbol __VECTOR_TABLE = 0x00000000;/* 中断向量表放在ROM区0起始地址 */ 
define exported symbol __VECTOR_RAM = 0x1fff8000;

define symbol __code_start__ = 0x00000410;/* 代码开始区地址在ROM区 */

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

place in ROM_region   { readonly, block CodeRelocate}; /* 将只读代码放到ROM区 */

place in RAM_region   { readwrite, block CodeRelocateRam, 
                        block CSTACK, block HEAP };

RAM调试的64k_ram.icf文件:

/*-Specials-*/ 
define symbol __ICFEDIT_intvec_start__ = 0x1fff8000;/* 中断向量的起始地址为RAM的首地址 */ 
/*-Memory Regions-*/ 
define symbol __ICFEDIT_region_ROM_start__ = 0x0; 
define symbol __ICFEDIT_region_ROM_end__   = 0x0;/* 将ROM空间置0 */ 
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff8000; 
define symbol __ICFEDIT_region_RAM_end__   = 0x20000000;

define exported symbol __VECTOR_TABLE = 0x1fff8000;/* 中断向量表放在RAM区首地址 */ 
define exported symbol __VECTOR_RAM = 0x1fff8000;

define symbol __code_start__ = 0x1fff8410;/* 将代码开始区地址在RAM区 */

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

place in RAM_region   { readonly, block CodeRelocate }; /* 将只读代码放到RAM区 */

place in RAM_region   { readwrite, block CodeRelocateRam, 
                        block CSTACK, block HEAP };

    上面的代码我就不多做详细解释了,通过注释和对比估计大多数博友应该会理解了,不明白的地方欢迎下面留言共同探讨,当然,欢迎投票,呵呵。本篇博客首发于ChinaAET,转载请注明出处和原作者jicheng0622信息,谢谢理解,再聊,未完待续~


关键字:IAR  ARM调试  Flash调试 引用地址:关于IAR的一些总结 -- ARM调试和Flash调试的区别

上一篇:stm32 IAP在线升级的个人经验以及实现方法
下一篇:IAR编译的工程无法正常仿真的问题

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

IAR 】MSP430 IAR 编译报错:error
无编号警告类型: 1、Sat Jun 23, 2012 17:41:05: The stack pointer for stack 'Stack' (currently Memory:0xF5336) is IAR相关设置:Tools- Option- Stack- Warn when stack pointer is out of bounds. The stack pointer for stack is outside the stack range 1、 Debugging using IAR Embedded Workbench Because the IAR debugger i
[单片机]
ulink-Jlink下在ram和flash调试STM32的方法
Keil MDK3.20 在ULINK下调试stm32方法 1. 程序在RAM中运行 要点:(1)程序的下载地址改到RAM空间中 (2)程序的debug之前要设定SP,PC指针到Ram空间 新建工程,选择STM32 的具体型号,我买的万利的开发板,选择stm32f103Vb。 设定程序下载地址,如下图所示,IROM1的地址指向了STM32的ram空间。 空间大小如何分配取决于自己的需求。本款处理器内部ram大小为20K,分配16K给只读区,4K给可读可写区。这样IROM设定的大小为0x4000,IRAM1的起始就变为0X20004000,大小只剩下0X1000。 Debug标签选择ULINK1 Corte
[单片机]
ulink-Jlink下在ram和<font color='red'>flash</font>中<font color='red'>调试</font>STM32的方法
IAR头文件包含路径设置
IAR头文件包含路径设置  这个文件如果是IAR自带的,不需要设置。  如果不是IAR自带的,最简单的办法:和.c文件放在一个目录下,不需要设置。  如果不在同一个目录下,就需要设置, 举个例子  工程上单击右键,选择Option,打开工程设置窗口(如下图) 选择C/C++ compiler,然后再选择Preprocessor,最后在下面的空格处写上相应的路径,路径的格式在后面有专门介绍。如下图: 我的设置:工程文件在 E:S3C2440YS2440_IAR 头文件在 E:S3C2440YS2440_IARlib 则在设置窗口填入:$PROJ_DIR$lib ===========================
[单片机]
<font color='red'>IAR</font>头文件包含路径设置
STM8工具之IAR--调试
调试是看数据变化 补充 IAR中的 Options — c/c++ compiler— Optimization — Level 选项: Level的缺省值为Low,当我把Level选为None之后,即不执行任何优化时,全局变量、静态局部变量、局部变量的值都可以看到,如下图所示。 当我把优化等级选为Midium或者High之后,全局变量、静态局部变量、局部变量的值都不可见了。 结论:要想观察局部变量的值,调试的时候可以把优化等级设为None.
[单片机]
STM8工具之<font color='red'>IAR</font>--<font color='red'>调试</font>
IAR推出 CI/CD 环境中进行高效构建和测试的跨平台构建工具
IAR Systems 推出用于在 CI/CD 环境中进行高效构建和测试的跨平台构建工具 IAR全新的面向 Arm 的构建 (Build) 工具赋能用户在 Ubuntu、RedHat 或 Windows 上建立自动化构建和测试流程 瑞典乌普萨拉—2021 年 11 月 3 日—全球领先的嵌入式开发软件工具和服务提供商 IAR Systems® 宣布:现已提供面向 Arm 的构建工具,该工具支持 Linux 和 Windows,进一步扩展 IAR Systems 用于实现灵活自动化工作流程与自动化构建的产品系列。这些工具支持在跨平台框架中实现自动化应用构建和测试流程,使关键软件构建和测试的大规模部署成为可能。
[嵌入式]
<font color='red'>IAR</font>推出 CI/CD 环境中进行高效构建和测试的跨平台构建工具
mini2440----keil for ARM下的调试与下载环境的搭建
题外话:编译环境选择推荐 对于刚刚接触ARM裸机编程的各位,我要特别的进行提醒一下,就是关于编译环境的选择问题。目前主流的有ADS+AXD,KEIL FOR ARM,IAR FOR ARM三种,我开始使用的ADS+AXD进行学习,因为光盘里面自带,而且很多资料都是他的,但是个人感觉真心调试十分的不方便,而且各种容易死机,并且现在也已经不更新了,北航一本讲嵌入式的书出了一个第二版,就是把ADS换成了KEIL,而且以后KEIL会是主流,因此我推荐选择KEIL进行学习。IAR听我一个同学说也十分好用,但是在网上找有关方面的资料不是很多。而且我想北航一群教授编书都用KEIL进行,说明KEIL自有他的优势,书上这么说了,那以后会有更多学生用
[单片机]
mini2440----keil for <font color='red'>ARM</font>下的<font color='red'>调试</font>与下载环境的搭建
IAR for msp430的一个编译错误的解决方法
简介:很多人在win7上安装 IAR for msp430 后编译会出现如上的错误,笔者刚开始也遇到了这个问题,很是困惑。在网上找解决方法。 Fatal Error : Copy protection check, No valid license found for this product 2 很多人在win7上安装 IAR for msp430 后编译会出现如上的错误,笔者刚开始也遇到了这个问题,很是困惑。在网上找解决方法。很多都是如下回答: 注意:破解后如出现以下情况: Fatal Error : Copy protection check, No valid license found for this pr
[单片机]
IAR FOR STM8 同一个工程芯片选择003F3可以编译003K3提示空间不足
同一个工程文件,选择103F3可以编译通过,但是选择103K3便提示空间不足 百思不得其解,查阅大量资料无果。最后在IAR工程里面找到了配置文件 打开003f3的配置文件和003K3配置文件进行对比,其余都一样,唯独程序空间003K3是从地址0X9000开始,少了1K,不知道为何要这样设置,明明两个芯片空间大小和结构一模一样。 将003K3的配置文件地址改成0x8000开始,重新编译,一切正常。 编译通过,程序空间总共占用5419b。 问题:这样操作后将程序下载到电路板上不知道会不会出错,有待验证。个人猜测应该没问题,是IAR的错误。
[单片机]
<font color='red'>IAR</font> FOR STM8 同一个工程芯片选择003F3可以编译003K3提示空间不足
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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