用IAR在RAM进行调试
在内存中调试STM32 - IAR平台

在内存中调试STM32 - IAR 平台STM32 这颗Cortex-M3 控制器,与其他许多ARM 一样,提供了BOOT0 和BOOT1 两个管脚用于启动选择。
BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。
BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。
(用于串口ISP)BOOT1=1 BOOT0=1 从内置SRAM 启动,这种模式可以用于调试。
在芯片上电复位时,BOOT0 和BOOT1 两个管脚的状态将决定芯片从何处启动。
1.当BOOT0 和BOOT1 均设置为逻辑1 时,系统将从内置SRAM 中启动,这是代码内存调试的第一个条件。
2. 然后,我们需要在代码中设置正确的中断向量表位置。
中断向量表通常被放置在用户程序的开始,所以flash 中运行时,向量表位于0x08000000 处,而当代码被放置在SRAM 中运行时,他的位置就成了0x20000000。
在初始化NVIC 时,我们可以放置如下代码,定义向量表的位置NVIC_SetVectorTable(0x20000000 , 0x0);或NVIC_SetVectorTable(0x08000000 , 0x0);3. 在编译器中,要进行正确的设置。
这里以IAR 5.4 为例说明。
3.1. 工程选项中Linker 项,Config 选项卡中,指定Linker Configuration File 为stm32f10x_ram.icf,该文件在FWLIB 安装包中可以获得,IAR4 和5 分别有不同的配置文件。
3.2. 同样是工程选项中Debug 项,Download 选项卡中,去掉所有钩子,。
iar ramfunc原理 -回复

iar ramfunc原理-回复iar ramfunc原理指的是指令编译器iar systems提供的一种特殊函数修饰符,它可以将函数放置在RAM中运行,从而提高程序的执行效率和响应速度。
本文将一步一步解释iar ramfunc原理。
第一步,了解函数修饰符的作用和原理。
函数修饰符是编程语言中的一种语法标记,用于改变函数的行为或特性。
iar systems开发的编译器中,引入了ramfunc这个特殊的函数修饰符。
一般情况下,程序的函数会被编译器放置在程序的ROM(Read-Only Memory,只读存储器)中运行。
但有些函数的执行时间较长,会占用较多的ROM空间,导致程序的执行效率降低。
ramfunc函数修饰符的作用就是将这些函数放置在RAM (Random Access Memory,随机存储器)中运行,从而加快函数的执行速度。
第二步,理解RAM和ROM的区别。
RAM和ROM是计算机存储器中的两种不同类型,具有不同的特点和用途。
RAM是一种易失性存储器,它可以读写数据,并且在电源断开时数据会丢失。
而ROM是一种只读存储器,只能读取数据,不能写入或修改数据,并且在电源断开时数据不会丢失。
由于RAM的读写速度较快,因此将函数放置在RAM中运行可以提高程序的执行效率和响应速度。
第三步,使用ramfunc函数修饰符。
在编译器iar systems的开发环境中,开发人员可以使用ramfunc修饰符来标记需要放置在RAM中运行的函数。
修饰符的使用方法很简单,只需要在函数的声明或定义前加上__ramfunc 关键字即可。
例如:__ramfunc void myFunction(){函数实现}通过这样的方式,编译器会将这个函数放置在RAM中运行,从而提高函数的执行速度。
需要注意的是,由于RAM的空间有限,因此只适合放置一些执行时间较长的函数。
第四步,注意ramfunc函数修饰符的限制。
虽然ramfunc函数修饰符能够提高函数的执行速度,但它也有一些限制。
IAR编译环境的配置 初级

