跳转到主要内容

IAR相关

IAR-C中实现IO端口直接位定义操作的一个示例

kelly /

IAR-C有着强大的软件仿真功能,但其中的寄存器位操作定义却十分烦琐,并且编译后生成的ASM代码冗余较多,针对该问题,版主自已定义一个位操作定义的方法,初学者可参考定义,并且该种方法可应用于所有寄存器位操作定义。

共实现置位--Set_Bit, 清位--Clr_Bit,取反位Com_Bit,测试位Test_Bit四种位操作功能,并且每条位操作定义仅需一条3字节的ASM指令序列即可,简便直接。

//*****************************************************

//P00位操作定义

#define Set_P00 (P0 = P0 | 0x1)

#define Clr_P00 (P0 = P0 & ~0x1)

#define Com_P00 (P0 = P0 ^ 0x1)

#define Test_P00 (P0 & 0x1)

//P01位操作定义

#define Set_P01 (P0 = P0 | 0x2)

#define Clr_P01 (P0 = P0 & ~0x2)

#define Com_P01 (P0 = P0 ^ 0x2)

IAR程序下载与运行方式

kelly /

<strong>(一)程序固化后运行方式:</strong>

程序开始运行后需要将RW 和ZI段搬移到RAM中去,程序下载进Flash中以后,上电后是怎样将RW ZI断搬移到RAM中去的?注意IAR和ADS在进行完.s文件的初始化以后都不是直接跳转到main函数去执行,IAR是跳转到?main中而ADS是跳转到__main函数中,在这些函数中根据icf文件的配置,将RW和ZI段搬移到icf文件规定的RAM区域中。

如果程序的运行时域是在片外RAM中,那程序是在什么时候对片外RAM控制器进行初始化呢?

因为.s文件的开始部分是CODE ROM的,不需要RAM空间,所以可以在.s文件中对片外RAM进行配置。

还有一个问题,这个问题是在硬件设计时必须注意的,如果需要程序固化在外部Flash必须注意外接的Flash必须是片子上电后默认片外总线就支持的片子。

<strong>(二)程序在RAM中调试的运行方式</strong>

为了调试的方便,程序有时候是不需要下载进flash进行调试,而是直接在RAM中运行,将icf文件中的ROM 和RAM地址都设成硬件RAM的地址,将Flashloader的使能关掉,那么程序就运行在RAM中了。

IAR集成开发环境如何设置堆栈大小

kelly /

GCC和IAR分配堆栈的方式不同,IAR先分配堆栈空间,相当于定义一个全局数组为堆栈空间,堆栈初始为堆栈空间最高地址;GCC不用先分配堆栈,自动把RAM剩余空间作为堆栈空间,堆栈初始为RAM最高地址。
 
初学者很容易忽视这个问题,造成程序跑飞而找不到问题的症结,我在用IAR For MSP430的时候没遇到过这个问题,因为MSP430的RAM比较大,IAR默认是80字节,足够一般程序使用。 

但是使用IAR For SAM8的时候,有一个比较耗费堆栈的程序运行一段时间后出问题,由于要记录一个24小时的数组,而数组元素的值是在堆栈里改变的,所以,记录到一定时间以后,出现了堆栈不足的情况,初学者如果没有仿真器,是很难发现这个问题的,还好我用的仿真器在Debug的时候出现了堆栈不足的警告,我才意识到是这里问题。 

IAR For SAM8默认堆栈是32字节,既然不够用,那么就要增大,但是设置到多少合适呢? 首先编译你的程序,看程序用了多少自己的RAM,

IAR for arm 中断处理写法

kelly /

<strong> 方法1:</strong>

启动文件中:(默认启动文件也是这样)

org 0x18
ldr pc,[pc,#-0xFF0] ; 直接跳转到用户中断处理函数

直接写用户中断函数
__irq __arm void Tmr0_IntOnMR0_isr(void)
{
............
}

__irq __arm void Tmr1_IntOnMR0_isr(void)
{
............
}

<strong> 方法2:</strong>

启动文件中:(默认启动文件也是这样)

org 0x18
ldr pc,=irq_handler ;跳转到公共中断处理函数,再分支到具体功能的中断处理函数中

__irq __arm void irq_handler (void)//公共中断处理函数,检查VICVectAddr是否为空
{
void (*interrupt_function)();
unsigned int vector;

【下载】IAR 使用详解

kelly /

<strong>第一部分产品介绍</strong>

AVR® IAR Embedded Workbench® IDE用户手册的这部分包括以下章节:

产品介绍

已安装文件

<strong>1.1产品介绍 </strong>

嵌入式IAR Embedded Workbench®是一个非常有效的集成开发环境(IDE),它使用户充 分有效地开发并管理嵌入式应用工程。作为一个开发平台,它具备任何在用户每天的工作地方所想要的特性。

本章介绍了嵌入式IAR Embedded Workbench IDE,旨在使用户获得对本产品的所有集成工具的总体了解。

<strong>1.1.1嵌入式IAR Embedded Workbench IDE </strong>

嵌入式IAR Embedded Workbench IDE提供一个框架,任何可用的工具都可以完整地嵌入其中,这些工具包括:

高度优化的IAR AVR C/C++编译器;

AVR IAR汇编器;

通用IAR XLINK Linker;

IAR-EW430开发工具使用指南

editor /

<strong> ► IAR EW430总体介绍</strong>

瑞典IAR System公司推出的IAR EW软件是一种非常有效的嵌入式系统开发工具,它使用户能够充分有效地开发并管理嵌入式应用项目,其界面类似于MS Visual C++,可以在Windows平台上运行,功能十分完善。包含有源程序文件编辑器,项目管理器,源程序调试器等,并且为C/C++编译器,汇编器,连接定位器等提供了单一而灵活的开发环境。源级浏览器功能可以快速浏览源文件;还提供了对第三方工具软件的接口,允许启动用户指定的应用程序。

IAR EW适用于开发基于8位,16位以及32位的处理器的嵌入式系统,其具有同一界面,用户可以针对多种不同的目标处理器,在相同的集成开发环境中进行基于不同CPU嵌入式系统应用程序的开发。另外IAR的链接定位器(XLINK)可以输出多种格式的目标文件,使用户可以采用第三方软件进行仿真调试。

Keil MDK 和 IAR 两款ARM开发工具区别比较

editor /

首先要说明,没有哪款开发工具是万能的,也没有哪款工具在所有方面都具有绝对优势。对于Keil MDK-ARM和IAR两款工具择,可以根据自己的习惯来选择,而不应该在使用其中的一款时贬低另外一款,或者总是赞美自己的选择。

好了,下面开始讲Keil MDK-ARM和IAR的区别。

<strong>一、概述</strong>

Keil MDK-ARM(旧称RealView MDK)开发工具源自德国Keil公司,被全球上百万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。

KEIL MDK集成了业内最领先的技术,包括uVision3、uVision4、uVision5集成开发环境与 ARM编译器。支持ARM7、ARM9、Cortex-M0、Cortex-M0+、Cortex-M3、Cortex-M4、Cortex-R4内核核处理器。