Forum: Mikrocontroller und Digitale Elektronik Linker-Problem "can not fit the section"


von Matthias (Gast)


Lesenswert?

Es kommt folgende Fehlermeldung:

Debug build of project `C:\Dokumente und 
Einstellungen\Studium\Desktop\Source Code\Wasserwaage_reloaded.mcp' 
started.
Language tool versions: mpasmwin.exe v5.31, mplink.exe v4.31, mcc18.exe 
v3.31
Preprocessor symbol `__DEBUG' is defined.
Target debug platform is `__MPLAB_DEBUGGER_ICD2=1'.
Debug platform options are: `__ICD2RAM=1'.
Wed Jun 17 12:24:25 2009
----------------------------------------------------------------------
Make: The target "C:\Dokumente und Einstellungen\Studium\Desktop\Source 
Code\Schaufeln.o" is up to date.
Make: The target "C:\Dokumente und Einstellungen\Studium\Desktop\Source 
Code\KSWW_MAIN_C.o" is up to date.
Make: The target "C:\Dokumente und Einstellungen\Studium\Desktop\Source 
Code\LCD12864.o" is up to date.
Make: The target "C:\Dokumente und Einstellungen\Studium\Desktop\Source 
Code\developers.o" is up to date.
Make: The target "C:\Dokumente und Einstellungen\Studium\Desktop\Source 
Code\Wasserwaage_reloaded.cof" is out of date.
Executing: "C:\MCC18\bin\mplink.exe" 
/l"C:\Programme\Microchip\MCC18\lib" "18f26j11_g.lkr" "Schaufeln.o" 
"KSWW_MAIN_C.o" "LCD12864.o" "developers.o" "C:\Dokumente und 
Einstellungen\Studium\Desktop\Source Code\p18F26J11.lib" /u_CRUNTIME 
/u_DEBUG /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /z__MPLAB_DEBUGGER_ICD2=1 
/z__ICD2RAM=1 /o"Wasserwaage_reloaded.cof" /M"Wasserwaage_reloaded.map" 
/W

MPLINK 4.31, Linker
Copyright (c) 2009 Microchip Technology Inc.
Error - section '.udata_developers.o' can not fit the section. Section 
'.udata_developers.o' length=0x00000400
Errors    : 1

Link step failed.
----------------------------------------------------------------------
Debug build of project `C:\Dokumente und 
Einstellungen\Studium\Desktop\Source Code\Wasserwaage_reloaded.mcp' 
failed.
Language tool versions: mpasmwin.exe v5.31, mplink.exe v4.31, mcc18.exe 
v3.31
Preprocessor symbol `__DEBUG' is defined.
Target debug platform is `__MPLAB_DEBUGGER_ICD2=1'.
Debug platform options are: `__ICD2RAM=1'.
Wed Jun 17 12:24:25 2009
----------------------------------------------------------------------
BUILD FAILED




Irgendwie gibts Probleme mit der Datei Delopers. Benötigt die Datei 
zuviel Speicher für den PIC18F26j11?

Ich komm leider nicht weiter. Vielleicht kann mir ja jemand erklären, 
was der Error bedeutet?

Vielen Dank im Voraus

Gruß Matthias

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Diese Datei scheint 0x400 Bytes RAM zu benötigen (udata). Wieviel hat 
denn der betreffende PIC?

von Matthias (Gast)


Lesenswert?

Program Memory 64kbytes
Data Memory 3,8kbytes

von Matthias (Gast)


Lesenswert?

Wir haben das ganze Programm schon lauffähig auf nem PIC18F2620 gehabt. 
Der hat aber die gleichen Speicher wie der PIC18F26j11, den wir jetzt 
benutzen.

von dennis (Gast)


Lesenswert?

Linker script überprüfen, evt. muss händisch ein größerer speicher 
bereich angelegt und belegt werden werden.

dennis

von Matthias (Gast)


Lesenswert?

Wo genau muss ich da was ändern? Sorry, hab das noch nie angepasst.

Hier der Quellcode des Linker-Files:

// File: 18f26j11_g.lkr
// Generic linker script for the PIC18F26J11 processor

#DEFINE _CODEEND _DEBUGCODESTART - 1
#DEFINE _CEND _CODEEND + _DEBUGCODELEN
#DEFINE _DATAEND _DEBUGDATASTART - 1
#DEFINE _DEND _DATAEND + _DEBUGDATALEN

LIBPATH .

#IFDEF _CRUNTIME
  #IFDEF _EXTENDEDMODE
    FILES c018i_e.o
    FILES clib_e.lib
    FILES p18f26j11_e.lib

  #ELSE
    FILES c018i.o
    FILES clib.lib
    FILES p18f26j11.lib
  #FI

#FI