IAR编译环境的配置是相当重要的,没配置正确或者不符合自己的习惯的话,使用起来就会很麻烦。
下面我根据网上的经验和资料,以及自己摸索和大家共同探讨下IAR的配置。
我第一次打开IAR环境的时候,发现工作区有明显分层现象。
如图一所示图一这是我郁闷了好久,网上也不知道该如何搜索相关,只有自己慢慢找,最后还是找到了。
点击tools---options 就会弹出一个对话框来,如图二所示图二点editor选项卡,可以看到右边有很多选项,这些选项关系到使用的习惯和便捷性。
首先要谈到的是tab size,这个表示tab的字符宽度,默认值为8,indent size表示缩进的字符宽度,默认为2。
有人喜欢缩进为4,有人喜欢缩进为2,根据个人喜好,和程序的复杂度来选择,我一般选择2。
然后紧跟着,下面有个tab key funtion,说得是按下tab键所起到的作用,第一个表示插入制表符,第二个表示插入空格,一般选择插入空着(insert with space)这个选项。
为了解决图一的问题,就在show right margin(显示右边空白),处理方法很多,可以不选中,也可以选择Printing edge(显示到边缘),也可以把Columns(分栏)占的比例修改为100都可以。
另外,根据个人习惯,有人喜欢列出行号,有人不喜欢,这个可以在configure的下面show line numbers的选项,选中即可列出行号。
其他可以根据自己习惯设定,设定好了之后,如图三的效果,就看起来舒服多了。
图三下面一个重点就是进行项目设定了,这个步骤非常重要,如果没有设置好,有可能编译不通过或者出错。
其实我们当初选择empty project模版的时候,配置都是属于默认的,但是有些关键配置还是需要自己手动配置的,虽然配置项目很多,根据网上经验和资料,以及个人理解,列举了几个关键选项来配置即可。
1、IAR EWARM允许为工作区中的任何一级目录和文件单独设置选项,但是用户必须首先为整个项目设置通用的选项General Option。
IAR EWARM SW调试

图1 此时,在 J-Link/J-Trace>connection 会自动选择 SWD 接口。 2、 在菜单栏点击调试后,会多出一条调试工具栏,如图 2
图2
3、 点击调试工具栏中的
,出现图 3。注意图上红框内容。
设置 Clock Setup 中 CPU clock,这个值与调试目标板内核时钟一致,务必设置正确,否 则将在 Terminal I/O 上出现乱码。
为了在调试过程中,打印输出调试信息,而在正式发布烧入产品时去掉打印输出调试信 息,从而最大减少代码,最好的办法是使用宏定义。在调试时,定义 DEBUG 宏,正式发布 时去掉 DEBUG 宏定义。
#ifdef DEBUG
#define PRINTF(...) printf(__VA_ARGS__)
#else
J-Link (20 Pin)引脚序号
PA13
SWDIO
7
PA14
SWCLK
9
PB3
PF1
13
RESET
RESET
15
注:本人实践中,stm32 的调试口 RESET 可以不使用。
二、 调试环境设置
1、 在 IAR Embedded Workbench IDE 中,打开 Project>options,在 General Options>Library Configuration 页面选中 Semihosted 和 Via SWO。
息,在一定程度上减少了工作量。
一、 硬件电路
调试 M3 时,须使用 SWD 接口。本人接触过 M3 有 ST 和 TOSHIBA 的芯片。在 STM32 中,使用 PA13、PA14、PB3。在 TOSHIBA TMPM36x 系列使用 SWDIO、SWCLK、PF1 引 脚。对应序号见下表
iar调试方法

iar调试方法【最新版3篇】目录(篇1)1.IAR 调试方法概述2.IAR 调试流程3.IAR 调试工具4.IAR 调试技巧与实践5.总结正文(篇1)IAR 调试方法IAR(In-Application Reprogramming)即在应用程序中重新编程,是一种在不刷新整个程序的情况下对单片机程序进行部分修改的方法。
这种方法可以节省开发时间,降低开发成本,并且能够实现复杂的功能。
本文将介绍 IAR 调试方法的概述、流程、工具、技巧与实践。
一、IAR 调试方法概述IAR 调试方法是基于 IAR(In-Application Reprogramming)技术的一种调试方法,其主要特点是在应用程序运行过程中对程序进行部分修改,而不需要刷新整个程序。
这种方法可以实现对程序的快速调试和迭代,提高开发效率。
二、IAR 调试流程IAR 调试流程主要包括以下几个步骤:1.准备工作:首先需要对硬件进行配置,包括单片机、外设等,确保硬件连接正常。
2.编写调试程序:编写一个能够运行在目标系统上的调试程序,该程序需要包含 IAR 调试功能。
3.下载调试程序:将调试程序下载到目标系统中,并运行。
4.调试程序:在调试程序运行过程中,根据需要对程序进行部分修改,并保存修改后的程序。
5.上传新程序:将修改后的程序上传到目标系统,并运行新的程序。
6.重复调试:根据实际运行情况,重复步骤 4 和步骤 5,直到程序达到预期效果。
三、IAR 调试工具IAR 调试工具主要包括以下几个方面:1.IAR 编程器:用于编写和下载调试程序的工具,一般为硬件编程器或者软件编程器。
2.IAR 调试软件:运行在目标系统上,用于实现 IAR 调试功能的软件。
3.IAR 仿真器:用于模拟目标系统的运行环境,方便开发者进行调试。
四、IAR 调试技巧与实践1.善于利用断点调试:在调试程序中设置断点,能够帮助开发者定位问题所在,提高调试效率。
2.逐步执行调试:逐步执行调试程序,观察程序运行状态,有助于发现问题。
iar使用详细指南

