relocation truncated to fit: R_AVR_13_PCREL

Hallo zusammen,

ich erhalte beim compilieren die folgenden Fehlermeldungen:


Compiling debug version of 'Aquaponics' for 'Arduino/Genuino Mega w/ ATmega2560 (Mega 2560)'

cceMc4Ko.ltrans3.ltrans.o*: In function DebPos(char*, int, int)
cceMc4Ko.ltrans3.o*: (.text+0xcfa): relocation truncated to fit: R_AVR_13_PCREL against symbol ass_i2c_delay_half defined in .text section in C:\Users\weicher\AppData\Local\Temp\cceMc4Ko.ltrans2.ltrans.o
cceMc4Ko.ltrans3.o*: (.text+0xcfe): relocation truncated to fit: R_AVR_13_PCREL against symbol ass_i2c_delay_half defined in .text section in C:\Users\weicher\AppData\Local\Temp\cceMc4Ko.ltrans2.ltrans.o

cceMc4Ko.ltrans3.ltrans.o*: In function __vector_20
cceMc4Ko.ltrans3.o*: (.text+0xd0a): relocation truncated to fit: R_AVR_13_PCREL against symbol ass_i2c_wait_scl_high defined in .text section in C:\Users\weicher\AppData\Local\Temp\cceMc4Ko.ltrans2.ltrans.o

cceMc4Ko.ltrans3.ltrans.o*: In function TRect::MoveTo(unsigned int, unsigned int)
cceMc4Ko.ltrans3.o*: (.text+0xd2a): relocation truncated to fit: R_AVR_13_PCREL against symbol ass_i2c_delay_half defined in .text section in C:\Users\weicher\AppData\Local\Temp\cceMc4Ko.ltrans2.ltrans.o

cceMc4Ko.ltrans3.ltrans.o*: In function _Li2c_read_bit
cceMc4Ko.ltrans3.o*: (.text+0xd36): relocation truncated to fit: R_AVR_13_PCREL against symbol ass_i2c_wait_scl_high defined in .text section in C:\Users\weicher\AppData\Local\Temp\cceMc4Ko.ltrans2.ltrans.o
cceMc4Ko.ltrans3.o*: (.text+0xd38): relocation truncated to fit: R_AVR_13_PCREL against symbol ass_i2c_delay_half defined in .text section in C:\Users\weicher\AppData\Local\Temp\cceMc4Ko.ltrans2.ltrans.o

collect2.exe*: error: ld returned 1 exit status

Error compiling for board Arduino/Genuino Mega w/ ATmega2560 (Mega 2560)

Ich habe nach "relocation truncated to fit: R_AVR_13_PCREL" gegogelt und viele alte Einträge aber nur zwei im Zeitraum vom 01.01.2015 .. 13.12.2016 gefunden: Keiner der Tip's hat etwas geholfen.

Der Fehler ist nach dem einbauen des Adafruit_MAX31855 aufgetreten. Ich glaube aber nicht, dass es daran liegt weil ich den gleichen Fehler schon vorher mal hatte. Behoben habe ich es damals durch das entfernen einiger unnötiger Serial.print(ln) statements.

Als Attachment habe ich die Einstellungen aus Toolchain AVR/GNU C++ Compiler angehängt.

Ich hoffe jemand findet einen Fehler in diesen Einstellungen oder hat sonst eine Idee wie man diesen Fehler beheben kann.

Besten Dank
Walter

AVR_GNU_C++_Compiler.txt (3.19 KB)

Hallo zusammen,

habe noch was vergessen, die Linker optionen könnten es ja auch noch sein:

-Wl,-Map="$(OutputFileName).map"
-Wl,--start-group -Wl,-l-libm
-Wl,--end-group
-Wl,-L"C:\Users\weicher\Documents\Arduino\Aquaponic\Programme\Aquaponics"
-Wl,--gc-sections -mmcu=atmega2560
-B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.0.90\gcc\dev\atmega2560"

