Befehlssatz von Mikrocontrollern auslesen

Gast #3650476
Lesenswert?
• ▲
▼
Hi,

Ich programmier gerade einen Code, der sowohl auf einem STM32F4 als auch 
F0 und vermutlich später ein paar mehr laufen soll. Zum optimieren des 
ganzen würde ich gerne ein paar inline Assembler Befehle nutzen, 
allerdings wären das je nach Coretex andere Befehle.

Zum Beispiel ein Bitswap:
Also bit0 -> bit31 bit1 -> bit30 , ... , bit31 -> bit0
Verwendet habe ich dazu den Code von hier:
http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious
1
  // swap odd and even bits
2
  a = ((a >> 1) & 0x55555555) | ((a & 0x55555555) << 1);
3
  // swap consecutiae pairs
4
  a = ((a >> 2) & 0x33333333) | ((a & 0x33333333) << 2);
5
  // swap nibbles ...
6
  a = ((a >> 4) & 0x0F0F0F0F) | ((a & 0x0F0F0F0F) << 4);
7
  // swap bytes
8
  a = ((a >> 8) & 0x00FF00FF) | ((a & 0x00FF00FF) << 8);
9
  // swap 2-byte long pairs
10
  a = ( a >> 16             ) | ( a               << 16);

GCC weiß allerdings nicht, dass es sich dabei um einen Bitswap handelt, 
also wird auf einem Cortex M4 nicht RBIT und bei einem M0 zumindest die 
Hälfte mit einem REV "abgekürzt" 
(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489h/Cihjgdid.html)

Habe noch ein paar andere Fälle, in denen ich die DIV Operation anders 
behandeln könnte, wenn es diese (beim M0) nicht gibt.

Also jetzt zu meiner Frage, Gibt es die Möglichkeit in GCC schon über 
Preprozessor-Anweisungen nach den unterstützen Befehlen zu Fragen?
Ich könnte natürlich auch Fragen, ob es sich um einen Cortex M0 oder M4 
handelt, dann müsste ich das aber für jeden Prozessor machen, der später 
dazu kommt. Oder wäre das die allgemeine Vorgehensweise.
Gast #3650544
Lesenswert?
• ▲
▼
Ja, man über setzt den Code für jeden Core.Im Quelltext definierst du 
dss entsprechend. #define TARGETCORE CortexM0 // M3 M4 ...

An den gewünschten Stellen wird dann bedingt compiliert.
#ifdef TA... = ...
...
#elseifdef TA... = ...
...

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.