iar使用详细指南iar使用详细指南2009-12-05 10:02要:本应用笔记说明如何建立、构建和调试面向MAXQ?平台、以C语言编写的应用程序,并演示MAXQ2000的某些特性。
引言MAXQ平台得到了世界一流工具的支持,例如IAR专为MAXQ系列提供的“嵌入式工作台” (Embedded Workbench)。
本应用笔记说明如何建立、构建和调试面向MAXQ平台、以C语言编写的应用程序。
本文还将演示MAXQ2000的某些特性,MAXQ2000是MAXQ 系列的第一款微控制器。
本应用采用专用于MAXQ平台的1.12B版IAR编译器编写。
这些指令在后续版本的产品中仍会保留。
这些指令可以在MAXQ2000评估板上执行。
设置MAXQ2000评估板在开始编写代码前,首先连接MAXQ2000评估板。
该评估板应含有3块电路板,其中一个带有小型LCD屏。
最大的那个电路板(图1中连接了LCD子板的)就是MAXQ2000评估板。
我们将在本文后面讨论它的特性。
将LCD板连接至MAXQ2000评估板上标有J3的端子。
图1. 连接有LCD板的MAXQ2000评估板剩下的一块电路板是JTAG板。
MAXQ2000装载器和调试引擎采用JTAG协议通信。
由于很难找到通用的、用于个人计算机的商品化JTAG适配器,Dallas Semiconductor提供了一个串行至JTAG转换板。
评估板还包括了一个小型连接器。
如图2所示,使用该连接器来连接MAXQ2000评估板和JTAG板。
通过电缆将MAXQ2000评估板上标有J4的端子和JTAG电路板上标有P2的端子连接在一起。
注意,连接电缆的红边应在两个板子上的引脚“1”和“2”一侧。
图2. MAXQ2000评估板与JTAG板连接MAXQ2000评估板上有3个跳线。
跳线JU1、JU2和JU3上的引脚1和2应跳接在一起。
此外,确保晶体放置在Y1上(靠近板上的微处理器)。
本应用笔记的演示程序默认晶振频率为13.5MHz。
简述iar工程的相关配置流程及调试过程

简述iar工程的相关配置流程及调试过程标题: 简述iar工程的相关配置流程及调试过程正文:iar(IEEE Instrument for Autonomous and Robotic Systems)是一种自动化机器人系统,其目标是使机器人能够自主地执行任务。
iar工程通常包括以下两个主要部分:机器人硬件和软件。
1. 机器人硬件机器人硬件包括传感器、执行器和控制板等组件。
其中传感器用于感知环境和机器人的运动状态,执行器用于控制机器人的运动和操作,控制板用于控制机器人的电路和系统。
常用的传感器包括红外线传感器、超声波传感器、激光传感器和摄像头等。
执行器通常包括电机、控制器和驱动器等组件。
电机用于驱动机器人的运动,控制器用于控制机器人的行动,驱动器用于控制电机的转速和方向。
常用的执行器包括直流电机、步进电机和舵机等。
控制板通常用于控制机器人的行动和操作。
它通常包括输入输出接口、编程接口和控制器等组件。
编程接口用于编写机器人的程序,控制器用于控制机器人的行动和操作。
2. 机器人软件机器人软件包括控制系统、导航算法和执行算法等组件。
控制系统用于控制机器人的行动和操作,它通常包括输入输出接口、编程接口和控制器等组件。
导航算法用于规划机器人的路径和运动,它通常包括运动规划算法和路径规划算法等组件。
执行算法用于控制机器人的行动和操作,它通常包括电机控制算法、舵机控制算法和传感器数据处理算法等组件。
调试是确保iar机器人系统正常运行的关键步骤。
调试过程通常包括以下步骤:1. 诊断:使用诊断工具检查机器人的硬件和软件是否正常工作。
2. 定位:使用定位工具确定机器人的位置和方向。
3. 仿真:使用仿真工具模拟机器人在不同环境下的行为。
4. 测试:使用测试工具测试机器人的性能和功能。
5. 修复:根据测试结果修复机器人的故障。
6. 调试:根据修复后的机器人进行调试,确保其正常运行。
调试是确保iar机器人系统正常运行的关键步骤。
IAR使用技巧