Gruss
Walter

Zu PCREL fallen mir nur bedingte Sprünge ein, die nur eine beschränkte Reichweite haben.

Wie lang sind denn die angegebenen Funktionen, enthalten die große Schleifen oder If-Statements?

Hallo DrDiettrich

die längste Funktion ist diese hier:

void ShowTime ()
{
	//--------- Preparation --------------------------------------------------------
	Display.setTextSize (4);
	Paint.Fill (DisplayRect, BLUE);

		
	MaxWidth	= 0;

	//--------- Gen Date, Time and Colon Rectangles --------------------------------
	TRect dateRect		= Paint.TextRect (4, "99.99.9999");
	const TRect center	= TRect (0, 0, 320, dateRect.Height());
	TRect timeRect		= Paint.TextRect (4, "99:99");
	TRect dotRect		= Paint.TextRect (4, ":");
	
	CenterDateRect		= Paint.CenterRect (center, dateRect);
	CenterTimeRect		= Paint.CenterRect (center, timeRect);
	CenterDotRect		= Paint.CenterRect (center, dotRect);
	
	
	//--------- Write Date ---------------------------------------------------------
	Int yPos = TopShowTimePos;

	CenterDateRect.MoveTo (CenterDateRect.Left(), yPos);
	Paint.PrintCenter (CenterDateRect, 4, DateStr, WHITE, BLUE);
	Paint.Outline(CenterDateRect, 0, WHITE);
	
	//--------- Write Time ---------------------------------------------------------
	yPos += ShowTimeOffs;

	CenterTimeRect.MoveTo (CenterTimeRect.Left(), yPos);
	Paint.PrintCenter (CenterTimeRect, 4, TimeStr, WHITE, BLUE);
	Paint.Outline(CenterTimeRect, 0, WHITE);
	
	//--------- Write Colon --------------------------------------------------------
	CenterDotRect.MoveTo (CenterDotRect.Left(), yPos);
	Paint.Print (CenterDotRect, 4, ":", WHITE, BLUE);
	Paint.Outline (CenterDotRect, 0, WHITE);
	
	//--------- Write Sensor Labels ------------------------------------------------
	Int xPos = SensorXposOffs;
	yPos = TopSensorPos;
	
	
	//--------- Write Sensor Level ------------------------------------------------
	LevelLabelRect = Paint.TextRect (3, "Level: ");
	LevelLabelRect.MoveTo (xPos, yPos);
	Paint.Print (LevelLabelRect, 3, "Level: ", WHITE, BLUE);
	MaxWidth = max (LevelLabelRect.Width(), MaxWidth);
	
	//--------- Write Sensor Temp --------------------------------------------------
	yPos += SensorPosOffs;
	TempLabelRect = Paint.TextRect (3, "Temp: ");
	TempLabelRect.MoveTo (xPos, yPos);
	Paint.Print (TempLabelRect, 3, "Temp: ", WHITE, BLUE);
	MaxWidth = max (TempLabelRect.Width(), MaxWidth);
	
	
	//--------- Paint Help Rectangle -----------------------------------------------
	yPos = TempLabelRect.Top() + TempLabelRect.Height() + 30;
	TRect helpRect = TRect (0, yPos, 320, 480 - yPos);
	Paint.Fill (helpRect, LIGHTGREY);
	Paint.Outline (helpRect, 4, RED);
	
	yPos += 15;
	xPos = 20;
	helpRect.MoveTo(xPos, yPos);
	Paint.Print(helpRect, 2, "TASTEN:", RED, LIGHTGREY);
	
	xPos += 50;
	yPos += 20;
	helpRect.MoveTo(xPos, yPos);
	Paint.Print (helpRect, 2, "[1] Filter", RED, LIGHTGREY);
	
	yPos += 20;
	helpRect.MoveTo(xPos, yPos);
	Paint.Print (helpRect, 2, "[2] Giessen", RED, LIGHTGREY);
	
	yPos += 20;
	helpRect.MoveTo(xPos, yPos);
	Paint.Print (helpRect, 2, "[3] Level", RED, LIGHTGREY);
	
	yPos += 20;
	helpRect.MoveTo(xPos, yPos);
	Paint.Print (helpRect, 2, "[4] Heizen/Kuehlen", RED, LIGHTGREY);

	yPos += 20;
	helpRect.MoveTo(xPos, yPos);
	Paint.Print (helpRect, 2, "[5] Fuettern", RED, LIGHTGREY);

	yPos += 30;
	xPos = 20;
	helpRect.MoveTo(xPos, yPos);
	Paint.Print (helpRect, 2, "Zeiteingabe Taste [*]", RED, LIGHTGREY);
};

