×
单片机 > 单片机程序设计 > 详情

Linux下的avr系列的编译烧录调试方法

发布时间:2024-05-19 发布时间:
|

本文环境如下:


OS系统:ubuntu 12.04(原为10.04最近升级了)


编译器 :avr-gcc


烧录软件 :avrdude


调试软件:avarice ,GDB和ddd (可视界面)


开发板:


1.xplain(xmega128a1)无法调试,只能烧录,因为官方没有公开其调试的协议。


2.Mega16开发板。


仿真器or烧录器:dragon和usbasp(使用较多)


程序编写:Vim(升级版的记事本,很好用,很推荐)


关于使用前的准备和说明


至于为什么要使用linux下开发avr,原因主要是因为比较有趣。其次便是win下的环境用起来其实并不是很方便。IAR是付费软件(但是的确好用),Avr-studio虽然是免费版,不过优缺点是太过庞大,并且是以vc2010为基础开发,这个也就算不上真正的免费了。至于win-avr其实蛮不错的。win下也可以搭建如下环境。


准备:


软件安装,软件安装建议使用ubuntu的软件中心,比较方便。需要avr-gcc,avrdude,avarice,gdb,ddd即可了。文本编辑什么都行。可以集成在codeblocks和eclipse里面。Codeblocks如此做用起来感觉不错,eclipse需要配置,但原理都是一样的。


对于命令行可以如下安装


sudo apt-get install gcc-avrbinuilts-avr avr-libc

sudo apt-get installvim

sudo apt-get installavrdude


强烈建议顺便安上手册


sudo apt-get installavrdude-doc

sudo apt-get installavarice

sudo apt-get installgdb

sudo apt-get installddd


然后就都安装完毕了。下一步就可以开始了。

开始之前需要先写一个.c的程序


代码会在文章最后和附件里提出。这是一个很简单让一个led亮的程序。


之后介绍一个makefile的东西,此物是简化操作流程的一个东西。让敲好多行命令才能完成的只需简单的一句话就行了。附件里会包含一个makefile的模板,是winavr下模板改的可用版。具体的内容是如何实现的,可以翻阅官方makefile手册和百度,谷歌。


简单介绍Makefile里面的几个命令,有过经验可以无视


AVRDUDE_PROGRAMMER = usbasp

#dragon_jtag

AVRDUDE_PORT = usb # programmer connected to serial device

AVRDUDE_WRITE_FLASH = -Uflash:w:$(TARGET).hex

AVRDUDE_FLAGS = -p $(MCU) -P$(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)

AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)

AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)

AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)


上面这些都是定义变量,makefile里的


program: $(TARGET).hex $(TARGET).eep

$(AVRDUDE)$(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)


当我们输入make program时就会执行上面这句之前的都不用关心了。翻译过来就变成了(如果叫main.hex)


avrdude -P usb -p m16 -c usbasp -U flash:w:main.hex

就是说用usb下的usbasp烧录m16的flash,内容为main.hex


如果用dragon的话一般用jtag就是-c dragon_jtag。具体可以查看avrdude手册。


了解之后先打开终端,找到.c文件目录下。Makefile文件放在同一目录下


根据需要更改其内容


输入make

便会输出一些信息,最后会有提示编译成功


之后就可以烧录了


烧录之前看一下烧录器是否在


输入lsusb

显然,usbasp存在。那么输入sudo make program

会在很快的时间内烧录成功,比win快的多。最后提示你烧录成功

至于debug,usbasp没有这个功能。需要用dragon的jtag。


住:Debug其实不是很推荐使用,虽然比较高效,建议利用串口的信息输入输出(以后会介绍),这是因为在进入系统的嵌入后,常规的debug经常会无法使用。


实际的命令会是


avarice -g -j usb --erase --program --filemain.hex :4242


不过如果makefile里已经写好的话直接输入sudo make debug就可以了


下面为命令的结果

现在属于等待GDB,可视化的话就是DDD的状态中了


比如在gdb.conf中添加


file main.elf


target remotelocalhost:4242


启动DDD


ddd–-debugger “avr-gdb -x gdb.conf”

也可以手起动,然后配置,ui界面比较友好。


还有一句话。makefile里面已经把上步骤都做好了~当然会根据需求要求更改的。尤其是debug的时候。


总结:本文所说有些简略了,Linux开发的困难主要在于搭建环境,因此需要多看一下相关的官方手册。


测试代码:


main.c


// avr-gcc application builder : 2011-11-1