1、定义太大的RAM,那就有可能会遇到RAM 中定义的变量/数组在超过一定范围的时候,MSP程序不能正常运行的现象。
一般初步判断,可以用I/O 输出电平来确定程序进程.这样可以非常方便的知道该问题是由于WDT 造成的,(RAM 的初始化时间大于WDT 默认的32MS 时间,因此MSP复位)下面来看下解决的办法:A、对数组用__no_init 定义,上电编译器不产生特殊的附加函数去初始化RAM 例:__no_init u8 GprsTXBuf[1000];B 、修改IAR 中Cstartup.S43 文件中__program_start 子程序,增加一个关闭WDT 的操作或者设置WDT 时间长度超过32MS。
(建议不到万不得已,不要改这个文件!)文件地址:IAR Systems\Embedded Workbench 6.0 Evaluation\430\src\lib\430C 、在Project–Options–Linker–Config中选择Override default programe,并将Entry lib 设置成__program_start2、__no_init 是一个SEGMENT,是给LINKER用的,定义到不初始化的块中去。
3、__regvar放置一个变量在工作寄存器中。
4、__root 保证没有使用的函数或者变量也能够包含在目标代码中。
5、在IAR的集成开发环境中实现数据变量定位方法如下三种:①__no_init char alpha @ 0x0200;②#pragma location = 0x0202const int beta;③const int gamma @ 0x0204 = 3;6、在IAR中函数定位有两种写法:void g(void) @ "MYSEGMENT" // MYSEGMENT段可在XCL中编辑开辟{}#pragma location = "MYSEGMENT"void h(void){}。
iar ramfunc原理 -回复

iar ramfunc原理-回复什么是iar ramfunc原理?IAR Embedded Workbench是常用的嵌入式开发环境,它提供了丰富的工具和功能,方便开发者进行嵌入式应用程序的开发和调试。
在IAR Embedded Workbench中,ramfunc是一种特殊的函数属性,用于将函数放置在RAM中,以提高函数的执行效率和响应速度。
一般情况下,编译器会将函数放置在ROM(Read-Only Memory)中,这是因为ROM是一种非易失性存储器,不易被修改,具有较高的稳定性。
然而,从ROM中读取函数指令的速度相对较慢,因此对于一些对执行效率和响应速度要求较高的函数,我们可以使用ramfunc属性将这些函数放置在RAM中。
那么,如何使用iar ramfunc原理呢?在IAR Embedded Workbench中,我们可以使用#pragma语句来设置函数的属性。
下面是一些常用的结构体属性设置:#pragma location = "RAM_SECTION"#pragma section = "RAM_SECTION"首先,我们需要在linker文件中定义一个RAM_SECTION段落,来存放ramfunc属性的函数。
在IAR Embedded Workbench中,linker文件通常具有.lnk的后缀名。
下面是一个简单的linker文件示例:define symbol __ICFEDIT_intvec_start__ = 0x08000000;define symbol __ICFEDIT_region_ROM_start__ = 0x08000400; define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF; define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF;place in ROM_region { readonly };place in RAM_region { section .noinit, section RAM_SECTION };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 = 8 { };define block HEAP with alignment = 8, size = 1024 { };initialize by copy { readwrite };do not initialize { section .noinit };在这个linker文件中,我们定义了RAM_REGION段落,在段落中可以放置ramfunc属性的函数。
iar 代码定位到特定ram段的方法

