Archiv verlassen und diese Seite im Standarddesign anzeigen : Schnelle Microcontroller?
Salvador
05.03.2009, 20:43
Hi,
nach meinen ersten Projekten mit den AVRs (ATMega Familie in Basic) frage ich mich, wie schnell eigentlich gängige und erschwingliche Microcontroller heute sind? Bei den ATMega's hört's bei 20Mhz auf, aber gibt es denn Welche, die mehr machen? Habt ihr damit schon Erfahrungen gemacht? Wie lassen die sich programmieren?
Besserwessi
05.03.2009, 21:52
Die AVRs sind mit 20 MHz schon recht schnell. Es geht schneller z.B. mit ARM Controllern oder AVR32. Allerdings laufen die chips in der Regel dann mit 3.3 V oder weniger und die anforderungen an die Platine sind einiges höher.
Die 20 MHz sind auch schon gar nicht so schlecht in der Geschwindigkeit. Eher kommt man da an die Grenzen mit dem RAM.
Die ARM Controller und die meisten anderen 32 Bit Controller kann man über das JTAG interface programmieren. Als Programmiersprache hat man in der Regel C über eine Version von Gcc und ggf. auch andere Compiler.
SprinterSB
05.03.2009, 21:58
Wie schnell ein µC läuft ist genau betrachtet uninteressant.
Interessant ist, wie schnell man die gewünschte Aufgabe(n) damit lösen kann, wieviel Energie er dabei verheizt, was er kostet, welche Peripherie er hat, ob hocheffiziente Compilersysteme für ihn verfügbar sind, etc.
Die (interne und externe) Peripherie spielt eine wichtige Rolle: Wenn viel Float-Arithmetik zu machen ist, ist ein langsamerer µC, der eine FPU hat, durchaus einem merklich schnelleren überlegen, der das Float-Zeug per Software berechnen muss.
Weiterer Aspekt ist zB der Speicher. Daß man den Speicherinhalt direkt zur Verfügung hat wie auf AVR, ist auf 32-Bit Boliden nicht mehr unbedingt gegeben. Es ist durchaus möglich, daß eine Speicher-Operation so lange dauert wie 20 Ganzzahl-Additionen.
Auch Parallelisierung spielt eine Rolle. Wenn man einen Puffer per DMA an eine Schnittstelle geben kann und nicht für jedes einzelne Byte eine ISR bemühen muss, oder gar die Schnittstelle in Software realisieren muss, ist man deutlich schneller.
Zum Thema Parallelisierung gehören auch die Instruktions-Pipelines modernen µC, in denen mehrere Befehle quasi gleichzeitig ausgeführt werden, falls sie nicht leerläuft. Leerlaufen kann sie bei Sprüngen oder lahmen Speicherzugriffen, daher legen moderne Compiler auf solche Hardwareeigenheiten und die dafür benötigten Optimierungen viel Wert, indem sie zB Werte vorladen, damit sie zum Zeitpunkt der Verwendung schon geladen sind, oder indem sie Sprünge durch geschickte Arithmetik ersetzen.
Ein TriCore (wie er zB in PKW zum Einsartz kommt), kann bis 150 MHz getaktet werden. Solch hohe Taktraten werden üblicherweise aus einem externen Takt/Quarz via PLL erzeugt.
Last not least spielt die Software eine ganz entscheidende Rolle, und welche Algorithmen und Verfahren verwendet werden.
Insbesondere der effizienten Codeerzeugung durch einen Compiler kommt eine zentrale Bedeutung zu: der Compiler sortiert zB die Befehle so um, daß eine Pipiline optimal gefüllt wird und keine Lücken entstehen, und indem er viel andere, ausgefeilte Optimierungsstrategien anwendet.
Wenn ich mal zwei ganz konkrete Beispiele anführen darf...
1. LPC2364 von NXP
Das ist ein ARM7, der mit 72MHz läuft (durch den µC selbst per PLL generiert aus einem 24MHz Quarz). Bei der Programierung gibt es zwar etwas mehr zu beachten als bei z.B. einem AVR, aber die Unterschiede sind garnicht so groß wie man denkt.
2. ADSP-BF535 von Analog Devices
Ein mit 300MHz getakteter 16-Bit Festkomma DSP. Das Teil hat richtig Power, ist aber nochmal etwas komplexer als der ARM7 (und natürlich eher auf Signalverarbeitung ausgelegt).
Mit beiden habe ich beruflich zu tun, und wenn ich einen für Hobbyprojekte empfehlen sollte wäre es der LPC, unter anderem weil er leicht erhältlich und günstig ist.
Salvador
06.03.2009, 13:23
Hört sich sehr interessant an.
Nur, bis ich an die Hardware gehe, sollte ich lieber mal meine Programmierkünste verbessern... Gerade die Aussicht, dass ich mit Basic irgendwann nicht mehr weiter komme, verstimmt mich etwas. Bisher komme ich nicht so ganz hinter die Logik der "C"- Programmiersprache :-k :-s
Also ich meine, der Atmel reicht schon für den Hausgebrauch. Wer Basic verwendet und dann sich beklagt, dass seine Programme zu langsam laufen: Selber schuld! Basic braucht für jeden Befehl bis zu 5-Mal so lange wie C: 2 Zyklen laden, 1 bearbeiten, 2 Zyklen speichern. Basic erledigt arbeitet immer mit RAM und kann nicht wie C nur mit Registern arbeiten. C sind es im Optimalfall 1 (und der tritt auch zu 90% im Hausgebrauch ein!
Basic mag zwar einfach zu lernen sein, aber in meinen Augen, das Ding der verschwendischste Compiler der Welt. Und C ist wirklich nicht schwer. Manche Beklagen, dass es zu verschnorkelt wäre, ich persönlich finde aber, dass dies gerade die Sprache durch die Strichpunkte und Klammern übersichtlich und nachvollziehbar macht. Eben Logisch!
(War das jetzt zu enthusiastisch?)
Grüße
Michael
Besserwessi
06.03.2009, 16:18
So ein AVR mit 20 MHz ist von der Geschwindigkeit etwa 30 mal schneller als so ein alter Comodore C64, Apple II oder ähnliches. Das ist ähnlich wie die ersten Macs, Amiga oder ein 286er PC, wobei der Vergleich da aber stärker vom Problem anhängt.
Salvador
06.03.2009, 16:56
Bisher beklage ich mich auch nicht, ich hab noch keinen Microcontroller voll bekommen. Meine Programme sind bisher auch ausreichend schnell. Aber ich versuche natürlich mich zu verbessern und weiter zu kommen. Diese Frage war eher durch meine Neugier getrieben.
Langsam wird's OT: Wer kennt denn Dummy-geeignete C-Tutorials?
naja unser gehirn arbeitet auch nur im "kiloherz" bereich, es ist immer die peripherie, die architektur und der code der entscheidend ist
wobei der Vergleich da aber stärker vom Problem anhängt. eben drum, so n atmel ist schon eher ne eierlegende wollmilchsau ohne beine, flügel, kopf und mist
the_playstat
06.03.2009, 18:01
Also ich meine, der Atmel reicht schon für den Hausgebrauch. Wer Basic verwendet und dann sich beklagt, dass seine Programme zu langsam laufen: Selber schuld! Basic braucht für jeden Befehl bis zu 5-Mal so lange wie C: 2 Zyklen laden, 1 bearbeiten, 2 Zyklen speichern. Basic erledigt arbeitet immer mit RAM und kann nicht wie C nur mit Registern arbeiten. C sind es im Optimalfall 1 (und der tritt auch zu 90% im Hausgebrauch ein!
Basic mag zwar einfach zu lernen sein, aber in meinen Augen, das Ding der verschwendischste Compiler der Welt. Und C ist wirklich nicht schwer. Manche Beklagen, dass es zu verschnorkelt wäre, ich persönlich finde aber, dass dies gerade die Sprache durch die Strichpunkte und Klammern übersichtlich und nachvollziehbar macht. Eben Logisch!
(War das jetzt zu enthusiastisch?)
Grüße
Michael
Hi Michael.
Kann man so nicht sagen. Basic ist nicht gleich Basic und es gibt sehr schnelle und effiziente Basic-Compiler.
Hierzu muß man schon den Basic-Compiler, ... nennen.
Ich habe vor Urzeiten ein 3D-CAD-Programm auf dem C64 in
Basic geschrieben.
Aber noch wichtiger als die Programmiersprache ist der Code, den der Programmierende benutzt. Z.B. läßt sich ein Kreis auf mind. 9 verschiedene weisen berechnen und zeichnen/ausgeben.
Da gibt es Performanceunterschiede von bis zu 1:1000
Im Forum war ja gerade ein Beispiel mit Displaysteuerung.
Es wurden ja auch viele gute Tips zur Beschleunigung gegeben.
Ein gutes Beispiel, um alleine durch den Code, sehr viel Zeit zu sparen.
Auch ein Basic-Programm kann z.B. durch Maschienensprachunterroutinen sehr schnell sein. Es ist also nicht immer notwendig, alles in einer Sprache zu programmieren. Hier kann man viel rausquetschen.
Fazit: Bevor man an der Hardware oder an der Programmiersprache nörgelt (zu langsam), sollte man immer zuerst den Fehler bei seiner Programmierung suchen.
Ganz schlimm im PC-Bereich. Da wird dann einfach ein neuer, schnellerer PC gekauft, statt den Code zu optimieren.
SprinterSB
07.03.2009, 09:56
Hört sich sehr interessant an.
Nur, bis ich an die Hardware gehe, sollte ich lieber mal meine Programmierkünste verbessern... Gerade die Aussicht, dass ich mit Basic irgendwann nicht mehr weiter komme, verstimmt mich etwas. Bisher komme ich nicht so ganz hinter die Logik der "C"- Programmiersprache :-k :-s
Genau wie bei BASIC: Es gibt Anweisungen, Kontrollstrukturen (Schleifen, if-else) und Funktionen, in denen man den Code organisieren kann.
Zunächst steht die Codegüte , die ein Compiler zu erzeugen in der Lage ist, nicht in einem ursächlichen Zusammenhang mit der Programmiersprache. Schönes Beispiel ist GCC: Egal, ob man vorne C, C++, Fortran, Java, Ada, ... reinstopft, werden die gleichen Optimierungsalgorithmen angewandt.
Gerade bei GCC ist mächtig Knete hinter der Weiterentwicklung und Optimierung: Firmen wie Google, IBM, ARM und Game-Hersteller brauchen hocheffiziente Compiler für ihre Server, Game-Konsolen, Cores und µCs und treiben die Entwicklung massiv voran. Da fallen dann natürlich auch Brosamen für avr-gcc ab.
Firmen wie MCS electronics (BASCOM-AVR) können da schwerlich mithalten bzw. versuchen es erst garnicht.
Ich hab AVR nie in BASCOM programmiert, aber ich denke, daß man als Einsteiger damit wesentlich schneller und frustfreier zu Resultaten kommt als mit C. Je anspruchsvoller die Anforderungen an die Leistung, die der AVR-Hänfling bringen soll, jedoch sind, desto wichtiger wird ein guter Compiler. Kann man breitem Code noch dadurch ausweichen, daß man zu immer größeren AVR greift, ist bei der Speed der Deckel bei 20MHz.
Wenn man also einen AVR bräuchte, der mit 40 MHz laufen müsste, um die in BASCOM formulierte Aufgebe zu stemmen, mit avr-gcc aber 20MHz locker reichen würden, kann man nach avr-gcc umsteigen, oder muss komplett die Architektur wechseln...
für ARMs gibts mittlerweile auch Basic Compiler ... HBBR z.B.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.