文档库

最新最全的文档下载
当前位置:文档库 > 从ICC AVR 到 Atmel Studio 6

从ICC AVR 到 Atmel Studio 6

以前一直在用ICCAVR 感觉生成文档方便,现在发现了Atmel Studio 6, 因为偶尔会用C#(VS2010)所以一下子就喜欢上了这个编译器,我只用8bit 的AVR 另外也是刚刚接触,所以在移植过程中会遇到各种问题,以下是自己的一些问题写出来共大家参考;

1.MCU必须的头文件

例如在ICC AVR(以下简称ICC)中使用#include 或#include ,要根据不同的mcu 型号选择头文件。而在Atmel Studio 6 (以下简称AS6)中统一用#include 。(ICC AVR 7 的版本中也可以用统一的头文件了)

2.头文件

在ICC 中,头文件包含#include 。在AVRdef.h 中,宏定义了一些常用的汇编指令和一些不常用的函数。例如:(详细内容请参考ICC 安装程序中AVRdef.h)

#define WDR() asm("wdr")

#define SEI() asm("sei")

#define CLI() asm("cli")

#define NOP() asm("nop")

#define SLEEP() asm("sleep");

#define _WDR() asm("wdr")

#define _SEI() asm("sei")

#define _CLI() asm("cli")

#define _NOP() asm("nop")

#define _SLEEP() asm ("sleep");

#define BIT(x) (1 << (x));

在AS6 中,你可以直接使用asm("xxx")格式.或者用小写的sei();(当然要包含相应的头文件);

Ps:如果移植ICC的代码比较麻烦,可以将这些宏命令添加到一个总的头文件(include.h) 中,所有c 文件都引用include.h,那么在移植过程中,将不需要修改代码。

3.延时函数

在ICC中,delay延时函数,需要自己写,往往不准。而在AS中,只需要加载一个头文件#include ,就可以使用两个标准的延时函数,分别是_delay_ms(double __ms)和_delay_us(double __us),虽然参数为double型,但可赋整型值。注意在调用前定义#define F_CPU 16000000UL(我也不知道为什么要加UL),这样延时10ms的函数写为_delay_ms(10)。

4.中断函数

例如T0 溢出中断,在ICC 中如下定义:

#pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF

void timer0_ovf_isr(void) {…}

timer0_ovf_isr 这个函数名是自定义的。

而在A6中,需加载头文件#include ,并且函数名为ISR,不可自定义函数名,格式如下:ISR( TIMER0_OVF_vect )

{…}

TIMER0_OVF_vect 含义同iv_TIMER0_OVF ,是T0溢出中断号。不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iomXXX.h中查找。

5.EEPROM操作函数

在ICC中加载头文件#include 后,可以使用如下两个读写函数:

EEPROM_read(addr, var); //读EEPROM中的一个字节

EEPROM_write (addr, var); //向EEPROM中写入一个字节

在AS6中,加载头文件#include 后,可以使用如下两个读写函数:

_EEGET(var, addr) ; //读EEPROM中的一个字节

_EEPUT(addr, var) ; //向EEPROM中写入一个字节

Ps:为了移植时不修改代码,我的做法是在总的头文件(include.h)中添加以下宏定义:

#define EEPROM_read(addr, var) _EEGET(var, addr)

#define EEPROM_write (addr, var) _EEPUT(addr, var)

6.定义数据在flash区

主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少data区的使用,不至于使data 区溢出.在ICC中,用const关键字定义变量,并在ICC软件设置项中,勾选treat "const" as __flash 即可。

在AS6中,需加载头文件#include ,然后用PROGMEM

举例说明:

PROGMEM const unsigned char flash[10];在flash区声明一个unsiged char型的数组,成员个数10。

unsigned char a;

a = pgm_read_byte(flash[0]); 把flash [0]值赋给变量a。而a = flash[0]是不会从flash区读数据的,而是

读data区的数据。

二维数组:

PROGMEM const unsigned char flash[3][10]={……};

指针数组:

PROGMEM const unsigned char* const flash[3]={……};

AtmelStudio-6.0简易入门教程(精炼实用)
下面介绍一些使用 atmelstudio6.0 需要注意的一下事项。这些事项很重要,不然会导致你无法 编译成功,这些事项其实是从网上一篇文章《从 ICC AVR Atmel Studio 6......
AVR+ICC+与AVR+STUDIO+使用说明
如果你还没有配置好开发环境,请参看: AVR 开发环境 ICC+AVRstudio 配置 。 第一部分: 1、关于窗口设置: [如图] 如上图:这是 ICC avr 6.31 版本的窗口,......
ICC_AVR_过渡到_AVR_STUDIO时要注意的几个问题
AVR STUDIO 更改为“#include <avr/io.h>”在 ICC 中使用不同 MCU 的头文件是不同的,在 AVR studio 中所有 MCU 的头 文件都用“#include <avr/io.h>”......
AVR-ICC编制调试程序步骤
有两种途径实现 AVR STUDIO 中仿真调试 ICC AVR 程序。 第一种途径:在 ICC AVR 中编程,在 AVR STUDIO 中调试,编程和调试分离。 第一步:在 ICC AVR 中编辑......
ICCAVRAVR Stdio之间的转化
列出ICC AVR 过渡 AVR STUDIO 时要注意的几个问题 1.头文件更改 1.头文件更改 使用的是“#include ICCAVR 使用的是“#include <iom16v.h>” 更改为“#......
AVRstudio 软(硬)件仿真步骤
软件用的是 ICCV7 for AVRAVR studio 4 在 ICCAVR 中,建好工程,加载好文件,需要软件仿真,在编译之前,所做工作如下: 1. 设置 Compiler Options ,点击,......