iar 代码定位到特定ram段的方法
IAR (Image Acquisition and Registration) 是一个用于图像采集和注册的
软件。
如果你想在IAR中定位到特定的RAM段,你可以使用以下方法:
1. 使用地址栏: 在IAR的地址栏中,你可以直接输入你想要访问的RAM地址。
例如,如果你知道一个特定的变量在RAM中的地址是`0x`,你可以在
地址栏中输入这个地址,然后IAR将会定位到这个地址。
2. 使用变量窗口: 如果你的代码中定义了变量,你可以在IAR的变量窗口中找到这些变量,并直接点击它们来查看或修改它们的值。
3. 使用内存视图: 在IAR的内存视图中,你可以看到RAM中的内容。
你可
以通过滚动和搜索来找到特定的数据。
4. 使用搜索功能: 在IAR中,你可以使用搜索功能来查找特定的字符串或值。
在搜索结果中,你可以直接跳转到相应的地址。
5. 使用标签和符号: 如果你的代码中使用了标签或符号,你可以使用它们来
快速定位到特定的代码段。
在IAR的标签或符号窗口中,你可以看到所有的标签或符号,并直接跳转到它们的位置。
注意: 具体的步骤可能会因为IAR的不同版本而有所不同,你应该查看你所
使用的IAR版本的帮助文档以获取更详细的信息。
IAR用法点滴

IAR用法点滴程序固化后运行方式:程序开始运行后需要将RW 和ZI段搬移到RAM中去,程序下载进Flash中以后,上电后是怎样将RW ZI断搬移到RAM中去的?注意IAR和ADS在进行完.s文件的初始化以后都不是直接跳转到main函数去执行,IAR是跳转到?main中而ADS是跳转到__main函数中,在这些函数中根据icf文件的配置,将RW和ZI段搬移到icf文件规定的RAM区域中。
如果程序的运行时域是在片外RAM中,那程序是在什么时候对片外RAM控制器进行初始化呢?因为.s文件的开始部分是CODE RO的,不需要RAM空间,所以可以在.s文件中对片外RAM进行配置。
还有一个问题,这个问题是在硬件设计时必须注意的,如果需要程序固化在外部Flash中,必须注意外接的Flash必须是片子上电后默认片外总线就支持的片子。
程序在RAM中调试的运行方式为了调试的方便,程序有时候是不需要下载进flash进行调试,而是直接在RAM 中运行,将icf文件中的ROM 和RAM地址都设成硬件RAM的地址,将Flashloader 的使能关掉,那么程序就运行在RAM中了。
但是问题又产生了,因为有时我们想在外部RAM 中调试代码,所以片外RAM控制器需要在代码下载进RAM之前进行初始化,怎么能够实现呢?IAR是通过.mac文件实现的。
在程序下载之前先执行了。
mac文件中的程序,下面是一个例子execUserFlashInit(){__writeMemory32(0x1000ffef, 0xffe00000 , "Memory");__writeMemory32(0x0f000114, 0xE002C014, "Memory");}该例子是lpc初始化外部RAM的例子。
配置好了外部RAM就可以在里面跑代码了。
程序的IAR下载1.文件在片内Flash中下载运行这是最简单也是最常用的方式,一般的ARM芯片都会带有片内Flash,IAR会通过Flashloader将二进制的可执行文件下载到Flash中。
IAR软件错误调试

使用IAR时遇到的一些Error、Waring/sendoc/blog作为菜虫,在使用IAR的时候编写CC2430、、Z-Stack2006程序会遇到如下一些错误,当然随着学习的深入,我会持续更新。
1Q:Error[e16]: Segment XDATA_Z (size: 0x19a1 align: 0) is too long for segment definition. At least 0xe4c more bytesneeded. The problem occurred while processing the segment placement command"-Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END", where at the moment ofplacement the available memory ranges were "XDATA:f1ff-fd53"Reserved ranges relevant to this placement:XDATA:f000-f1fe XSTACKXDATA:f1ff-fd53 XDATA_NBIT:0-7 BREGBIT:80-97 SFR_ANBIT:a8-af SFR_ANBIT:b8-c7 SFR_ANBIT:d8-df SFR_ANBIT:e8-ef SFR_ANA:其实这个问题并不是你的程序本身有问题,主要是因为你编写的程序太大了,超出了芯片本身的定义。
今天在群里学习了一招,就是将数组定义到code里,我们看一下例子。
我们定义一个5100个元素的数组,有以下两种方法:mermaid提出的方法是:typedef unsigned char const __code INT8U;extern INT8U shuzi[5100];文晶提出的方法是INT8U code shuzi[5100];这两种方法其实效果是一致的,定义完数组之后,调用的部分就是需要用指针来调用数组里面的数值了。
在Flash和RAM中仿真时IAR的设置

