diff --git a/Writerside/images/image_291.png b/Writerside/images/image_291.png new file mode 100644 index 0000000..71a1a04 Binary files /dev/null and b/Writerside/images/image_291.png differ diff --git a/Writerside/images/image_292.png b/Writerside/images/image_292.png new file mode 100644 index 0000000..08832ab Binary files /dev/null and b/Writerside/images/image_292.png differ diff --git a/Writerside/images/image_293.png b/Writerside/images/image_293.png new file mode 100644 index 0000000..1014ce6 Binary files /dev/null and b/Writerside/images/image_293.png differ diff --git a/Writerside/images/image_294.png b/Writerside/images/image_294.png new file mode 100644 index 0000000..313c4d2 Binary files /dev/null and b/Writerside/images/image_294.png differ diff --git a/Writerside/images/image_295.png b/Writerside/images/image_295.png new file mode 100644 index 0000000..2607466 Binary files /dev/null and b/Writerside/images/image_295.png differ diff --git a/Writerside/images/image_296.png b/Writerside/images/image_296.png new file mode 100644 index 0000000..ad4bf8b Binary files /dev/null and b/Writerside/images/image_296.png differ diff --git a/Writerside/images/image_297.png b/Writerside/images/image_297.png new file mode 100644 index 0000000..c3d0343 Binary files /dev/null and b/Writerside/images/image_297.png differ diff --git a/Writerside/images/image_298.png b/Writerside/images/image_298.png new file mode 100644 index 0000000..f779c5e Binary files /dev/null and b/Writerside/images/image_298.png differ diff --git a/Writerside/images/image_299.png b/Writerside/images/image_299.png new file mode 100644 index 0000000..f0c371f Binary files /dev/null and b/Writerside/images/image_299.png differ diff --git a/Writerside/images/image_300.png b/Writerside/images/image_300.png new file mode 100644 index 0000000..6bfb1a2 Binary files /dev/null and b/Writerside/images/image_300.png differ diff --git a/Writerside/images/image_301.png b/Writerside/images/image_301.png new file mode 100644 index 0000000..5eac37e Binary files /dev/null and b/Writerside/images/image_301.png differ diff --git a/Writerside/in.tree b/Writerside/in.tree index 8b34fdb..527ffb8 100644 --- a/Writerside/in.tree +++ b/Writerside/in.tree @@ -43,6 +43,9 @@ + + + @@ -56,4 +59,5 @@ + \ No newline at end of file diff --git a/Writerside/topics/RA/arm.md b/Writerside/topics/RA/arm.md new file mode 100644 index 0000000..fb2e5e4 --- /dev/null +++ b/Writerside/topics/RA/arm.md @@ -0,0 +1,102 @@ +# ARM + +## ARM Prozessoren +### Architektur Revisionen +- Unterschiedliche Features + - bspw. unterschiedliche Multiplikationsbefehle, Adressierungsarten, ... +- jeweils gleiches Befehssatzdesign für jede Revision + - aktuell: v7 / v8 + +### Profile: Konkrete Prozessor-Implementierungen +- Application Profil ['A']: + - High Performance + - bspw. Mobile, Enterprise +- Real Time Profil ['M']: + - Embedded Anwendungen + - bspw. Automotive, Industriesteuerungen +- Microcontroller Profil ['M']: + - Mikrocontroller für große Bandbreite an Anforderungen + - Anzahl Gatter, Kosten, Realtime, Performance + + +- Aktuell in 2017: + - v7 (32Bit): + - Cortex A7, Cortex M4, Cortex M0+ + - v8 (64Bit): + - Cortex A53, Cortex A57 + + +## Bedeutung des Befehlssatzes (ISA) +- Befehlssatz = Instruction Set Architektur +- ISA Level + - ist das Interface zwischen Soft- und Hardware + - definiert die Sprache, die von Soft- & Hardware verstanden werden muss +- ![image_291.png](image_291.png) + + +### ARM Instruction Sets +![image_292.png](image_292.png) +- ARM unterstützt derzeit 3 IS + - A64 instruction set + - eingeführt mit ARMv8-A, um 64 Bit zu unterstützen + - A32 instruction set ("ARM") + - 32 Bit Befehlsatz in pre-ARMv8-Architekturen + - T32 instruction set ("Thumb"/"Thumb2") + - komprimierter 16/32 Bit Befehlssatz (gemischt) + - in pre-ARMv8-Architekturen + + +## Coding Standards UAL und APCS +### Unified Assembler Language (UAL) +- Coding Standard, der von Compilern für ARM (32bit) und Thumb verstanden wird +- Macht Programme möglich, die mit verschiedenen Prozessoren kompatibel sind + +### ARM Program Calling Standard (APCS) +- Regelt Aufruf von + - Unterprogrammen + - Verwendung von Registern + - ... +- Ermöglicht Verwendung von Objektbibliotheken, welche von anderen Compilern übersetzt wurden + + +## Architektonisches Erbe der ARM-Prozessoren +**Verwendete Merkmale** +- RISC +- Grundlegendes Design-Prinzip: Einfachheit +- Load/Store Architektur (Register-Register), von Neumann +- 32Bit oder 64Bit (1 Wort) + - 1Byte = 8Bit +- Byteweise Adressierung des Speichers +- Little-Endian und Big-Endian kompatibel + - Vorteil für Einsatzzweck als Standard CPU in Kommunikationsgeräten + - Standard: Little-Endian +- [3-Adressbefehle](Klassifikation.md#3-adress-befehle) (32Bit) oder Thumb + +**Verworfene Merkmale** +- Registerfenster + - wird nur bei SPARC Prozessoren genutzt +- Delayed Branches + - der dem Branch folgende Befehl wird ausgeführt bevor der Sprung durchgeführt wurde + - Behandlung von Interrupts und Exceptions schwieriger +- Ausführung aller Befehle in einem Taktzyklus + - setzt [Harvard](MU6Rechner.md#harvard-architektur) voraus + - Kompensation durch verbesserte Adressierungsmodi + + +## Ein erstes ARM-Programm (GNU) +![image_293.png](image_293.png) + + +### Wie wird aus einem Programm Maschinencode? +![image_294.png](image_294.png) +- Codierungsvorgang immer gleich + - kann von Programm (_Assembler_) übernommen werden + - Kann weitere Erleichterungen ermöglichen + - Bezeichner Konstanten, Daten, Adressen + - Reservieren von Speicherbereichen für (Zwischen-)Ergebnisse + - Anlegen und Initialisieren von Daten und Datenstrukturen beim Programmstart hinzufügen + - + + +## [ARM Toolchain](arm_toolchain.md) + diff --git a/Writerside/topics/RA/arm_toolchain.md b/Writerside/topics/RA/arm_toolchain.md new file mode 100644 index 0000000..8e40278 --- /dev/null +++ b/Writerside/topics/RA/arm_toolchain.md @@ -0,0 +1,48 @@ +# ARM Toolchain +![image_296.png](image_296.png) + +## Targets +### Entwicklung auf dem Device +- Native Toolchain +- Benötigt ein OS + +### Cross Entwicklung +- Compiler auf dem PC übersetzt für Hardware für die Zielplattform + +### Entwicklung im Emulator auf dem PC +- Compiler auf dem PC übersetzt für Hardware, ausgeführt im Simulator +- Wenn Hardware nicht verfügbar oder Entwicklung zeitaufwändig +- Insight, QEmu + +### Bare Metal +- Für Mikroprozessor ohe BS + +### Betriebssysteme +- Linux +- Embedded Windows +- Realtime OS + + +## Toolchain für das Praktikum +![image_297.png](image_297.png) + +## GNU ARM Assembler +- ![image_298.png](image_298.png) + - rn = Registername + + +### Assembler-Direktiven +- können Übersetzungsvorgang steuern +- können Speicherbereiche für das Programm reservieren + - ![image_300.png](image_300.png) +- können Datenstrukturen für das Programm anlegen und initialisieren +- ![image_299.png](image_299.png) + + +### Pseudobefehle +- Befehle, die es in der Maschinensprache nicht gibt, aber häufig gebraucht werden +- Assembler übersetzt diese in eine geeignete Sequenz von "echten" Assemblerbefehlen +- Beispiel: + - ![image_301.png](image_301.png) +- +