+----------------------------------+
+ Device Fujitsu MB90342 +
+ Compiler von Fujitsu (glaub ich) +
+----------------------------------+
Hi,
ich habe folgenden Code geschrieben (nur zu Compilierzwecken,
eigentlicher Code ist deutlich umfangreicher).
anfang->next=NULL;//Mark this entry as the start of the list
46
}
47
}
48
voiddummy(void)
49
{
50
;//tu was
51
}
Beim Compilieren kommt folgende Fehlermeldung:
>>balloc.asm(154) E4305L: Unresolved external symbol (_sbrk)
Geplant ist dieses Konzept für die Speicherverwaltung (Dynamische
Datenstruktur) eines OS.
Erkennt jemand den Fehler??
Der Fehler liegt beim malloc, nur leider erkenne ich nicht warum??
Daraus werd ich zwar nicht 100% schlau, aber die Funktion gibt doch auch
einen void- Zeiger zurück,...
Warum will der Controller-Compiler das dann nicht machen??
Gruß
Du musst wohl den Autor der Datei balloc.asm befragen, warum er auf
eine Variable namens _sbrk zugreift, es diese aber nicht gibt. Ggf.
suchst du zuvor die Doku für dieses balloc.asm mal durch, es kann ja
gut sein, dass diese dich damit beauftragt, dass du eine derartige
Variable selbst anlegen und initialisieren musst, damit das malloc()
weiß, ab welcher Stelle es seinen Heap anlegen darf (oder so ähnlich).
Jörg Wunsch wrote:
> Du musst wohl den Autor der Datei balloc.asm befragen, warum er auf> eine Variable namens _sbrk zugreift, es diese aber nicht gibt.
Ohne je mit Fujitsu-Controllern oder -Compilern gearbeitet zu haben:
sbrk dürfte wie bei vielen anderen libcs eine Funktion sein, die
ausgehend von einem Initialwert der Heap-Startadresse einen Adresszähler
um die angeforderte Anzahl Bytes erhöht und den Wert vor der Erhöhung
zurückgibt. newlib-Dokumentation erklärt es besser.
...ein wenig gesurft, man will ja was dazu lernen:
Sodenn vom OP mit "Fujitsu-Compiler (glaub ich)" Softune V6 gemeint ist,
ist das Prinzip lt.
http://www.fujitsu.com/downloads/MICRO/fma/pdfmcu/softccmp-v6-cm81-00206-3e.pdf
Abschnitt 8.5.7 identisch. Der Linker meckert allerdings über fehlendes
_sbrk, die Dokumention beschreibt sbrk (ohne Unterstrich), Ursache
könnte aber auch nur eine Decoration sein.
Surft man etwas über die Fujitsu-Seiten, findet man z.B. auf
http://mcu.emea.fujitsu.com/mcu_product/mcu_all_software.htm das
Beispiel 90xxx_sw_printf-v12.zip und darin code für sbrk.
> Ggf.> suchst du zuvor die Doku für dieses balloc.asm mal durch
Die suche nach malloc und dessen Abhängigkeiten - also auch sbrk - ist
erfolgversprechender (war es zumindest für mich).
>, es kann ja> gut sein, dass diese dich damit beauftragt, dass du eine derartige> Variable selbst anlegen und initialisieren musst, damit das malloc()> weiß, ab welcher Stelle es seinen Heap anlegen darf (oder so ähnlich).
Indirekt, malloc der mitgelieferten libc "fragt" lt. Dokumentation sbrk.
sbrk benötigt allerdings schon den besagten Startwert ("ab welcher
Stelle"). Kann vom Linker bereitgestelltes Symbol sein oder wie im
Beispiel die Startadresse eines "Pseudo-Heaps" in Form eines Arrays in
.data
Wie auch immer, vielleicht springt ja noch ein
"Fujitsu-Compiler"-Anwender ein.
Dankeschön,...
dann werd ich mal ein wenig Literatur studieren,...
Wenn da draußen doch ein Fujitsu benutzer ist, immer her mit den
Vorschlägen,...
Gruß
taunus
@ taunus
ich habe die 16LX Beruflich und Privat eingesetzt.
Hast du das Problem schon gelöst?
Ansonsten schau mal im sbrk.c des Anhanges nach. Dort sollte die Lösung
für dein Problem stehen.
Martin Thomas lag mit seinen Vermutungen/Hinweisen schon sehr Nahe.
Cheers,
Felix
Wahrscheinlich hast Du das Problem schon gelöst, da ich aber selbst die
letzten Tage daran geknabbert habe, poste ich die Lösung mal für all die
anderen ;-)
Wenn Du Softune benutzt, schau mal unter
Project->Setup Project...->Linker
dort fügst Du unter "Other Options" folgende Zeile hinzu:
-l C:\Softune6\lib\911\lib911if.lib
Evtl. musst Du natürlich noch den Pfad anpassen
Gruß,
Stefan