以上所有资料为力天电子(LT)版权所有
2
中断程序在 flash 中仿真问题的解决
在 FLASH 中仿真,IAR 软件的设置如下所示: 注意两者的主要差别有两点 1、在 link—》Config 中,RAM 仿真时,需要选择 LPC2103_RAM.xcl 文件 FLASH 仿真时,需要选择 LPC2103_flash.xcl 文件 2、在 Debugger—》Download 中,RAM 仿真时,4 个选项都不用勾选, FLASH 仿真时,需要勾选 Verify download 和 Use flash loader
中断程序在 flash 中仿真问题的解决 修改记录
文件名 拟制人/ 版本号 拟制/修改日期 修改人 叶红渝 2011-03-11 1.0 更改理由 主要更改内容 (写要点即可)
以上所有资料sh 中仿真问题的解决 在 RAM 中仿真时,IAR 软件的设置如下所示:
iar软件仿真iar仿真iar设置栈大小iar不能设置断点flashramramromflashram和flash实达200仿真设置
技
术
文
件
技术文件名称:在 Flash 和 RAM 中仿真时 IAR 的设置 技术文件编号:<V1.0> 版 本:<V1.0>
拟 制 审 核 批 准
叶红渝 张 勇
力天电子
以上所有资料为力天电子(LT)版权所有
3
中断程序在 flash 中仿真问题的解决
以上所有资料为力天电子(LT)版权所有
4
新版IAR调试查看寄存器方法

新版IAR调试查看寄存器方法 今天写两个后台问的较多的问题,如标题所示: 1.新版IAR调试查看寄存器问题; 2.STM8代码大小优化问题; 1新版IAR调试查看寄存器问题 从去年上半年开始,IAR将各开发环境逐渐进行了大升级,首先是将EWARM从V7升级到了V8。
然后,陆续将EW430、EWAVR等进行了升级。
什幺是新版IAR?图标是黑色那种,如EWARM V8.2、EWSTM8 V3.1。
如下图: 老版本IAR,扳手工具图标。
如下图: 许多小伙伴安装了新版的IAR,不管是EWARM、EW430还是EWSTM8,都出现了一个问题:调试时,“不能”查看外设寄存器了。
如下面动画,查看了各主菜单,以及View视图各个子菜单,都没有如之前那种可以直接查看寄存器的窗口: 而老版本就会有如下图可以直接查看寄存器的窗口: 说实话,我这一年很多时间都是在写业务逻辑相关的代码,这个功能这一年没去在意过。
很多朋友在后台问我,我也没抽时间去研究。
这不前面写了一篇在较小资源上跑一个实时操作系统,后台有朋友问了该如何优化代码,我大概回答了一点可以优化标准外设库为操作寄存器,所以使用到了该功能,所以我就抽时间看了一下这个功能。
好了,不卖关子了,直接说答案吧,操作基本一样,只是新版IAR隐藏了下拉选项。
直接看下图你就会明白。
新版IAR调试查看寄存器方法 进入调试模式-> View -> Registers(1-4都行) -> CPU Register右键-> View Group,此时你就可以选择了,如下图: 相信到这里,你不可能不会了。
2 STM8代码大小优化问题 因为前面写了一篇文章《一款可以在STM8上运行的实时操作系统Atomthreads》,很多朋友问,像8K的FLASH资源跑一个系统,写点应用程序都用完了。
既然使用STM8可以跑系统,资源的问题肯定有关系。
但如果你选定了该芯片,想办法或许是可以解决的呢。
IAR EWARM SW调试

{
//extern int putchar(int c);
if (str) {
**str = (char)c;
++(*str);
}
else
{
//(void)putchar(c);
(void)ITM_SendChar(c);
//输出到 swo
}
}
注意加上头文件,实际上是需要 core_cm3.h 头文件:
/~derelict/snippets.html
/~derelict/snippets.html 下载 printf_stdarg.c 或者 printf2.c 修改 printchar 函数
static void printchar(char **str, int c)
J-Link (20 Pin)引脚序号
PA13
SWDIO
7
PA14
SWCLK
9
PB3
PF1
13
RESET
RESET
15
注:本人实践中,stm32 的调试口 RESET 可以不使用。
二ቤተ መጻሕፍቲ ባይዱ 调试环境设置
1、 在 IAR Embedded Workbench IDE 中,打开 Project>options,在 General Options>Library Configuration 页面选中 Semihosted 和 Via SWO。
为了在调试过程中,打印输出调试信息,而在正式发布烧入产品时去掉打印输出调试信 息,从而最大减少代码,最好的办法是使用宏定义。在调试时,定义 DEBUG 宏,正式发布 时去掉 DEBUG 宏定义。
#ifdef DEBUG
IAREWARM软件软件配置