#IFDEF _DEBUGCODESTART
  CODEPAGE   NAME=page       START=0x0               END=_CODEEND
  CODEPAGE   NAME=debug      START=_DEBUGCODESTART   END=_CEND 
PROTECTED
#ELSE
  CODEPAGE   NAME=page       START=0x0               END=0xFFF7
#FI

CODEPAGE   NAME=config     START=0xFFF8            END=0xFFFF 
PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF 
PROTECTED

#IFDEF _EXTENDEDMODE
  DATABANK   NAME=gpre       START=0x0               END=0x5F
#ELSE
  ACCESSBANK NAME=accessram  START=0x0               END=0x5F
#FI

DATABANK   NAME=gpr0       START=0x60              END=0xFF
DATABANK   NAME=gpr1       START=0x100             END=0x1FF
DATABANK   NAME=gpr2       START=0x200             END=0x2FF
DATABANK   NAME=gpr3       START=0x300             END=0x3FF
DATABANK   NAME=gpr4       START=0x400             END=0x4FF
DATABANK   NAME=gpr5       START=0x500             END=0x5FF
DATABANK   NAME=gpr6       START=0x600             END=0x6FF
DATABANK   NAME=gpr7       START=0x700             END=0x7FF
DATABANK   NAME=gpr8       START=0x800             END=0x8FF
DATABANK   NAME=gpr9       START=0x900             END=0x9FF
DATABANK   NAME=gpr10      START=0xA00             END=0xAFF
DATABANK   NAME=gpr11      START=0xB00             END=0xBFF
DATABANK   NAME=gpr12      START=0xC00             END=0xCFF

#IFDEF _DEBUGDATASTART
  DATABANK   NAME=gpr13      START=0xD00             END=_DATAEND
  DATABANK   NAME=dbgspr     START=_DEBUGDATASTART   END=_DEND 
PROTECTED
#ELSE //no debug
  DATABANK   NAME=gpr13      START=0xD00             END=0xDFF
#FI

DATABANK   NAME=gpr14      START=0xE00             END=0xEBF
DATABANK   NAME=sfr14      START=0xEC0             END=0xEFF 
PROTECTED
DATABANK   NAME=sfr15      START=0xF00             END=0xF5F 
PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF60             END=0xFFF 
PROTECTED

#IFDEF _CRUNTIME
  SECTION    NAME=CONFIG     ROM=config
  #IFDEF _DEBUGDATASTART
    STACK SIZE=0x100 RAM=gpr12
  #ELSE
    STACK SIZE=0x100 RAM=gpr13
  #FI
#FI

von Jochen64 (Gast)


Lesenswert?

ich hatte das problem auch schon mal, kann mich im Moment (bin grade auf 
Arbeit) leider nicht genau dran erinnern. Jedenfalls lag es irgendwie 
daran, das ein Modul im Codebereich eine Überschneidung mit ORG 0x00 
oder ORG 0x04 (Reset / Interrupt) hatte. Geholfen hat - wenn ich mich 
richtig erinnere - im Quelltext (ASM) explizit jedem Code-Segment eine 
Adresse zu geben.

Ausserdem noch mal bei den Projekteinstellungen vergleichen, ob 
"Absolute" oder "Relocatable" Code eingestellt ist.

von Jochen64 (Gast)


Lesenswert?

Noch was: Bei "Debug" Konfiguration kann es zu einer Überschneidung mit 
dem Debug Code kommen (der hat irgeneine feste Adresse). Probier mal 
"Release".

Und natuerlich nochmal gucken, das in allen ASM Sourcecodes das richtige 
#include File für das geänderte Device eingestellt ist.

von Chris (Gast)


Lesenswert?

Hallo,
ich stehe gerade vor dem gleichen Problem.
>>
Error - section '.udata_user.o' can not fit the section. Section 
'.udata_user.o' length=0x00000193
<<
Das Problem kam mit dem Anwachsen des Codes für neue Features. 
Offensichtlich bekommt der Linker die Daten nicht unter, aber warum?? 
GPR sind noch genügend da.
PIC ist ein 18F4455 mit CDC-Framework für USB

Vielen Dank für jegliche Tipps.

Gruß, CHris.

von Chris (Gast)


Lesenswert?

Achso:
Debug oder Release macht keinen Unterschied. Egal ob 18f4455i.lkr oder 
18f4455.lkr verwendet wird. Ich steh ehrlich gesagt auf dem Schlauch...

von Jochen (Gast)


Lesenswert?

Um Daten grösser als 256 Bytes verarbeiten zu können musst du im 
Linkerfile arbeiten.

Wie es genau funktioniert kannst du z.B. hier nachlesen
http://www.kevin.org/frc/C18_2.4_getting_started.pdf
3.7 Example 6

von Chris (Gast)


Lesenswert?

Danke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.