Forum: Mikrocontroller und Digitale Elektronik MSP430 / IAR Kickstart: wie Code-Adresse zur Laufzeit ermitteln ?


von Newbee (Gast)


Lesenswert?

Hallo,

ich habe die Aufgabe, eine CRC-Prüfung für einen MSP430F2013 mit
IAR Kickstart zu proggen.

Dafür benötigt man bekanntlich die Start- und Endadresse des zu 
prüfenden Speicherbereiches. Ich kann zwar das .map-File nehmen, die 
Adressen ablesen und dann händisch in den C-Code eintragen, aber bei 
einer Änderung muss ich das jedesmal machen.

Geht das nicht auch eleganter ?

Danke schon mal für jede kompetente Antwort !

Gruß

Newbee

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn das zu prüfende Objekt eine Variable ist, kann mit dem 
Adressoperator & dessen Adresse bestimmt werden. Die Länge ist mit dem 
sizeof-Operator und gegebenenfalls der Anzahl von Arrayelementen zu 
bestimmen.

Oder willst Du Programmcode prüfen?

von Newbee (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:

Hallo Rufus,

danke für deine Antwort.

> Oder willst Du Programmcode prüfen?

Genau. Der Compiler unterstützt zwar 'benannte Segmente', wie
man die nutzen kann, habe ich nicht herausgefunden.

Gruss

Newbee

von Karl H. (kbuchegg)


Lesenswert?

Wenn es darum geht, Fehler im Flash festzustellen, dann prüft man den 
kompletten Speicher. Denn jede sich verändernde Zelle ist wichtig.

Wenn es darum geht die Übertragung abzusichern

> Ich kann zwar das .map-File nehmen, die Adressen ablesen und
> dann händisch in den C-Code eintragen, aber bei einer Änderung
> muss ich das jedesmal machen.

Händisch?
Ich denke du bist Programmierer.
Das kann doch nicht so schwer sein, sich ein Programm zu schreiben, 
welches diesen Vorgang automatisiert.

Das einzige was wir Programmierer händisch machen ist, wir holen uns 
eigenhändig einen Kaffee. Das kann man keiner Maschine überlassen.

von Newbee (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Wenn es darum geht, Fehler im Flash festzustellen, dann prüft man den
> kompletten Speicher. Denn jede sich verändernde Zelle ist wichtig.
>

Das ist u.U. der falsche Ansatz:
Wenn Teile des Programmspeichers geprüft werden, in dem gar kein
Programmcode vorhanden ist, dann würde ja ein Fehler bei der CRC-Prüfung 
in diesem (leeren) Bereich das System außer Betrieb setzen, obwohl das 
Programm völlig in Ordnung ist.

> Ich denke du bist Programmierer.

Woher willst DU das wissen - ich habe das nicht behauptet.

> Das kann doch nicht so schwer sein, sich ein Programm zu schreiben,
> welches diesen Vorgang automatisiert.

Wenn das so einfach ist, warum offenbarst Du dann Dein wissen nicht ?

Dein Ansatz ist übrigens falsch: das hat weniger mit dem Programm
zu tun, sondern mit den Möglichkeiten, die der Compiler bietet, seine
interne Symboltabelle im Programm zu nutzen.

Gruß

Newbee

von Johnny B. (johnnyb)


Lesenswert?

Man könnte per Linker Script einen kleinen Bereich definieren (2-Bytes 
doer so), welcher sich ganz am Schluss des Programmes befindet.
Im C-Code braucht man dann nur noch eine const Variable dort 
hineinzuplatzieren und kann dann mit & den Pointer darauf bzw. die 
Speicheradresse ermitteln.
Wahrscheinlich gibt es auch noch elegantere Wege, aber es sollte so 
zumindest funktionieren...

von Newbee (Gast)


Lesenswert?

Johnny B. schrieb:

> Man könnte per Linker Script einen kleinen Bereich definieren (2-Bytes
> doer so), welcher sich ganz am Schluss des Programmes befindet.
> Im C-Code braucht man dann nur noch eine const Variable dort
> hineinzuplatzieren und kann dann mit & den Pointer darauf bzw. die
> Speicheradresse ermitteln.
> Wahrscheinlich gibt es auch noch elegantere Wege, aber es sollte so
> zumindest funktionieren...

Hallo Johnny,

endlich eine vernünftige Antwort auf meine Frage !

Deinen Vorschlag werde ich auf jeden Fall mal genauer untersuchen.

Danke !

Gruß

Newbee

von spontan (Gast)


Lesenswert?

Und auf diese Lösung kommst Du nicht selbst? Das mach ich seit locker 20 
Jahren so. Brauchst nicht prüfen, geht.

von Newbee (Gast)


Lesenswert?

spontan schrieb:
> Und auf diese Lösung kommst Du nicht selbst? Das mach ich seit locker 20
> Jahren so. Brauchst nicht prüfen, geht.

> Und auf diese Lösung kommst Du nicht selbst?

Wie mein Nickname schon sagt: "Newbie". Das bedeutet auf deutsch: 
Anfänger.

Wenn nur eine const-Variable definiert ist, habe ich die im besten Fall
die Anfangsadresse des const-Segments - den könnte man natürlich mit 
prüfen.
Aber die Endadresse des Code-Segments habe ich dann immer noch nicht.
Ich muss also immer noch das ganze Code-Segment prüfen - was ich aus den
weiter oben genannten Gründen nicht will.

Ist denn keiner hier im Forum, der IAR als Compiler für den MSP430 
einsetzt ???

Gruß

Newbee

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.