Forum: Mikrocontroller und Digitale Elektronik Von ARM7 zu ARM Cortex-A ratsam?


von Ahmad Mahmad (Gast)


Lesenswert?

Moin,
ich werde mich demnächst mit der GBA Entwicklung auseinander setzen, 
dessen Herzstück ein ARM7 Basierter uC ist.
Grund dafür ist, dass ich mich schon mal auf den Umstieg zu den großen 
Playern vorbereiten möchte (gemeint ist die Cortex-A Reihe).
(Davor hatte ich viel mit AVR8 und Z80 Assembler Programmierung zu tun.)
Programmiert wird Anfangs nur mit Assembler, später dann auch in 
Hochsprachen wie C/C++.

Jetzt stellt sich mir aber die Frage, ob ich nicht besser gleich zu den 
Cortex-M Reihen übergehen sollte, da ich denke, dass diese mehr mit der 
"A" Reihe gemeinsam haben als die alte ARM7.

Soweit ich weiß unterstützen beide Architekturen (ARM7 und Cortex-M) die 
Thumb Instruktionen, was eine wichtige Gemeinsamkeit zu scheinen ist.
Was sagt ihr dazu, lieber ARM7 oder Cortx-M Reihe bevor es zu den 
Cortex-A Reihen geht? Bitte mit Begründung :)

von Random .. (thorstendb) Benutzerseite


Lesenswert?

ARM7  --> Cortex-M (Microcontroller)
ARM9  --> Cortex-R (Realtime)
ARM11 --> Cortex-A (Application)

Der passende Umstieg von ARM7 auf Cortex wäre demnach Cortex-M (z.B. M3, 
M4). Geht es nur um Rechenleistung, es gibt mittlerweile Cortex-M (4, 7) 
mit bis 300MHz.
Willst du ein Linux programmieren oder dich bare-metal mit MMU 
rumschlagen, nimm Cortex-A :-)

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ahmad Mahmad schrieb:
> Was sagt ihr dazu, lieber ARM7 oder Cortx-M Reihe bevor es zu den
> Cortex-A Reihen geht? Bitte mit Begründung :)

Cortex-A und -M haben unterschiedliche Anwendungszwecke. Du musst 
wissen, was dir wichtig ist:
- Leistungsaufnahme
- Echtzeitfähigkeit
- Performance, Rechenleistung
- Speichergröße
- Multimedia-Fähigkeiten
- Möglichkeit "richtige" Betriebssysteme wie Linux auszuführen
- Möglichkeit, ohne Betriebssystem ("Bare Metal") zu arbeiten
- Komplexität der Programmierung
- Schnelle Interfaces
- Flexible Auswahl bei Gehäuse, Varianten
- Einfache Integration in Schaltungen
- Preis-Rechenleistungs-Verhältnis
usw usf...

Die Cortex-A sind sehr viel komplexer als die -M und ohne Linux schwer 
bis gar nicht nutzbar. Die -M zielen auf den typischen 
Mikrocontroller-Markt ab, eben wie AVR.

"ARM7" ist etwas unspezifisch; die gibt es auch in "klein" (ARM7TDMI, 
Mikrocontroller) bis "groß" (ARM720T, Anwendungsprozessor), eben wie 
Cortex-M und -A. Daher kann man nicht "einen" Nachfolger empfehlen.

von Jim M. (turboj)


Lesenswert?

Random .. schrieb:
> es gibt mittlerweile Cortex-M (4, 7)
> mit bis 300MHz.

Mach mal 600MHz draus, siehe z.B. i.MX RT Serie von NXP:

https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/i.mx-applications-processors/i.mx-rt-series:IMX-RT-SERIES

von Lothar (Gast)


Lesenswert?

Niklas G. schrieb:
> Die Cortex-A sind sehr viel komplexer als die -M und ohne Linux schwer
> bis gar nicht nutzbar

Die Cortex-A sind ganz ohne Linux genauso einfach zu programmieren. Es 
gibt Libraries und RTOS

Jim M. schrieb:
> Mach mal 600MHz draus, siehe z.B. i.MX RT Serie von NXP

Ein BCM283x ist viel billiger und wesentlich schneller.

Random .. schrieb:
> bare-metal mit MMU rumschlagen

Auch nicht anders als sich bare-metal mit MPU rumschlagen.

von Niklas Gürtler (Gast)


Lesenswert?

Lothar schrieb:
> Die Cortex-A sind ganz ohne Linux genauso einfach zu programmieren. Es
> gibt Libraries und RTOS

Die Libraries und RTOS und allgemein die Umgebungen sind aber auch 
deutlich komplexer. Bis man z.B. bei TI Sitara erstmal durchgeklickt hat 
welche Komponente wofür ist...

