Auswirkung unterschiedlicher Architektur

OP #5023262
Hallo liebes Forum,

Erstmal danke, dass ich hier meinen ersten Beitrag(Frage) verfassen 
darf.

Nehmen wir mal die ARM-Reihe. Was verändert sich für mich als C-Anfänger 
wenn ich eine andere Architektur verwende? Schließlich programmiere ich 
ja nicht in Assembler. Den Code den ich eingebe ist der Selbe, egal ob 
load/store Architektur oder nicht?
Ist in diesem Fall eigentlich nur der Compiler betroffen?

Mein Dozent meinte letztens,dass der neue Cortex R4 Atomare Befehle 
unterstützt. Deswegen die Anregung.


LG
Gast #5023354
Es ändert sich nichts.
Solange nicht auf Hardware zugegriffen wird.
Zu beachten ist, dass ints unterschiedluch groß sein können. Deshalb 
sollte man im Vorfeld schon Typen wie uint32_t oder size_t benutzen.
Gast #5023414
Array D. schrieb:

> Mein Dozent meinte letztens,dass der neue Cortex R4 Atomare Befehle
> unterstützt. Deswegen die Anregung.

Wenn Du auf das Level gehst, wo diese Eigenarten wichtig sind, dann mußt 
Du sowieso in Assembler programmieren, weil Du ansonsten keine Gewißheit 
hast, welche Befehle der Compiler am Ende überhaupt nimmt.

Gibt aus C-Sicht noch ein paar Feinheiten; neben den ints ist das auch 
die signedness des Datentyps char. x86 und ARM sind da per default genau 
umgedreht. Das ist aber egal, solange Du mit char nicht rechnest, 
sondern nur Zeichen speicherst. Zum Rechnen nimmt man einfach uint8_t 
bzw. int8_t.

Was man auch oft als Fehler sieht in C-Code, ist die implizite Annahme, 
ein Pointer müsse 4 Byte groß sein. Das geht bei 64bit-Code dann schief. 
Will man mal wirklich bitweise auf Pointern herumfummeln, dann gibt's 
dafür den Datentyp uintptr_t. Der gibt einem immer einen Integer, der 
einen Pointer fassen kann.

Dann hat man bei manchen, aber nicht allen ARMs das Alignment. Manche 
können keinen int auf einer ungeraden Adresse verarbeiten (gibt nen 
Absturz); andere können es, brauchen dafür aber zwei Zugriffe, zwischen 
denen auch noch ein Interrupt passieren kann. Eine weitere Folge ist, 
daß Structs sich auf manchen ARMs packen lassen, auf anderen nicht.

Endianess ist natürlich auch immer ein Thema, sobald man Daten zwischen 
verschiedenen Architekturen tauscht (man normiert das Format dann an den 
externen Schnittstellen).
#5023576
Nop schrieb:
> Dann hat man bei manchen, aber nicht allen ARMs das Alignment. Manche
> können keinen int auf einer ungeraden Adresse verarbeiten (gibt nen
> Absturz); andere können es, brauchen dafür aber zwei Zugriffe,

Bis einschliesslich ARMv5 (z.B. ARM7,ARM9) gibts weder einen Trap noch 
das, was man dabei haben will, sondern Datenmüll.

Beim Load wird das Wort an der Adresse gelesen und anhand der unteren 
beiden Adressbits rotiert. Byte-Load unterscheidet sich vom Word-Load 
nur in der Maskierung.
#5024189
A. K. schrieb:
> Nop schrieb:
>> Dann hat man bei manchen, aber nicht allen ARMs das Alignment. Manche
>> können keinen int auf einer ungeraden Adresse verarbeiten (gibt nen
>> Absturz); andere können es, brauchen dafür aber zwei Zugriffe,
>
> Bis einschliesslich ARMv5 (z.B. ARM7,ARM9) gibts weder einen Trap noch
> das, was man dabei haben will, sondern Datenmüll.

Also auf dem ARM7TDMI (ARMv4), den ich mal programmiert habe, wurde in 
so einem Fall eine Hardware-Exception ausgelöst.
#5024544
Rolf M. schrieb:
> Also auf dem ARM7TDMI (ARMv4), den ich mal programmiert habe, wurde in
> so einem Fall eine Hardware-Exception ausgelöst.

War Fehlinformation aus
https://www.heyrick.co.uk/armwiki/Unaligned_data_access

Das AARMv5 sagt, dass man bei implementiertem System Control Coprocessor 
einen Alignment-Trap einschalten kann. Die ersten ARM Versionen hatten 
das definitiv nicht.
Gast #5024782
Rufus Τ. F. schrieb:
> Das liegt ausschließlich im  verwendeten Compiler.

Richtig, und man kann das auf Wunsch auch mit einem Compiler-Switch 
ändern. Aber es ist definitiv ein potentieller Stolperstein für einen 
C-Anfänger, und wenn man da nicht drauf kommt, kann man ziemlich lange 
suchen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.