Forum: Compiler & IDEs Wie komfortabel ist C auf ATmega?


von johngo (Gast)


Lesenswert?

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

von Azrael (Gast)


Lesenswert?

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

von Rufus T. Firefly (Gast)


Lesenswert?

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 ...

von MSE (Gast)


Lesenswert?

>>>> ....Da das RAM bei den AVRs eher knapp bemessen ist, ....

Anmerkung dazu: ATmegas können auch mit externem RAM betrieben werden.

Gruß, Michael

von Thorsten (Gast)


Lesenswert?

> 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?

von Sepp (Gast)


Lesenswert?

"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...

von Thorsten (Gast)


Lesenswert?

Ups, ich sollte wohl öfter mal auf www.atmel.com gehen :)

von Rufus T. Firefly (Gast)


Lesenswert?

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).

von Peter Dannegger (Gast)


Lesenswert?

@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

von Peter Dannegger (Gast)


Lesenswert?

@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

von johngo (Gast)


Lesenswert?

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?

von Thorsten (Gast)


Lesenswert?

@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) ?

von Malte (Gast)


Lesenswert?

> 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.

von Peter Dannegger (Gast)


Lesenswert?

@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

von Jörg Wunsch (Gast)


Lesenswert?

> 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.

von Peter Dannegger (Gast)


Lesenswert?

@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

von Markus (Gast)


Lesenswert?

"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
Noch kein Account? Hier anmelden.