Hi, bin auf der Suche nach dem richtigen Prozessor.... Wie komfortabel programmiert man in C auf einem ATmega? Gibt es Einschränkungen? Gibt es gute Entwicklungsumgebungen, am besten freie? Gibt es auch Debugger, Source-Level-Debugger? danke, johngo
Also für den AVR gibt es einen gcc, ich würde an deiner stelle gleich nach winavr suchen, da sind alle programme zusammen. ich hab bisher mit zwei debuggern gearbeitet, einmal den von atmel, avrstudio 4.x und vmlab, damit kann man auch hardware rund herum simulieren. und donst kannst du noch in circuet debuggen mit insight, ist auch frei. ähnliches bekommst du auch für den msp430, nur das ich für den noch keinen richtigen debugger gefunden hab, aber in-circuet reicht mir eigentlich in dem fall. bei den pics ist das freie schon ein bisschen eingeschränkt, die meisten compiler sind auf 4k eingeschränkt, aber ich glaub den c18 von microchip selber ist frei, man kann nur nicht die zusatzfunktionen verwenden(bessere optimierung) ich habe mit dem AVR angefangen und finde es ist ein guter einstiegsmicrocontroller, sowohl als C als auch assambler mfg Azrael
Den Link da links hast Du vermutlich übersehen: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Es gibt eine wesentliche Einschränkung bzw. einen wesentlichen Unterschied zwischen C auf einem AVR und C auf anderen Prozessoren; AVRs verwenden die Harvard-Architektur, die zwischen Programm- und Datenspeicher unterscheidet. Einem Pointer ist aber nicht anzusehen, ob er auf Programm- oder Datenspeicher verweist, so daß mit unterschiedlichen Funktionen gearbeitet werden muss, wenn Daten aus dem Programmspeicher (Flash-ROM) oder Daten aus dem Datenspeicher (RAM) verwendet werden sollen. Da das RAM bei den AVRs eher knapp bemessen ist, ist es sinnvoll, möglichst viele (konstante) Daten im ROM abzulegen (das fängt mit Stringkonstanten an), und dafür sind bereits spezielle Klimmzüge erforderlich. Mehr zum Thema wirst Du sicherlich im eingangs erwähnten Tutorial finden ...
>>>> ....Da das RAM bei den AVRs eher knapp bemessen ist, ....
Anmerkung dazu: ATmegas können auch mit externem RAM betrieben werden.
Gruß, Michael
> Anmerkung dazu: ATmegas können auch mit externem RAM betrieben
werden.
Nicht alle ATmegas, der ATmega8515 und der ATmega128 haben ein externes
Speicherinterface. Gibts noch weitere?
"Nicht alle ATmegas, der ATmega8515 und der ATmega128 haben ein externes Speicherinterface. Gibts noch weitere?" Mega162, Mega640, Mega641, Mega 1280, Mega1281, Mega 2560, Mega 2561, um nur ein paar zu nennen...
Ein nicht zu unterschätzender Nachteil des externen Speicherinterfaces ist der Verlust von I/O-Ports, da Atmel bislang nur Gehäuse mit eindeutig zu wenig Anschlüssen verwendet (der Mega128 ist beispielsweise in einem 64poligen Gehäuse untergebracht).
@Rufus T. Firefly "da Atmel bislang nur Gehäuse mit eindeutig zu wenig Anschlüssen verwendet" Ist aber nur Deine rein persönliche Meinung. Mir reichen die Pins mehr als massig aus, nur der Flash ist immer zu klein. Der Mega168 war da schon der Schritt in die richtige Richtung und den Tiny85 erwarte ich sehnsüchtigst. Ich scheine also nicht der einzige zu sein, dem es so geht. Ein Tiny8313 wäre aber auch nicht schlecht (2313 mit 8kB), ich mußte schonmal notgedrungen einen Mega8 verwenden. Für die riesigen 64-Pinner hatte ich bisher nirgends ne Anwendung, aber für einen Mega1288 (Mega8 mit 128kB) wüßte ich schon ne Anwendung. Peter
@Rufus T. Firefly "Da das RAM bei den AVRs eher knapp bemessen ist" Das ist auch nur rein subjektiv so. Ich hab jahrelang mit dem 8051 gearbeitet und da sind oft nur 128 oder 256 Byte RAM drin. Besonders, wenn man in C programmiert kann der Compiler den RAM sehr effektiv überlagern und massig lokale Variablen drin unterbringen. Man denkt erst, 128 Byte sind wenig, aber man kriegt trotzdem sehr komplexe Programme drin unter. Dagegen sind die 1kB des Mega8 geradezu riesig, ich krieg die auch nicht annähernd voll. Deshalb lasse ich oft Textausgaben der Bequemlichkeit halber im RAM liegen, dann ist er manchmal schon zu 50% voll. Peter
Rufus T. Firefly schrieb: >>>>> AVRs verwenden die Harvard-Architektur, die zwischen Programm- und Datenspeicher unterscheidet. >>>> so daß mit unterschiedlichen Funktionen gearbeitet werden muss, wenn Daten aus dem Programmspeicher (Flash-ROM) oder Daten aus dem Datenspeicher (RAM) verwendet werden sollen. >>> bereits spezielle Klimmzüge erforderlich. :: Die Programmierung stell ich mir da doch etwas umständlich vor, wenn man immer spezielle Funktionen verwenden muss. Oder stört das in der Praxis nicht sehr? Weiß jemand, wie das bei anderen Controllern ausschaut, z.B. 8051?
@Peter > Für die riesigen 64-Pinner hatte ich bisher nirgends ne Anwendung, > aber für einen Mega1288 (Mega8 mit 128kB) wüßte ich schon ne > Anwendung. Welche Anwendung (nur so aus Neugier) ?
> Oder stört das in der Praxis nicht sehr?
Meine Erfahrung ist, dass es eben ein wenig mehr Arbeit ist wenn man
mit Strings arbeitet. Bei mathematischen Operationen bekomme ich davon
überhaupt nichts mit - größere Tabellen müssen aber natürlich auch hier
in den Flash.
@Thorsten, "Welche Anwendung (nur so aus Neugier) ?" Z.B. als Datenlogger. Zur Zeit ist es ein AT89C2051 + AT24C512, aber eine 1-Chiplösung wäre nicht schlecht. Aber 128kB wirklich nur mit Code zu füllen, dürfte ein Ding der Ünmöglichkeit sein (ich meine mit sinvollem Code). Peter
> Aber 128kB wirklich nur mit Code zu füllen, dürfte ein Ding der > Unmöglichkeit sein (ich meine mit sinvollem Code). Für eine Anwendung als Datenlogger ist der Flash-ROM aber eher wenig zu gebrauchen. Erstens kannst du ihn nur aus der bootloader section beschreiben, und zweitens ist m.E. das `wear out' deutlich schlechter als bei den dataflashs.
@Jörg "ist m.E. das `wear out' deutlich schlechter als bei den dataflashs" Was ist ein `wear out' ? Konkret ist es ein Logger (Energieverbrauch+Temperaturkurve) für einen Brennofen (1 Tag heizen, mind 3 Tage abkühlen), die 128kB sollten für etwa ein Jahr reichen, die geringere Anzahl Schreibzyklen wäre also kein Problem. Peter
"wear out" ist die Abnutzung; in diesem Falle wohl die Anzahl der Schreibzyklen. Ich denke schon, daß man 128KB sinnvoll füllen kann. Schau Dir doch nur mal moderne Handys an. Ist ja auch kein Wunder, wenn da u.a. ein IrDA-, Bluetooth- und ein TCP/IP-Stack enthalten sind. Markus
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.