Arduino mit Atmel Studio programmieren lernen

Ich habe seit kurzem einen Arduino Mega 2560.

Nun habe ich ein etwas komplexeres Projekt, wo ich gerne einen Debugger hätte.

Mir wurde in diesem Zusammenhang das Atmel Studio empfohlen.

Soweit sogut. Habe alles installiert, finde auch eine Verbindung zum Board.
Habe aber keine Ahnung wie ich Standard Librarys einbinde.

Gibt es irgendwo hier oder im Netz Tutorials für Einsteiger, wo mir die grundlegenden Sachen erklären, damit ich mit Atmel Studio 7 meinen Arduino Mega programmieren kann?

Am liebsten, wie es mit der Standard Arduino IDE gemacht wird, halt mit dem Komfort einer mächtigeren Programmierumgebung.

Atmel Studio ist pures C / C++. Wenn man schon den Umstieg wagt, sollte man sich auch gleich von den ganzen Arduino Bibliotheken verabschieden. Es gibt einen Grund, warum sich diese in der professionellen Programmierung nicht durchsetzen: sie sind so sehr auf Einsteiger zugeschnitten, dass sie aus professioneller Sicht meist einfach schlecht / ungenügend sind. Als "mächtige Programmierumgebung" würde ich sie auch nicht bezeichnen wollen :wink:

Ein einfaches Beispiel: in Arduino nimmst Du digitalWrite() um einen Pin zu setzen. Wenn man mal in die Implementierung von DigitalWrite blickt, sieht man:

void digitalWrite(uint8_t pin, uint8_t val)
{
        uint8_t timer = digitalPinToTimer(pin);
        uint8_t bit = digitalPinToBitMask(pin);
        uint8_t port = digitalPinToPort(pin);
        volatile uint8_t *out;

        if (port == NOT_A_PIN) return;

        // If the pin that support PWM output, we need to turn it off
        // before doing a digital write.
        if (timer != NOT_ON_TIMER) turnOffPWM(timer);

        out = portOutputRegister(port);

        uint8_t oldSREG = SREG;
        cli();

        if (val == LOW) {
                *out &= ~bit;
        } else {
                *out |= bit;
        }

        SREG = oldSREG;
}

Da werden erst noch mühsam andere Prozeduren aufgerufen usw. Das ist alles so allgemein wie möglich gehalten und schleppt dadurch Tonnen von unnötigem Ballast mit sich rum, der wiederum auf die Performance geht. Das gilt so ähnlich auch für praktisch alle anderen Bibliotheks-Funktionen.

in nativem C setze ich ein Port-Pin hingegen direkt mit einer einzgien Anweisung:

PORTA |= (1<<PA0)

Das ist halt weniger intuitiv als die Verwendung von digitalWrite() ... aber dafür schnell :slight_smile:

Versteh mich nicht falsch: ich mache selber hin und wieder was mit Arduino, wenn ich mal eben schnell irgendeine Spielerei umsetzen muss. Sobald es aber an "richtige" Projekte geht, bleibe ich bei Atmel Studio + nativem C.

Arduschwabe:
... Am liebsten, wie es mit der Standard Arduino IDE gemacht wird, halt mit dem Komfort einer mächtigeren Programmierumgebung.

Die Arduino-IDE mag nicht die komfortabelste sein, ja, aber im Hinblick darauf, wofür Arduino ursprünglich entwickelt wurde, ist sie sehr komfortabel.

Wenn Du den ATmega ohne das Arduino-Geraffel programmieren möchtest, solltest Du das IMO ganz „zu Fuß“ machen: Mit Compiler/avrlibc, Makefile, AVRISP usw.

Gruß

Gregor

Nachtrag: Als ich mit Arduino anfing, ging es mir zunächst darum, den µC ohne das Arduino-Geraffel programmieren zu können - und das ging auch ganz gut. Nach einiger Zeit kam ich allerdings darauf, dass die Arduino-Umgebung genau das bietet, was ich selbst machen wollte. Sowohl die Grundbeschaltung des Mikrocontrollers als auch die Programmierumgebung/Bibliotheken würden Arduino ziemlich ähnlich sehen. Nur wäre ich dann auf einer „Insel“ und könnte mich kaum hierzuforum austauschen.