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


von Franjo R. (franjo)


Angehängte Dateien:

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

von Eckhard (Gast)


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

von Klaus (Gast)


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

von Franjo R. (franjo)


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

von Eckhard (Gast)


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

von Marcus (Gast)


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

von Franjo R. (franjo)


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

von ---- (Gast)


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).

von Franjo R. (franjo)


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

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.