von Niklas Gürtler (Gast)


Lesenswert?

Lothar schrieb:
> Auch nicht anders als sich bare-metal mit MPU rumschlagen.

Bei der MMU muss man sich auch erstmal mit den ganzen Cache 
Konfigurationen auseinander setzen und die richtigen Maintenance 
Operationen benutzen wenn es um Multicore oder DMA geht. Die 
Informationen dazu sind auch etwas versteckt und man macht das Programm 
schnell mal langsamer als schneller. Sowas wie Page Coloring ist auch 
nicht sofort einsichtig...
Für das Exception Handling braucht's auch eine gute Dosis Assembler; bei 
Cortex-M geht das komplett in C.

von Lothar (Gast)


Lesenswert?

Niklas Gürtler schrieb:
> TI Sitara erstmal durchgeklickt hat welche Komponente wofür

Kannst Dir mal ansehen wie es dieses "einfache" OS auf TI Sitara macht:

https://www.riscosopen.org/wiki/documentation/show/OS_Memory

https://www.riscosopen.org/content/downloads/titanium

https://gitlab.riscosopen.org/RiscOS/Sources/HAL/HAL_Titanium

von Thomas (kosmos)


Lesenswert?

endlich mal Game Boy Advance

von Lothar (Gast)


Lesenswert?

Thomas O. schrieb:
> Game Boy Advance

Der hatte einen ARM7/Z80 Dual-Core :-) Lief wohl auf CP/M

von Lothar (Gast)


Lesenswert?

Niklas Gürtler schrieb:
> Bei der MMU muss man sich auch erstmal mit den ganzen Cache
> Konfigurationen auseinander setzen

Nicht wenn mein Programm das einzige ist was läuft. Und es ging doch 
darum Cortex-A wie Cortex-M als uC zu nutzen oder? Ausserdem gibt es 
auch Dual-Core uC wie z.B. LPC5500 mit 2x M33

  ; protected memory access
  MOV   R0, #&0D      ; physical to logical address map (permanent)
  LDR   R1, gpiobase  ; physical address
  MOV   R2, #&100     ; logical address space size 256 bytes
  SWI   "OS_Memory"   ; MMU
  MOV   R12, R3       ; returned logical address pointer

von Niklas Gürtler (Gast)


Lesenswert?

Lothar schrieb:
> Kannst Dir mal ansehen wie es dieses "einfache" OS auf TI Sitara macht:

Ich weiß wie das geht, habe auch eine Art RTOS für Sitara 
geschrieben... habe auf jeden Fall trotz Cortex-M-Erfahrung eine Weile 
gebraucht um das alles zu sortieren. Allein schon das Projekt Setup in 
CCS ist spaßig.

Lothar schrieb:
> Nicht wenn mein Programm das einzige ist was läuft.

Doch, auch dann braucht man die MMU um den Cache zu konfigurieren. Man 
behält aber eben ständig die gleiche Konfiguration bei. Wobei: Wenn man 
das für "Singlethread" hinbekommen hat ist das Umschalten beim 
Kontextwechsel dann auch nicht mehr so weit weg.

Lothar schrieb:
> Und es ging doch darum Cortex-A wie Cortex-M als uC zu nutzen oder?

Ja? War mir nicht klar.

Lothar schrieb:
> SWI   "OS_Memory"   ; MMU

Heißt das nicht mittlerweile "SVC"...

von Lothar (Gast)


Lesenswert?

Niklas Gürtler schrieb:
> Heißt das nicht mittlerweile "SVC"

Es ist derselbe ARM Opcode der je nach verwendetem Assembler als SWI 
(AASM) oder SVC (GNU Assembler) angezeigt wird.

von Thomas (kosmos)


Lesenswert?

Lothar schrieb:
> Thomas O. schrieb:
>> Game Boy Advance
>
> Der hatte einen ARM7/Z80 Dual-Core :-) Lief wohl auf CP/M

mir war schon klar das etwas anderes gemeint ist. Kleiner Seitenhieb auf 
dieses Hijacking, früher hat man nach AVR gegoogelt und es kamen 
µikrocontroller von Atmel als Suchergebnisse heutzutage steht das für 
automatic voltage regulation, Arbeitsvertragsrichtlinien, 
Arbeitgeberverband der Deutschen Volksbanken und Raiffeisenbanken...

von S. R. (svenska)


Lesenswert?

Lothar schrieb:
>> Game Boy Advance
> Der hatte einen ARM7/Z80 Dual-Core :-) Lief wohl auf CP/M

Der Z80 ist von Advance-Cartridges nicht nutzbar, und CP/M geht wegen 
des unpassenden Speicherlayouts auch nicht. Leider.

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.