Diese könnte ich in trennen in die Vorbereitung der Anzeige und in das effektive Anzeigen.

<Zu PCREL fallen mir nur bedingte Sprünge ein, die nur eine beschränkte Reichweite haben.>

Da wird aber gesagt, dass wenn die checkboxen Relax Branches und Use rjmp/rcall nicht gecheck sind mit jmp gesprungen wird. Um auszuschliessen dass es daran liegt habe ich diese checkboxen zuerst einzeln und dann auch noch beide zusammen gecheckt und unchecked. Beides hat nichts geholfen. Eventuell ist es dem compiler oder linker egal wie der Status dieser checkboxen ist.

Ich habe mal die Temperatur messfunktion auskommentiert und das programm kompiliert:

Program size: 22'452 bytes (used 9% of a 253'952 byte maximum) (5.55 secs)
Minimum Memory Usage: 1672 bytes (20% of a 8192 byte maximum)

Das ist doch eigentlich fast gar nichts.

Gruss
Walter

Prüfe die Funktionen, die der Compiler anmeckert. Ist da Assembler mit drin?

Ansonsten fällt mir auch nichts mehr ein :frowning:

Nein, ist kein assembler drin, nur fürchterliche formatierung :confused:

aber dieser define macht mich stutzig:

#ifdef __AVR
  #include <avr/pgmspace.h>
#elif defined(ESP8266)
  #include <pgmspace.h>
#endif

ich habe sowas noch nie gebraucht, also das mit dem <pgmspace.h>. In der Klasse Adafruit_Max31855 sind nur digitalRead, digitalWrite und SPI vorhanden. Das ESP8266 habe ich nicht, das wird imho hier nur für die SPI Schnittstelle reingezogen.

Gruss
Walter

Kann es sein, daß irgendeine Bibliothek speziell für den ESP8266 verwendet wird, die irgendwelchen Code enthält, der auf einem AVR nicht funktioniert?

Ist __AVR tatsächlich definiert? Mir ist noch nicht ganz klar, ob Du mit AVR Studio oder mit der Arduino IDE arbeitest, und jede Umgebung kann andere #defines enthalten.

Sorry, habe ich vergessen zu sagen, ich arbeite mit dem Atmel Studio7 Version 7.0.1188.

Ich habe gerade probiert das ino File mit der Arduino IDE zu compilieren... und das funktioniert. Es kommen nur einige Warnungen welche ich problemlos wegbekomme. Imho ist aber die Arduino IDE nicht wirklich eine Entwicklungsumgebung eher Notepad mit compiler...

Ich gieng davon aus, dass das Atmel Studio exakt den gleichen compiler benutzt wie die Arduino IDE. Scheinbar ist das nicht so:

Atmel Studio 7 (Version: 7.0.1188 - )
© 2015 Atmel Corp.
All rights reserved.

OS Version: Microsoft Windows NT 6.2.9200.0
Platform: Win32NT

Installed Packages: Data Visualizer Extension - 2.6.519
Data Visualizer Extension
Version: 2.6.519
Package GUID: 25dc067d-df31-4e22-be7f-cc6a77ccc7f3
Company: Atmel

