Forum: Mikrocontroller und Digitale Elektronik Zugriff auf Cortex M3 CPU Core Register


von Andi (Gast)


Lesenswert?

Hallo zusammen,

ich habe probleme direkt auf die CPU register zuzugreifen. Ich nutze:


register volatile uint32_t  REGISTER1;

um diese zu anzusprechen. Jedoch befindet sich die abgelegte Variable im 
normalen SRAM Bereich und nicht wo anders.

Gibt es irgendwelche voreinstellungen?

Vielen Dank schonmal!

von Uwe Bonnes (Gast)


Lesenswert?

Warum willst Du schlauer als der Kompiler sein? Was versprichst Du dir 
davon?

von Steel (Gast)


Lesenswert?

Andi schrieb:
> ich habe probleme direkt auf die CPU register zuzugreifen.

Das wundert mich nicht. So macht man das nämlich nicht.

von Oberlehrer (Gast)


Lesenswert?

Am besten, Du schnappst Dir ein Buch über C und machst dann weiter.
Dein Code ist nämlich totaler Blödsinn...

von Andi (Gast)


Lesenswert?

Oberlehrer schrieb:
> Am besten, Du schnappst Dir ein Buch über C und machst dann
> weiter.
> Dein Code ist nämlich totaler Blödsinn...

Totaler Blödsinn?

Der Code funktioniert wunderbar. Damit kann man auch wunderbar die CPU 
Register beschreiben.

Hatte nur das Problem, dass der Compiler jedesmal wenn ich das Register 
ändere auch den Stack geändert hat (wahrscheinlich abhängig von Compiler 
und Version +opt) und dies bei einem Ram Test leider nicht funktioniert 
--> back to Assembly

Uwe Bonnes schrieb:
> Warum willst Du schlauer als der Kompiler sein? Was versprichst Du
> dir
> davon?

Ramtest. Um den RAM-Inhalt nicht zu verlieren werden die CPU register 
als Ablage genutzt.

Steel schrieb:
> Andi schrieb:
>> ich habe probleme direkt auf die CPU register zuzugreifen.
>
> Das wundert mich nicht. So macht man das nämlich nicht.

Normal in Assembler.. ist mir klar. Funktioniert allerdings auch.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

CMSIS, core_cmFunc.h und folgende. Da findest du, wie es gemacht wird:
1
__STATIC_INLINE uint32_t __get_MSP(void)
2
{
3
  register uint32_t __regMainStackPointer     __ASM("msp");
4
  return(__regMainStackPointer);
5
}

Dies ist die armcc Variante, die anderen, u.a. gcc, kommen weiter unten.

: Bearbeitet durch User
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.