IAREWARM软件软件配置IAR EWARM软件集成环境编译链接1.问:同一Workspace下的多个Project之间有无关系?答:没有。
在同一Workspace下可以放置多个Project,但每个Project都是独立被Build的,在编译链接的时候没有相互影响。
2.问:如何生成其它格式的输出文件?答:IAR EW的链接器(IXLINK)缺省情况下输出的文件格式是ELF/DWARF,这种格式与其他的支持ELF/DWARF的开发工具兼容。
如果同时还想得到其它格式的输出文件(Motorola, Intel extended,binary, simple),可以通过Output Converter进行设置:3.问:如何生成Linker List文件?答:Option->Category->Linker下,选中Generate Linker map file选项。
4.问:如何处理多字节字符?答:在配置窗口中Option->Category->C/C++ Compiler下,选中“Enable multibyte support”,允许目标程序使用与主机相一致的多字节编码:5.问:如何在编译生成的目标文件中包含调试信息?答:如果在调试时只能看见反汇编代码,而看不到C/C++或汇编源代码,可能是因为在编译时未包含调试信息。
6.问:如何添加头文件的搜索路径?答:$PROJ_DIR$ 工程文件所在的目录,$TOOLKIT_DIR$ IAR EW软件安装到的目录。
7.问:如何平衡速度优化和尺寸优化?答:使用编译器优化选项可以设置整个项目的优化级别(例如:minimal code)。
也可以为不同的文件或者文件组设置优化级别(例如:对time-critical的代码设置优化级别为maximum speed)。
使用“#pragma optimize”指令可以为特定的函数设置优化级别。
请参考EWARM_DevelopmentGuide.pdf。
IAR数据存储及格式转换使用说明

IAR数据存储及格式转换使用说明1、打开IAR程序。
找到记录区变量名字,如下图所示:变量名:rec,地址0x00100000(Location栏显示).2、输入记录RAM地址和选择保存RAM数据。
打开Memory窗口(在系统菜单View下)。
在Go to处输入需要记录的变量地址,然后按回车键。
如下图所示:然后单击右键。
选择Memory Save.3、保存RAM数据的区域在执行上一个操作后,系统将弹出记录数据的存储窗口。
如下图所示:注意:在这里,需要填写的地址有Start address(记录开始地址)和End address(记录结束地址)。
Start address的默认地址是以鼠标所在位置自动填写的一个数。
并不一定是你所想记录的地址。
所以,一定要输入刚才Go to的那个地址。
End address则根据记录数据的大小而定。
填写完成后,选择Save即可。
4、查看RAM记录文件通过上步操作后,IAR会在工程所在目录下,新增一个Memory.hex的文件。
如下图所示:确定文件已经生成。
5、打开转换软件打开专用转换软件,将弹出一个选择对话框,如下图所示:在这个软件里面,设定了输出格式如下:1、输出数据的长度。
目前支持8位和16位两种。
2、输出数据的数据格式,目前支持十六进制和十进制。
3、输出数据的类型,支持有符号和无符号两种。
4、每次转换成的TXT每行显示多少个数据可以设定(每行显示个数)。
根据想要转换的输出格式,对应的设定上面的菜单。
6、选择转换文件在设定好输出格式以后,单击“文件转换”。
在弹出的对话框内,找到需要处理的文件。
然后点击“打开”即可。
由于文件一般都比较小。
所以转换速度非常快。
点完打开后,马上就可以在源文件相同的目录下,生成一个同样名字的TXT文档。
7、用EXCEL打开文件打开EXCEL后,选择打开文件,在打开文件的窗口对话框中,选择文件类型为:所有文件。
然后,找到TXT文件后,选择打开。
iar ramfunc原理 -回复