// Target : M16

// Crystal: 12.000Mhz

#include

#include

#define SET(a,b) a|(1<

#define CLR(a,b) a &~(1<

void port_init(void)

{

DDRA = 0xff;//将PA0定义为输出

PORTA = 0xff;

PORTB = 0x00;

DDRB = 0x00;

PORTC = 0x00; //m103 output only

DDRC = 0x00;

PORTD = 0x00;

DDRD = 0x00;

}

//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

//CLI(); //disable all interrupts

port_init();

MCUCR = 0x00;

GICR = 0x00;

TIMSK = 0x00; //timer interrupt sources

// SEI(); //re-enable interrupts

//all peripherals are now initialized

}

//

void main(void)

{

init_devices();

//insert your functional code here...

PORTA = CLR(PORTA,3);

while(1); //程序挂起

}

Makefile:



# Hey Emacs, this is a -*- makefile -*-

#----------------------------------------------------------------------------

# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.

# Linux GCC using is changed by Galaxy2416

# Released to the Public Domain

#

# Additional material for this makefile was written by:

# Peter Fleury

# Tim Henigan

# Colin O'Flynn

# Reiner Patommel

# Markus Pfaff

# Sander Pool

# Frederik Rouleau

# Carlos Lamas

#

#----------------------------------------------------------------------------

# On command line:

#

# make all = Make software.

#

# make clean = Clean out built project files.

#

# make coff = Convert ELF to AVR COFF.

#

# make extcoff = Convert ELF to AVR Extended COFF.

#

# make program = Download the hex file to the device, using avrdude.

# Please customize the avrdude settings below first!

#

# make debug = Start either simulavr or avarice as specified for debugging,

# with avr-gdb or avr-insight as the front end for debugging.

#

# make filename.s = Just compile filename.c into the assembler code only.

#

# make filename.i = Create a preprocessed source file for use in submitting

# bug reports to the GCC project.

#

# To rebuild project do "make clean" then "make all".

#----------------------------------------------------------------------------



# MCU name

MCU = atmega16

#atxmega128a1



# Processor frequency.

# This will define a symbol, F_CPU, in all source code files equal to the

# processor frequency. You can then use this symbol in your source code to

# calculate timings. Do NOT tack on a 'UL' at the end, this will be done

# automatically to create a 32-bit value in your source code.

# Typical values are:

# F_CPU = 1000000

# F_CPU = 1843200

# F_CPU = 2000000

# F_CPU = 3686400

# F_CPU = 4000000

# F_CPU = 7372800

# F_CPU = 8000000

# F_CPU = 11059200

# F_CPU = 14745600

# F_CPU = 16000000

# F_CPU = 18432000

# F_CPU = 20000000

F_CPU = 8000000



# Output format. (can be srec, ihex, binary)

FORMAT = ihex



# Target file name (without extension).

TARGET = main



# Object files directory

# To put object files in current directory, use a dot (.), do NOT make

# this an empty or blank macro!

OBJDIR = .



# List C source files here. (C dependencies are automatically generated.)

SRC = $(TARGET).c


# List C++ source files here. (C dependencies are automatically generated.)

CPPSRC =



# List Assembler source files here.

# Make them always end in a capital .S. Files ending in a lowercase .s

# will not be considered source files but generated files (assembler

# output from the compiler), and will be deleted upon "make clean"!

# Even though the DOS/Win* filesystem matches both .s and .S the same,

# it will preserve the spelling of the filenames, and gcc itself does

# care about how the name is spelled on its command-line.

ASRC =



# Optimization level, can be [0, 1, 2, 3, s].

# 0 = turn off optimization. s = optimize for size.

# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)

OPT = s



# Debugging format.

# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.

# AVR Studio 4.10 requires dwarf-2.

# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.

DEBUG = dwarf-2



# List any extra directories to look for include files here.

# Each directory must be seperated by a space.

# Use forward slashes for directory separators.

# For a directory that has spaces, enclose it in quotes.

EXTRAINCDIRS =



# Compiler flag to set the C Standard level.

# c89 = "ANSI" C

# gnu89 = c89 plus GCC extensions

# c99 = ISO C99 standard (not yet fully implemented)

# gnu99 = c99 plus GCC extensions

CSTANDARD = -std=gnu99



# Place -D or -U options here for C sources

CDEFS = -DF_CPU=$(F_CPU)UL



# Place

[1] [2] [3]
Linuxavr系列编译烧录调试方法

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会