历史上的今天
今天是:2025年03月31日(星期一)
2020年03月31日 | Linux下的avr系列的编译烧录调试方法
2020-03-31 来源:eefocus
本文环境如下:
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 -D or -U options here for ASM sources ADEFS = -DF_CPU=$(F_CPU) # Place -D or -U options here for C++ sources CPPDEFS = -DF_CPU=$(F_CPU)UL #CPPDEFS += -D__STDC_LIMIT_MACROS #CPPDEFS += -D__STDC_CONSTANT_MACROS #---------------- Compiler Options C ---------------- # -g*: generate debugging information # -O*: optimization level # -f...: tuning, see GCC manual and avr-libc documentation # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing CFLAGS = -g$(DEBUG) CFLAGS += $(CDEFS) CFLAGS += -O$(OPT) CFLAGS += -funsigned-char CFLAGS += -funsigned-bitfields CFLAGS += -fpack-struct CFLAGS += -fshort-enums CFLAGS += -Wall CFLAGS += -Wstrict-prototypes #CFLAGS += -mshort-calls #CFLAGS += -fno-unit-at-a-time #CFLAGS += -Wundef #CFLAGS += -Wunreachable-code #CFLAGS += -Wsign-compare CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) CFLAGS += $(CSTANDARD) #---------------- Compiler Options C++ ---------------- # -g*: generate debugging information # -O*: optimization level # -f...: tuning, see GCC manual and avr-libc documentation # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing CPPFLAGS = -g$(DEBUG) CPPFLAGS += $(CPPDEFS) CPPFLAGS += -O$(OPT) CPPFLAGS += -funsigned-char CPPFLAGS += -funsigned-bitfields CPPFLAGS += -fpack-struct CPPFLAGS += -fshort-enums CPPFLAGS += -fno-exceptions CPPFLAGS += -Wall CPPFLAGS += -Wundef #CPPFLAGS += -mshort-calls #CPPFLAGS += -fno-unit-at-a-time #CPPFLAGS += -Wstrict-prototypes #CPPFLAGS += -Wunreachable-code #CPPFLAGS += -Wsign-compare CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
下一篇:ATmega8熔丝设置
史海拾趣
|
提出的选择原则是将电机特性与负载特性分离开 ,并用图解的形式表示 ,这种表示方法使得驱动 装置的可行性检查和不同系统间的比较更方便 ,另外 ,还提供了传动比的一个可能范围.… 查看全部问答> |
|
最近刚刚从图书馆借到一本新书《dsp控制技术实践》。中国电力出版社出版,2009.5出版的。专门讨论dsp2812的片子的使用,比ti的中文手册薄多了,看起来挺舒服的。推荐给大家。… 查看全部问答> |
|
最近在学Ardence RTX实时系统软件,有很多不懂的地方,下面是一个定时器程序,不太明白? 最近在学Ardence RTX实时系统软件,有很多不懂的地方,下面是一个定时器程序,不太明白?请路过大虾们帮忙看看。 下面是源代码,包括两个文件,一个头文件,一个源文件。如下所示: /////////////////////////////////////////////////////// ...… 查看全部问答> |
|
各位大哥大姐好,工作就是问题叠问题,小弟我又来了... 开发板上有几个跳线,我写了一个测试的程序,却出问题了,大家帮忙看看... 跳线驱动部分内容: BOOL Addr_Init() { //地址映射 } BOOL WINAPI DllEntry(HANDLE hI ...… 查看全部问答> |
|
我用make zImage编译好2.6.13的内核文件后,把/arch/arm/boot/zImage 文件烧进板子后,linux解压出错.错误信息如下: VIVI version 0.1.4 (root@localhost.localdomain) (gcc version ...… 查看全部问答> |
|
请问,板子上把芯片尺寸画大了怎么办? 我不小心把板子上面芯片的尺寸单位看错了,板子做出来芯片尺寸大了N多... 请问怎么解决? 有没有转接器之类的?可以把LQFP 48封装的线引出来啊??… 查看全部问答> |
|
最新版本号: 1.0.1.111031 更新日期: 2011.10.26 下载地址1 http://stu.cidp.edu.cn/SmartDebug.rar 下载地址1 下载地址2 http://www.vdisk.cn/down/index/8990713A3710 下 ...… 查看全部问答> |
|
我要做多路的温度采集,用的是K型热电偶,电源用电荷泵转换模块,信号调理部分想用AD620和OP07做二级放大,现在有几个地方不太有把握,请做过的帮忙! 一是电源,我现在用12v电瓶供电,用电荷泵转换成+/-12v,这样的电压有一定的纹波,对信号的采 ...… 查看全部问答> |