iar ramfunc原理-回复iar ramfunc原理是指在嵌入式系统中使用iar编译器对函数进行特殊标记,将其放置在RAM中运行的机制。
在嵌入式系统中,内存资源通常较为有限,因此如何优化内存使用成为了一项重要的任务。
iar ramfunc机制通过将特定函数放置在RAM中运行,可以提高系统的运行效率和响应速度。
为了更好地理解iar ramfunc原理,首先需要了解编译器中内存的分配和函数调用的过程。
在编译器进行编译时,会将函数的代码生成为可执行文件,其中包含了函数的二进制指令和相关的数据。
在运行时,系统会将这些函数从Flash存储器中加载到RAM中,并按照函数调用的指令进行执行。
然而,有些函数在运行过程中频繁地被调用,或者需要更快地响应系统的事件。
由于Flash存储器的读取速度较慢,导致这些函数的执行效率较低,严重影响了系统的性能。
为了解决这个问题,iar ramfunc机制被引入。
iar ramfunc机制的核心思想是将特定函数标记为ramfunc,以告知编译器将其放置在RAM中执行。
这样一来,在编译时,编译器会根据特定的规则将被标记的函数放置在RAM的特定区域。
这个过程称为函数的属性设置。
通过这种方式,函数在运行时不需要从Flash中加载,而是直接从RAM中执行,从而提高了函数的执行速度和效率。
在使用iar ramfunc机制时,有几个需要注意的地方。
首先,由于函数被放置在RAM中,需要确保RAM的容量足够存放这些函数。
如果RAM的空间不足,编译器会给出相应的错误提示。
其次,被标记的函数不能包含任何对地址的引用,因为在运行时函数的位置是未知的,会导致地址引用的失效。
最后,由于用于存放函数的RAM区域是不可执行的,因此iar 编译器会自动地生成一个trampoline函数来间接地调用被标记的函数。
除了将函数放置在RAM中执行外,iar ramfunc机制还可以实现其他一些优化,例如将一些常用的代码片段缓存在RAM中,以提高其执行效率。
用 IAR+JLINKv5调试mini2440详细步骤

用 IAR+JLINKv5 建立环境调试 mini2440本文档主要讲述如何设置IAR+JLINKv5为mini2440建立调试环境,还有怎么将标准输入输出流重定位,花了大半天的时间去调试,基本已经组建完毕。
系统时钟设置为 FCLK : HCLK : PCLK = 400MHZ : 100MHZ : 50MHZSDRAM控制器配置为 100MHZ时的刷新率串口设置为 :115200 8N1Etual2010‐1‐151.1 JLINK转接原理图 (2)1.2 Jlink的设置 (2)1.3 建立基本的调试环境 (3)1.4调试程序的原理和办法 (4)1.5重定位输出流 (6)附录:Setup2440.mac注释 (7)1.1 JLINK转接原理图1.2 Jlink的设置如果开发板使用的是20PIN标准的JTAG口的话,可以直接连,不过我使用的是 mini2440,jtag 口为 2.0mm间距的 10pin插口,所以要自己连线转换。
如果买的 Jlink V7 ,其中一个版本是已经带了3条JTAG转换线的了,可以直接使用,不需要看下图的连线,建议买那种。
我是以前买的 v5版本的,需要自己做,具体的电路图参看附件,其实说白了就是对应的信号线直接连上,不过注意一点的是,11脚 RTCK,参考jlink的说明文档,如果这个功能没有使用的话应该接地,我当初就是悬空了所以死活连不上。
Jlink的参考电压来自开发板的 3.3V ,所以开发板需要上电。
运行 JFlashARM.exe ,在菜单 Target‐>connect 看是否正确的链接,当然你也可以运行 Jlink.exe ,正常的情况,应该能检测到 ARM core。
‐ J‐Link firmware: V1.20 (J‐Link compiled Jul 30 2008 11:24:37 ARM Rev.5)‐ JTAG speed: 10 kHz (Fixed)‐ Initializing CPU core (Init sequence) ...‐ Initialized successfully‐ JTAG speed: 8000 kHz (Auto)‐ J‐Link found 1 JTAG device. Core ID: 0x0032409D (ARM9)‐ Reading CFI info ...‐ CFI info read successfully‐ Detecting flash memory ...‐ Flash memory detected successfully‐ Connected successfully不要涉及太多的命令,底层的东西让调试器自己去处理,我们使用RDI模式,配合 IAR的 C‐SKY 调试器就OK了。