Installed Packages: Atmel Kits - 7.0.85
Atmel Kits
Version: 7.0.85
Package GUID: 6F4B8FE4-C464-4916-8B43-AC92431C1CDF
Company: Atmel

Installed Packages: Atmel Software Framework - 3.32.0.596
ASF
Version: 3.32.0
Package GUID: 4CE20911-D794-4550-8B94-6C66A93228B8
Company: Atmel
HelpUrl: http://asf.atmel.com/3.32.0
Release Description: ASF - 3.32.0 Release

ASF
Version: 3.31.0
Package GUID: 4CE20911-D794-4550-8B94-6C66A93228B8
Company: Atmel
HelpUrl: http://asf.atmel.com/3.31.0
Release Description: ASF - 3.31.0 Release

ASF
Version: 3.30.1
Package GUID: 4CE20911-D794-4550-8B94-6C66A93228B8
Company: Atmel
HelpUrl: http://asf.atmel.com/3.30.1
Release Description: ASF - 3.30.1 Release

ASF
Version: 3.29.0
Package GUID: 4CE20911-D794-4550-8B94-6C66A93228B8
Company: Atmel
HelpUrl: http://asf.atmel.com/3.29.0
Release Description: ASF - 3.29.0 Release

ASF
Version: 3.28.1
Package GUID: 4CE20911-D794-4550-8B94-6C66A93228B8
Company: Atmel
HelpUrl: http://asf.atmel.com/3.28.1
Release Description: ASF - 3.28.1 Release

Installed Packages: Atmel Start - 1.0.99.0
Atmel Start
Version: 1.0.99.0
Package GUID: F8853255-9C7B-4DC2-8E0F-64D9324AEB0E
Company: Atmel

Installed Packages: LiveWatch - 2.0.54
LiveWatch
Version: 2.0.54
Package GUID: 7DF6DCFD-2BCA-41C7-9C0E-1B7F606B008E
Company: Atmel

Installed Packages: Percepio Trace for Atmel Studio - 1.3
Percepio Trace for Atmel Studio
Version: 1.3
Package GUID: fe274744-c496-42fc-9e52-f77b92d669b1
Company: Percepio AB

Installed Packages: Atmel Gallery - 7.8
Atmel Gallery
Version: 7.8
Package GUID: AtmelStudio7ExtensionManager
Company: Atmel

Installed Packages: GdbConsole - 7.0.154
GdbConsole
Version: 7.0.154
Package GUID: 49258291-0FED-4501-881B-6BAA91BEBCA8
Company: Atmel

Installed Packages: Shell VSIX manifest - 7.0
Shell VSIX manifest
Version: 7.0
Package GUID: e874ffe4-fbe3-4624-9a17-61014ede02d0
Company: Atmel Corporation

Installed Packages: AtmelToolchainProvider - 7.0.891
AtmelToolchainProvider
Version: 7.0.891
Package GUID: AtmelToolchainProvider.Atmel.10EF9C74-D8DA-4872-85F5-D8BB3101E245
Company: Atmel

Installed Packages: Visual Assist for Atmel Studio - 10.9.2093.2
Visual Assist for Atmel Studio
Version: 10.9.2093.2
Package GUID: 7997A33C-B154-4b75-B2AC658CD58C9510
Company: Whole Tomato Software

Installed Packages: Arduino IDE for Atmel Studio 7 - 1609.4.3
Arduino IDE for Atmel Studio 7
Version: 1609.4.3
Package GUID: 324cac6d-ff67-4e2e-8fc9-7a587b2d6045
Company: Arduino Team @ Visual Micro

Gruss
Walter

Problem gelöst :slight_smile:

  • Microsoft Visual Studio 2015 installiert.

  • Visual Micro for Visual Studio installiert.

  • Projekt in das Verzeichnis von Visual Studio kopiert.

Kompiliert und läuft!