AVR ELF文件的生成与烧录

来源:互联网 发布:js的跨域 编辑:程序博客网 时间:2024/04/29 01:43

作者:hitzds

转自:http://blog.chinaunix.net/uid-28604207-id-3485030.html


通常AVR芯片包括flasheepromfuselockbitsuser signature等几个非易失的内容需要在编程时烧录到芯片中,其中fuse部分是只有外部的编程器可以进改写,应用程序本身是无法更改的。

在进行ISP烧录过程中,用户希望使用点一个按钮这样单一的动作来完成烧录,这就要求能把几个不同部分的擦出、烧写、比较的动作合成在一起来完成。可以使用ELF格式来完成这个目标,ELF格式的目标文件中可以包含不同的区域段,下载工具可以分别提取烧录到相应的位置。

1)使用Atmel Studio 6进行的软件开发

如果开发者使用是Atmel Studio 6(或者是AVR Studio 4/5,总之是GCC就行)来编写用户的源代码,avr glibc提供了一组方法来实现在源代码中指定这些不同区域的值。


如果希望生成的ELF文件中包含有芯片ID的段,用于ELF Production file下载之前进行比较,看是否是匹配当前设备的下载文件。这一步仅需要在源代码中加入头文件#include <avr/signature.h>重新编译即可,此头文件会定义一个常量数组并放置到ELF的.signature段中。(如果增加了.user_signature的段,好像编译器会自动将这.signature这个段添加到ELF文件中TBD)


[cpp] view plaincopyprint?
  1. const unsigned char __signature[3] __attribute__((section (".signature"))) =  
  2.         { SIGNATURE_2, SIGNATURE_1, SIGNATURE_0 };  

2)使用IAR AVR进行的软件开发

由于IAR扩展语法中不能支持fuse,lockbits等位的定义,所以使用IAR仅能生产单一烧写FLASH的内容,通常我们生产HEX格式。

这时候就需要使用到AVR Studio 4中的ELF Production File  Fomart的功能:在选好flasheeprom的HEX文件位置后,分别去fuse,lockbits的页面勾选好相应的配置后,回来设置好需要产生的ELF文件路径,点Save即可由AVR Studio 4生成一个包含各个段内容的ELF文件格式,直接点Program按钮或者使用命令行工具atprogram.exe都可以简单的烧录。


原创粉丝点击