Crossworks Linker Error

Gast #5770578
Lesenswert?

Hallo und schöne Grüße ans Forum,

ich folgendes Problem:
ich möchte ein Crossworks-Projekt (STM32, *.hzp), was auf System A 
(WinXP, Crossworks 2.2) problemlos funktioniert, auf System B (Win10, 
Crossworks 2.35) kompilieren und debuggen, da ich nur noch kurzzeitig 
zugriff auf System A habe. Ich habe sämtliche Dateien kopiert und auf 
System B das Projekt geöffnet. Nun erhalte ich beim Build auf System B 
folgende Fehlermeldung:

...
  Linking UW005_Rudersteller_Version03.elf
    THUMB Flash Release/thumb_crt0.o: In function `__putchar':
    (.init+0xbc): undefined reference to `__stack_process_end__'
    THUMB Flash Release/thumb_crt0.o: In function `__putchar':
    (.init+0xc0): undefined reference to `__stack_process_start__'
Build failed
...

Irgendwie scheint der Linker (kompilieren klappt also) irgendwelche 
Probleme zu haben, die abhängig sind vom System bzw. den 
unterschiedlichen Versionen von Crossworks. Nur habe ich leider keine 
Idee, wie ich den Fehler beheben soll. Ihr vielleicht?
Gast #5779354
Lesenswert?

Neue Info:
ich habe die Datei "thumb_crt0.s" aus dem Hauptordner von CrossWorks 
ebenfalls ausgetauscht. Also auf System B (Crossworks 2.35) arbeitet nun 
die "thumb_crt0.s" von System A (Crossworks 2.2) -> das Kompilieren und 
Linken klappt nun. Ein Vergleich der hex-Files zwischen dem auf System A 
erstellten Hex-File und dem nun auf System B erstellen Hex-File zeigt 
jedoch sehr viele Abweichungen, was ich mir nicht erklären kann. 
Abgesehen davon gefällt mir diese "Lösung" nicht sehr gut, da ich gerne 
wüsste, was ich durch den Austausch der Dateien ausgelöst habe. Ich 
werde dennoch dieses neue Hexfile mal flashen und schauen, ob das 
Programm funktioniert. Andere Lösungsvorschläge sind mir sehr 
willkommen.
Schöne Grüße...
Gast #5780421
Lesenswert?

Habe nun CrossStudio 2.2 auf System B installiert (trial). Somit laufen 
auf beiden Systemen die gleichen IDE-Versionen. Kompilieren und linken 
des Projekts fehlerfrei, aber immer noch viele Abweichungen zwischen den 
erstellten Hex-Files auf beiden Systemen, egal ob Debug oder Release. 
Wie kann das sein?
Ich bin bis jetzt davon ausgegangen, das sämtliche Einstellungen 
(Compiler, Optimierung, etc.), die für ein derartige Verhalten 
verantwortlich sein könnten, durch die Verwendung der gleichen 
Projektdatei (*.hzp) identisch sind. Oder gibt es noch andere Dateien, 
in denen irgendwelche Einstellungen gespeichert sind, die hierfür 
verantwortlich sein können?
Danke.
Gast #5780565
Lesenswert?

Hallo Rufus,

>> irgendwelche bereits installierten Teile der neueren Version?
Wie kann ich das ausschließen? 2.35 deinstallieren oder kennst Du einen 
besseren Weg?

>> In den Hexfiles kann auch buildzeitabhängiger Krempel drinstehen
Eher nicht, der Vergleich zweier HexFiles von Sys A (Build an 
unterschiedliche Tagen) zeigt keine Unterschiede.

>> Mapfiles
OK, ich vermute wir kommen der Sache näher, die *.map Dateien sind 
unterschiedlich (Build Release auf Sys A und Sys B)
Persönliche Seite #5780633
Lesenswert?

Henning schrieb:
> Wie kann ich das ausschließen? 2.35 deinstallieren

Du könntest das Verzeichnis, in dem 2.35 installiert ist, testweise 
umbenennen. Allerdings müsstest Du auch suchen, ob möglicherweise 
irgendwelche Komponenten außerhalb dieses Verzeichnisses installiert 
sind, d.h. unter %appdata% (zum jeweiligen Benutzer gehörend) oder unter 
%programdata% (systemweit).

Es ist schon zu lange her, daß ich mal was mit CrossWorks gemacht habe, 
und das war obendrein für den msp430 ...
Gast #5781485
Lesenswert?

Hallo,

ich habe nun Crossworks 2.35 von System B deinstalliert, %appdata% von 
allen Crossworks-Dateien befreit und Crossworks 2.2 nochmal neu 
installiert. Hat leider nicht zum Ziel geführt, das Problem besteht 
weiterhin. Die *.map und *.hex Dateien sind weiterhin unterschiedlich 
zwischen System A & B. Wie wird das map-File eigentlich generiert?
#5786188
Lesenswert?

Hast du auf beiden die gleichen support packages (Tools - Show Installed 
Packages) installiert? Also gleiche Versionen für Prozessor und CMSIS?

Irgendwie hab ich im Hinterkopf, dass ich so ein Problem auch schon mal 
hatte. Aber mir will nicht einfallen, wie ich es gelöst habe.

Oops, gerade nachgesehen im Header meiner thumb-crt0.s
************************************************************************ 
*****
 *
 *  2011xxxx added _STACK_START/_STACK_END definition
 *  20130925 merged changes in CrossWorks 2.3
 *
 ************************************************************************ 
*****
Diese zwei globalen Variablen brauchte ich aber nur, weil ich zur 
Laufzeit den Stack checken wollte. Deine zwei fehlenden 
_stack_process_xxx_ sind nach wie vor in MEINER thumb-crt0.s welche 
aber offensichtlich nicht mehr die ist welche original mitgeliefert 
wurde.

Es sieht für mich jetzt so aus, dass in neueren thumb-crt0.s diese 
Symbole nicht mehr vorhanden sind, du aber ein nicht dazu passendes 
putchar verwendest. Wo ist putchar definiert (siehe .map file)?

Ich würde mal deine zwei thumb-crt0.s vergleichen und dann die putchars 
suchen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren