1

我开始使用带有 atmel atmega128rfa1 的 contiki 操作系统。我可以编译我的示例,但是 hex 文件很糟糕。错误是:错误:ipso.hex 第 1740 行的地址 0x820003 超出范围(我没有使用 IPSO,只是我保留了这个名称)。

当我在linux系统中编译时,代码是程序大小为27804字节,数据为4809字节。

当我在windows中编译时,程序是28292,数据是4791。

我只使用一个进程和一个 etimer,我想打开和关闭 1 个 LED。makefile 包含:`

TARGET=avr-atmega128rfa1
CONTIKI = ../..
include $(CONTIKI)/Makefile.include

all: 
make -f Makefile.ipso TARGET=avr-atmega128rfa1 ipso.elf 
avr-objcopy -O ihex -R .eeprom ipso.elf ipso.hex 
avr-size -C --mcu=atmega128rfa1 ipso.elf `

我无法对控制器进行编程。问题是什么?

谢谢你。

4

2 回答 2

2

.elf 文件中的特殊部分从 0x810000 以上开始,在生成用于编程特定存储器的 hex 文件时必须删除,例如

$ avr-objdump -h webserver6.avr-atmega128rfa1

webserver6.avr-atmega128rfa1:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         00001bda  00800200  0000e938  0000ea2c  2**0
              CONTENTS, ALLOC, LOAD, DATA
  1 .text         0000e938  00000000  00000000  000000f4  2**1
              CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .bss          000031a6  00801dda  00801dda  00010606  2**0
              ALLOC
  3 .eeprom       00000029  00810000  00810000  00010606  2**0
              CONTENTS, ALLOC, LOAD, DATA
  4 .fuse         00000003  00820000  00820000  0001062f  2**0
              CONTENTS, ALLOC, LOAD, DATA
  5 .signature    00000003  00840000  00840000  00010632  2**0
              CONTENTS, ALLOC, LOAD, READONLY, DATA

所以,

avr-objcopy -O ihex -R .eeprom -R .fuse -R signature ipso.elf ipso.hex

或者,只复制所需的部分:

avr-objcopy -O ihex -j .text -j .data ipso.elf ipso.hex
于 2013-05-06T13:48:12.993 回答
0
avr-objcopy --change-section-lma .eeprom=0

这对我有用

于 2022-02-03T21:15:49.263 回答