www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HCS12 Codewarrior und allokieren von lokalen Daten


Autor: Franjo R. (franjo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also hab folgendes Problem:

Möchte mit meinem Board (s.h. unten) im CW debuggen aber wie ich gerade
festgestellt habe ist das bei mir nur beschänrkt möglich.
Im Hi-Wave Simulator bekomme ich bei alle "LOKALEN" Variablen/Pointer
auf Strukturen etc. die Meldung: "Not allocated".

Durch das Betrachten des Disassembly stellte ich fest das die Daten
nicht im Heap Abgelegt werden sondern im Stack. Das bedeutet ich die
meisten Daten und ihre Werte nicht betrachten ausser in Zusammenarbeit
des SP und der Memory Map..... sehr sehr lästig.

Kann mit jemand sagen wie ich den Linker auffordere für die benutzen
Daten Speicher zu allokieren??

Ein Bildausschnitt könnt ihr euch im Anhang dazu anschauen wie das so
ungefähr bei mir aussieht.

Hardware:

Dragon-12 HCS12 Board mit S12DP256B µC

Software:

Metrowerks Codewarrior 3.1 SP 1

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das ist doch eigentlich völlig egal wo die lokalen Variablem liegen,
auf dem heap sind die Daten außerhald der funktion auch nicht gültig
und werden ggf überschrieben. Der Stack ist allerdings schneller, da
der Stackpointer und die Push und Pull befehle im Prozessor integriert
sind. Das ablegen auf dem Heap würde da länger dauern.

Eckhard

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... sieht so aus, als nutzt keiner diese Tools.
Die Metrowerks CW Compiler sind grotten-kompliziert.

Ich verwende für das "T-Board" vom Elektronikladen auch nur den ICC12
von imagecraft in Verbindung mit dem Monitorprogramm DBUG12.
Das alles funktioniert einfach und prima.
Eine eigene BDM Möglichkeit habe ich nicht. Mache allerdings nur
kleinere "Testprojekte" mit dem Teil.

Klaus

Autor: Franjo R. (franjo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu Eckhard:
okay hast schon recht dennoch wieso sehe ich die lokalen Variablen
nicht?? Ich befinde mich schon in der Funktion und betrachte die
Variablen dieser Funktion.

Ich denke eher der Klaus hat recht. Im allgemeinen ist es nicht gerade
einfach den Assembler Code des Compilers immer zu folgen, jedenfalls
für jemanden der momentan AARM-Compiler Code (LPC2148) sieht.

Leider kann ich die Entwicklungsumgebung nicht wechseln da diese von
meinem Prof bevorzug wird. Morgen hab ich ne Sprechstunde bei ihm und
werd dann hier rein posten wenn er mir weiterhilft

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

CW ist garnicht so schlecht wenn man sich erstmal dran gewöhnt hat. Ich
nutze das aber eher im 8 Bit bereich. Kannst ja nochmal bei Freescale im
 Forum dein Glück versuchen.

http://forums.freescale.com/

Eckhard

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute es liegt daran, daß der Compiler die Variablen
wegoptimiert hat. Das habe ich bei Codewarrior / HiWave auch
schon oft gehabt.

Gruß, Marcus

Autor: Franjo R. (franjo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ja das ist wahr ein paar Sachen gefallen mir beim CW schon, z.B. das
man im Hi-Wave im Simulator Modus die LED anzeigen kann ob se blinkt
oder net etc. Bin ja auch mehr oder weniger am Anfang ihn
kennenzulernen.
Mein Problem ist weiterhin beständig.
Marcus hat ja nen Tipp gegeben: "wegoptimierung" leider hat er da
Aufgehört weiter zu posten wo ich es nötig hab :-) mal sehen morgen
weiß ich da vielleicht etwas mehr.

Gruß
Franjo

Autor: ---- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Variablen volatile machen, dann muss der Compiler die Variable bei
jedem Zugriff neu laden und darf sie nicht in einem Register
vorhalten/optimieren.
Wenn das volatile stört (und du nicht ständig den Sourcecode ändern
willst), dann kannste das ja durch ein Define ersetzen, das du z.B. nur
bein Compilieren für Debugzwecke setzt.
#DEFINE  DEBUGVOLATILE  volatile
später dann:
DEBUGVOLATILE uint16_t Variable;

----, (QuadDash).

Autor: Franjo R. (franjo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Volatile gefällt mir sehr gut ^^

Also hab heute mit meinem Prof geredet. Es schaut so aus das der HCS12
ja ein 16 Bit Mikrocontroller ist allerdings mit den vorhanden Pages
mit 24 Bit Adresse arbeitet. Also 16 Bit Adresse + 8 Bit Page Register.
Mir reicht jedoch der ROM aus und daher habe ich in der LinkerCommand
File (*.prm) einfach die Pages im Bereich Copy auskommentiert.

Zustäzlich habe ich das Memory Modell von Banked auf SMALL gesetzt und
siehe da ... Problem gelöst.

Wie das ganze allerdings mit den Pages richtig funktionieren soll weiß
ich nicht.

Trotzdem danke an alle die gepostet haben

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.