mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Welche Ressourcen nutzt die Arduino Software?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Markus B. (markus_b571)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich möchte ein Projekt mit einem Arduino Board realisieren und auch die 
Arduino Software verwenden.

Ich müsste aber wissen, welche Ressourcen von der Software verwendet 
werden, zB Timer oder ähnliches. Es gibt ja zB die Funktion micros(). 
Die muss ja im Hintergrund irgendwie mitlaufen, also schätze ich, dass 
ein Timer belegt wird.

Wo finde ich Infos darüber?

Gruß und schönen Sonntag
Markus

Autor: Plim (Gast)
Datum:

Bewertung
-14 lesenswert
nicht lesenswert
Markus B. schrieb:
> Ich müsste aber wissen, welche Ressourcen von der Software verwendet
> werden,

Da die Software auf dem PC läuft, RAM. Je nach Zusatztools auch mehr 
oder weniger Festplattenspeicher. Soweit ich weis ist sie nicht 
Multiprozessorfähig, nutzt also nur 1 Kern.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus B. schrieb:
> Wo finde ich Infos darüber?

Ich habe Goolge benutzt - 7ter Treffer:
https://www.heise.de/developer/artikel/Timer-Counter-und-Interrupts-3273309.html

Autor: Markus B. (markus_b571)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Plim schrieb:
>
> Da die Software auf dem PC läuft, RAM. Je nach Zusatztools auch mehr
> oder weniger Festplattenspeicher. Soweit ich weis ist sie nicht
> Multiprozessorfähig, nutzt also nur 1 Kern.

Du hast mich missverstanden. Ich meine die Software auf dem Controller

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Markus B. schrieb:
> Wo finde ich Infos darüber?

Die reine nackte Wahrheit findest du in den Quellen, des Arduino Core, 
auf deinem Rechner.

Oder auch hier:
https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/cores/arduino

: Bearbeitet durch User
Autor: Plim (Gast)
Datum:

Bewertung
-6 lesenswert
nicht lesenswert
Markus B. schrieb:
> Du hast mich missverstanden. Ich meine die Software auf dem Controller

Das nennt sich Firmware

Autor: Calli (Gast)
Datum:

Bewertung
6 lesenswert
nicht lesenswert
Plim schrieb:
> Markus B. schrieb:
>> Du hast mich missverstanden. Ich meine die Software auf dem Controller
>
> Das nennt sich Firmware

Firmware ist auch Software...

Autor: Markus B. (markus_b571)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Plim schrieb:
> Markus B. schrieb:
>> Du hast mich missverstanden. Ich meine die Software auf dem Controller
>
> Das nennt sich Firmware

Allein aus dem Kontext (Timer, micros()) sollte sich erkennen lassen, 
dass nicht die PC Software gemeint ist.

Vielen Dank für die anderen Antworten. Damit komme ich weiter.

Autor: Plim (Gast)
Datum:

Bewertung
-7 lesenswert
nicht lesenswert
Markus B. schrieb:
> Allein aus dem Kontext (Timer, micros()) sollte sich erkennen lassen,
> dass nicht die PC Software gemeint ist.

Weil beim PC keine Timer und micros() benutzt werden?

Autor: Calli (Gast)
Datum:

Bewertung
8 lesenswert
nicht lesenswert
Plim schrieb:
> Markus B. schrieb:
>> Allein aus dem Kontext (Timer, micros()) sollte sich erkennen lassen,
>> dass nicht die PC Software gemeint ist.
>
> Weil beim PC keine Timer und micros() benutzt werden?

Alle haben geschnallt, worum es geht. Nur du stellst dich dumm.
Oder ist das gar keine Verstellung?

Autor: Georg M. (g_m)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Markus B. schrieb:
> Ich müsste aber wissen, welche Ressourcen von der Software verwendet
> werden, zB Timer oder ähnliches. Es gibt ja zB die Funktion micros().
> Die muss ja im Hintergrund irgendwie mitlaufen, also schätze ich, dass
> ein Timer belegt wird.
>
> Wo finde ich Infos darüber?

Im File "wiring.c" befindet sich folgender Abschnitt:
unsigned long micros() {
  unsigned long m;
  uint8_t oldSREG = SREG, t;
  
  cli();
  m = timer0_overflow_count;
#if defined(TCNT0)
  t = TCNT0;
#elif defined(TCNT0L)
  t = TCNT0L;
#else
  #error TIMER 0 not defined
#endif

#ifdef TIFR0
  if ((TIFR0 & _BV(TOV0)) && (t < 255))
    m++;
#else
  if ((TIFR & _BV(TOV0)) && (t < 255))
    m++;
#endif

  SREG = oldSREG;
  
  return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
}

Autor: Plim (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Calli schrieb:
> Alle haben geschnallt, worum es geht. Nur du stellst dich dumm.
> Oder ist das gar keine Verstellung?

Ist angeboren...

Autor: Manfred (Gast)
Datum:

Bewertung
-4 lesenswert
nicht lesenswert
Markus B. schrieb:
> ich möchte ein Projekt mit einem Arduino Board realisieren und auch die
> Arduino Software verwenden.
>
> Ich müsste aber wissen, welche Ressourcen von der Software verwendet
> werden, zB Timer oder ähnliches.

Ich halte diese Fragestellung für ziemlich abwegig: Wer Hochsprache 
programmiert, will sich eigentlich nicht mit diesen Details befassen.

Wenn man es dennoch weiß, was kann man ändern? Ich habe hier ein Projekt 
in Arbeit, wo ich den Programmspeicherbedarf mit Argwohn betrachte. 
Ändern kann ich ihn aber nicht, außer, anständig zu programmieren und zu 
versuchen, bestimmte fertige Funktionen zu meiden.

Autor: Alex G. (dragongamer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manfred schrieb:
> Ich halte diese Fragestellung für ziemlich abwegig: Wer Hochsprache
> programmiert, will sich eigentlich nicht mit diesen Details befassen.
C und C++ sind doch keine Hochsprachen.

Das Wissen darüber was bereits belegt ist, nützt einem jedenfalls zu 
vermeiden, dass man ausversehen wo dazwischen funkt.

Autor: Wolfgang (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Manfred schrieb:
> Ich halte diese Fragestellung für ziemlich abwegig: Wer Hochsprache
> programmiert, will sich eigentlich nicht mit diesen Details befassen.

Wie kommst du drauf, dass man sich beim Programmieren in einer 
Hochsprache, nicht mit der Hardware des uC befassen muss?
Meinst du, die Libraries dafür fallen vom Himmel?

Autor: werists (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manfred schrieb:
> will sich eigentlich nicht mit diesen Details befassen.

Man muss allerdings manchmal Sachen machen die man eigentlich nicht 
will.

> Wenn man es dennoch weiß, was kann man ändern? ....
>  außer, anständig zu programmieren und zu versuchen, bestimmte fertige 
Funktionen zu meiden.

Eben, dazu muss man aber dann doch einige Details kennen.

Autor: Nop (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Manfred schrieb:

> Ich halte diese Fragestellung für ziemlich abwegig: Wer Hochsprache
> programmiert, will sich eigentlich nicht mit diesen Details befassen.

Bei embedded gibt's halt auch schnell mal "für Erwachsene"(tm).

Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manfred schrieb:
> Ich halte diese Fragestellung für ziemlich abwegig: Wer Hochsprache
> programmiert, will sich eigentlich nicht mit diesen Details befassen.

muss man aber manchmal,

ich habe viel mit dem Arduino nano328p gearbeitet, aber als mir der zu 
eng wurde war ich froh das es den Arduino mighty mini 1284p gab.
Ich installierte nach Anleitung und fast alles klappte, dann irgendwo 
klemmte es, es lag an der Timerbelegung, also passte ich die Timer und 
die ISR Aufrufe an, manchmal muss ich beim 1284p von TIMER1 auf TIMER2 
oder TIMER3 ausweichen.
#if defined(__AVR_ATmega328P__)
  #define   TIMSKx              TIMSK1
  #define   OCIExA              OCIE1A
  #define   TIMERx_COMPA_vect   TIMER1_COMPA_vect  // ATmega
  #define   TCCRxA              TCCR1A
  #define   COMxA0              COM1A0
  #define   OCRxA               OCR1A
  #define   TCCRxB              TCCR1B
  #define   WGMx2               WGM12
  #define   CSx0                CS10

  #define LED_ARDUINO           5
  #define LED_ARDUINO_DDR       DDRB
  #define LED_ARDUINO_PORT      PORTB

 #elif defined(__AVR_ATmega1284P__) // --------- m1284p ------------

#define TIMER1

#ifdef defined(TIMER1)
  #define   TIMSKx              TIMSK1
  #define   OCIExA              OCIE1A
  #define   TIMERx_COMPA_vect   TIMER1_COMPA_vect  // ATmega
  #define   TCCRxA              TCCR1A
  #define   COMxA0              COM1A0
  #define   OCRxA               OCR1A
  #define   TCCRxB              TCCR1B
  #define   WGMx2               WGM12
  #define   CSx0                CS10
#elif defined(TIMER2)
  #define   TIMSKx              TIMSK2
  #define   OCIExA              OCIE2A
  #define   TIMERx_COMPA_vect   TIMER2_COMPA_vect  // ATmega
  #define   TCCRxA              TCCR2A
  #define   COMxA0              COM2A0
  #define   OCRxA               OCR2A
  #define   TCCRxB              TCCR2B
  #define   WGMx2               WGM22
  #define   CSx0                CS20
#elif defined(TIMER3)
  #define   TIMSKx              TIMSK3
  #define   OCIExA              OCIE3A
  #define   TIMERx_COMPA_vect   TIMER3_COMPA_vect  // ATmega
  #define   TCCRxA              TCCR3A
  #define   COMxA0              COM3A0
  #define   OCRxA               OCR3A
  #define   TCCRxB              TCCR3B
  #define   WGMx2               WGM32
  #define   CSx0                CS30

  #define LED_ARDUINO           7
  #define LED_ARDUINO_DDR       DDRB
  #define LED_ARDUINO_PORT      PORTB

#else
  #error TIMER fehlt
#endif
  #ifdef LED_ARDUINO
    #ifdef LED_ARDUINO_DDR
      #ifdef LED_ARDUINO_PORT
        #define LED_ARDUINO_ON       LED_ARDUINO_PORT  |= (1<<LED_ARDUINO)
        #define LED_ARDUINO_OFF      LED_ARDUINO_PORT &= ~(1<<LED_ARDUINO)
        #define LED_ARDUINO_START  5
        #define LED_ARDUINO_ONOFF_TIME  2 // x10ms
      #endif // #ifdef LED_ARDUINO_DDR
    #endif // #ifdef LED_ARDUINO_PORT
  #endif // #ifdef LED_ARDUINO

die FastLED Lib ergab bei Nutzung vom 1284p das die Zeit für eine LED 
10% langsamer ist,
https://www.mikrocontroller.net/attachment/244099/m1284p_timing.jpg
statt 30µs für 24 Bit werden 33 µs gebraucht, da musste ich die fastLED 
LIB anpassen auf F_CPU 9L/10L, somit wurde das Timing für den ATmega 
1284p um 10% langsamer.
delay.h
#if F_CPU < 96000000
#if defined(__AVR_ATmega1284P__)
  #define NS(_NS) ( (_NS * ( (F_CPU*9L/10L) / 1000000L))) / 1000
  #define CLKS_TO_MICROS(_CLKS) ((long)(_CLKS)) / ((F_CPU*9L/10L) / 1000000L)
#else
  #define NS(_NS) ( (_NS * (F_CPU / 1000000L))) / 1000
  #define CLKS_TO_MICROS(_CLKS) ((long)(_CLKS)) / (F_CPU / 1000000L)
#endif

: Bearbeitet durch User
Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Manfred schrieb:
>> Ich halte diese Fragestellung für ziemlich abwegig: Wer Hochsprache
>> programmiert, will sich eigentlich nicht mit diesen Details befassen.
>
> Wie kommst du drauf, dass man sich beim Programmieren in einer
> Hochsprache, nicht mit der Hardware des uC befassen muss?

Wenn es bei "Hochsprache" um das Arduino-Framework geht, dann ist das 
definitiv so. Denn das ist genau die Stoßrichtung von Arduino: die 
Hardware des µC so weit zu abstrahieren, daß der Programmierer sich 
nicht mehr damit befassen muß. Das geht so weit, daß sogar die 
Architektur (AVR vs. STM32 vs. $YOU_NAME_IT) des µC wegabstrahiert wird.

> Meinst du, die Libraries dafür fallen vom Himmel?

Für den Arduino-Anwender tun sie das.


Mein Rat an den TO wäre, daß er sich entscheiden soll. Entweder er 
verwendet das Arduino-Framework, dann soll er das durchgängig tun und 
nicht daran vorbei auf die Hardware zugreifen. Oder er macht es anders 
herum und wirft das Arduino-Framework raus.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Axel S. schrieb:
> dann soll er das durchgängig tun und
> nicht daran vorbei auf die Hardware zugreifen.

Sorry, aber das funktioniert nicht!
Klar, bei kleinen einfachen Sachen ja, aber in der harten Realität, no.

Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Axel S. schrieb:
>> dann soll er das durchgängig tun und
>> nicht daran vorbei auf die Hardware zugreifen.
>
> Sorry, aber das funktioniert nicht!
> Klar, bei kleinen einfachen Sachen ja, aber in der harten Realität, no.

Keine Ahnung, wo du die Grenze zur "harten Realität" ziehst, aber in der 
Realität der allermeisten Arduino-Benutzer ist das so. Wenn sich 
irgendwo die Notwendigkeit(!) ergibt, low-level am Framework vorbei 
programmieren zu müssen(!), dann wäre meine Schlußfolgerung eher, daß 
man gerade dem Arduino-Denken entwachsen ist und jetzt auch ohne 
Stützräder fahren kann.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Axel S. schrieb:
> Wenn sich
> irgendwo die Notwendigkeit(!) ergibt, low-level am Framework vorbei
> programmieren zu müssen(!), dann wäre meine Schlußfolgerung eher, daß
> man gerade dem Arduino-Denken entwachsen ist und jetzt auch ohne
> Stützräder fahren kann.

Du machst ein "Entweder Oder" dahin, wo sich ein recht langwieriger 
Prozess befindet. Eine solche Erwartungshaltung ist vollkommen 
unrealistisch.
Für dich, ist eine solche "Entweder Oder" Haltung vielleicht möglich. 
Aber ein Anfänger, mitten im Lernprozess, der ist damit überfordert.

Bedenke:
Ein 3 Jähriges Kind kann laufen, aber bis es einen Marathon gewinnen 
kann, vergehen noch Jahre.

Autor: Alex G. (dragongamer)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Du machst ein "Entweder Oder" dahin, wo sich ein recht langwieriger
> Prozess befindet. Eine solche Erwartungshaltung ist vollkommen
> unrealistisch.
> Für dich, ist eine solche "Entweder Oder" Haltung vielleicht möglich.
> Aber ein Anfänger, mitten im Lernprozess, der ist damit überfordert.

Der Anfänger bleibt doch einfach beim Arduino Framework. Man kann mit 
dem nunmal sehr viele Dinge machen.

Autor: Markus B. (markus_b571)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Ich bin nicht unbedingt ein Anfänger. Ich bin nur faul xD. So lang ich 
weiß was von Arduino selbst verwendet wird kann ich das ja entweder mit 
nutzen oder drum herum arbeiten. Wenn mir etwas nicht in den Kram passt 
schreibe ich es halt selbst

Autor: Alex G. (dragongamer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Btw. hab mit einw enig googlen dieses Dokument gefunden: 
https://code.google.com/archive/p/arduino/wikis/HardwareResourceMap.wiki 
Wurde aber in einem Beitrag von 2010 gelinkt, also womöglich nicht 
aktuell.

Autor: Wolfgang (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Markus B. schrieb:
> So lang ich weiß was von Arduino selbst verwendet wird kann ich das
> ja entweder mit nutzen oder drum herum arbeiten. Wenn mir etwas
> nicht in den Kram passt schreibe ich es halt selbst

Wenn hier nicht nur allgemeines Geblubber stehen soll, stelle eine 
konkrete Frage. Welche Resourcen von Arduino genutzt werden, hängt u.a. 
davon ab, welche Libraries du in deinem Projekt nutzt. Solange du bspw. 
die Servo-Lib nicht benutzt ist der Timer1 frei. Oder solange du die 
Wire-Lib nicht nutzt ist das I²C Interface frei.

Autor: Gerhard O. (gerhard_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Wenn hier nicht nur allgemeines Geblubber stehen soll, stelle eine
> konkrete Frage. Welche Resourcen von Arduino genutzt werden, hängt u.a.
> davon ab, welche Libraries du in deinem Projekt nutzt. Solange du bspw.
> die Servo-Lib nicht benutzt ist der Timer1 frei. Oder solange du die
> Wire-Lib nicht nutzt ist das I²C Interface frei.

Wer genau wissen möchte was Arduino in den Code rein stellt hat die 
Möglichkeit den LIST file und MAP files z.B. vom Debug File zu erzeugen.

Das geht ganz leicht.

Kopier den objdump.exe in den Arduino Build Folder. Der Build Folder ist 
nach dem kompilieren bei W7-10 in:

C:\Users\yourusername\AppData\Local\Temp\arduino_build_963314>avr-objdum 
p  -S MyProgram.ino.elf > list.txt

Die Build Nummer ist natürlich anders bei jeden neuen Projekt.

Für den Map File:

avr-objdump -t MyProgram.ino.elf > map.txt

Damit bewaffnet weiß man genau was gespielt wird und welche Interrupts 
vom System benützt werden. Ich finde es jedenfalls ganz nützlich.

Für die meisten Sachen verwende ich nur die Serial Lib. und den Rest 
mache ich mir selber in gewohnter uC Weise. Man muss ja die Arduino 
Bibliotheken nicht unbedingt verwenden.

Abgesehen davon hat Arduino Fanboy schon früher aufgezeigt wie man ganz 
normal in C mit dem Arduino IDE Projekte bauen kann. Man hat schon 
Möglichkeiten und für Vieles reicht mir zumindest das. Und sonst habe 
ich ja noch CodeVision AVR oder andere Tools zur Verfügung. Aber wie 
schon so viele bestätigt haben, mit Arduino kann man Vieles machen und 
kann viel Zeit ersparen. Man muss ja nicht immer das Rad neu erfinden. 
Und die Arduino Bibliotheken müssen nicht unbedingt schlecht sein. Kommt 
halt darauf an. Für professionelle Anwendungen gelten sowieso ganz 
andere Randbedingungen und Anforderungen. Was mich betrifft, bin ich 
dankbar, dass es Arduino und die ganze HW dazu gibt.

Autor: Markus B. (markus_b571)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Welche Resourcen von Arduino genutzt werden, hängt u.a.
> davon ab, welche Libraries du in deinem Projekt nutzt.

Es ging mir nur darum, was standardmäßig für alle Projekte verwendet 
wird. Im Endeffekt ist es nur Timer 0, um den es geht. Der Rest wie UART 
ist klar

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerhard O. schrieb:
> Die Build Nummer ist natürlich anders bei jeden neuen Projekt.
Das habe ich bei mir automatisiert.
Eine *.asm und *.map wird damit bei jeder Kompilierung erzeugt.
(kann ich gerne mal zeigen, wenn gewünscht)

Gerhard O. schrieb:
> Abgesehen davon hat Arduino Fanboy schon früher aufgezeigt wie man ganz
> normal in C mit dem Arduino IDE Projekte bauen kann.
Nicht C, sondern C++, auch wenn es wie C aussieht.
Die Hauptdatei *.ino ist immer C++

*.h, *.cpp und *.c kann man in Tabs und Libraries verwenden.
und *.S nur in Libraries.
int main()
{
  for(;;);
}
Wohl das kleinstmögliche Arduino Programm.
Es wird keine Hardware vorbereitet, keine ISR etabliert.
Damit funktioniert die Systemzeit nicht mehr.
Also millies(), delay() und alle davon abhängigen/Verwandten.

: Bearbeitet durch User
Autor: Gerhard O. (gerhard_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Das habe ich bei mir automatisiert.
> Eine *.asm und *.map wird damit bei jeder Kompilierung erzeugt.
> (kann ich gerne mal zeigen, wenn gewünscht)

Ja, bitte, bitte!:-)
Da bin ich noch nicht von mir aus selber drauf gekommen. Geht das 
permanent?

Habe gestern in einer VM MINT-X32 und das Arduino IDE installiert. War 
schockiert wie viel schneller die Projekte gebaut werden. Da ist 
mindestens ein Faktor 1-2 Unterschied. Hatte nur am Anfang 
Schwierigkeiten mit den USB Serial Port Permissions.

Gruss,
Gerhard

Autor: Gerhard O. (gerhard_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Wohl das kleinstmögliche Arduino Programm.
> Es wird keine Hardware vorbereitet, keine ISR etabliert.
> Damit funktioniert die Systemzeit nicht mehr.
> Also millies(), delay() und alle davon abhängigen/Verwandten.

Das macht nichts. Ich bin gewohnt das selber zu machen.

Es ist übrigens interessant wie viel Platz die einfache pinmode braucht.
Beim ersten Mal über 28 Bytes und dann jeder weitere Gebrauch 6 Bytes.
Wenn man bedenkt, dass bei direktem Register Zugriff nur 4 Bytes für den 
ganzen Port verbraucht werden, merkt man schon wie viel effizienter es 
so geht. 8 mal pinmode gebraucht ist also 28+56=84bytes, gegenüber 4 
Bytes für DDRx und PORTx.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Gerhard O. schrieb:
> Ja, bitte, bitte!:-)
> Da bin ich noch nicht von mir aus selber drauf gekommen. Geht das
> permanent?
Permanent!
Wird auch nicht bei einem Board Update überschrieben.

Die Inbetriebnahme ist etwas fummelig, da man in der Konfigurationsdatei 
keine Ausgabeumleitungen per > etablieren kann

Ich zeige hier meine Pfade.
Arduino steckt bei mir in E:\Programme\arduino
In E:\bin stecken meine ganzen kleinen selbst geschriebenen Werkzeuge
Die Pfade wirst du natürlich anpassen müssen.

Es müssen 3 Dateien erstellt werden:
----
E:\Programme\arduino\hardware\arduino\avr\platform.local.txt
(in dem Ordner sollte schon eine platform.txt liegen)
recipe.hooks.linking.postlink.1.pattern=E:\bin\avr_asm_dump.bat "{compiler.path}avr-objdump"   "{build.path}/{build.project_name}.elf"    "{build.path}/{build.project_name}.asm"
recipe.hooks.linking.postlink.2.pattern=E:\bin\avr_map_dump.bat "{compiler.path}avr-objdump"   "{build.path}/{build.project_name}.elf"    "{build.path}/{build.project_name}.map"

----
E:\bin\avr_asm_dump.bat
@Echo OFF
%1  -h -S  %2 > %3 
----
E:\bin\avr_map_dump.bat
@Echo OFF
%1  -t  %2 > %3 

: Bearbeitet durch User
Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Axel S. schrieb:
>> Wenn sich
>> irgendwo die Notwendigkeit(!) ergibt, low-level am Framework vorbei
>> programmieren zu müssen(!), dann wäre meine Schlußfolgerung eher, daß
>> man gerade dem Arduino-Denken entwachsen ist und jetzt auch ohne
>> Stützräder fahren kann.
>
> Du machst ein "Entweder Oder" dahin, wo sich ein recht langwieriger
> Prozess befindet. Eine solche Erwartungshaltung ist vollkommen
> unrealistisch.

Nein, ist es nicht. Am Ende ist es aufwendiger, am Arduino Framework 
vorbei auf die Hardware zuzugreifen, wenn man sich dabei nicht in den 
Fuß schießen will. Für Trivialitäten wie das direkte Schreiben auf einen 
PORT mag es ja noch gehen, aber spätestens wenn Timer oder der ADC ins 
Spiel kommen, gerät man schnell in Teufels Küche. Da kriegt man dann 
subtile Fehler, die ohne Debugger auch der Profi kaum findet. Viel 
weniger der Anfänger.

Eigentlich es doch ganz einfach: wenn man direkt auf die Hardware 
zugreift, muß man keine Arduino-Interna kennen. Das ist einfach. Wenn 
man rein bei der Arduino API bleibt, muß man keine Interna der Hardware 
kennen. Das ist noch einfacher. Warum sollte man den Aufwand maximieren, 
indem man beides kennen muß und dazu noch die nichttrivialen 
Verschränkungen der beiden Layer?

> Für dich, ist eine solche "Entweder Oder" Haltung vielleicht möglich.
> Aber ein Anfänger, mitten im Lernprozess, der ist damit überfordert.

Mit dieser Einstellung lernt der Anfänger niemals laufen. Das ist auch 
mein Haupt-Kritikpunkt an Arduino: es gibt keinen vernünftigen 
Upgrade-Pfad von Arduino hin zur direkten Programmierung der Hardware 
per Register. Alles, was man für Arduino gelernt hat, braucht man für 
den zweiten Schritt nicht.

> Ein 3 Jähriges Kind kann laufen, aber bis es einen Marathon gewinnen
> kann, vergehen noch Jahre.

Ja. Und wenn es darauf besteht, die von Mutti gehäkelten Babyschuhe 
immer weiter tragen zu wollen, wird es nie einen Marathon laufen.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Axel S. schrieb:
> wenn es darauf besteht,

Wer "besteht" denn darauf?
Du versuchst in die Ecke zu drängen....
Aber dadurch wird das nicht wahr.

Es ist nur deine Projektion.
Dumm nur, dass sich die Arduino Jünger nicht deiner Projektion gemäß 
verhalten.
Sie nutzen, was fertig ist, und bei Bedarf wird dazu gebaut.
Das ist das übliche Verhalten.

: Bearbeitet durch User
Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autor: Axel Schwenke (a-za-z0-9)
>Nein, ist es nicht. Am Ende ist es aufwendiger, am Arduino Framework
>vorbei auf die Hardware zuzugreifen, wenn man sich dabei nicht in den
>Fuß schießen will.
Wenn man sich damit auskennt und ein wenig Code lesen kann, ist das eher 
kein Problem.
Und soweit ich aus den Fragen von Markus erkennen kann, ist er ziemlich 
gut dazu in der Lage.
Deine Antworten klingen für mich eher so: Ich weiß nicht recht, wie das 
Framework funktioniert, will's auch nicht wissen, muss es aber allen 
anderen ausreden.
>Mit dieser Einstellung lernt der Anfänger niemals laufen.
Meine Empfehlung: mit Deiner Expertise den Ball lieber mal ein wenig 
flacher halten.

Autor: Gerhard O. (gerhard_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Permanent!
> Wird auch nicht bei einem Board Update überschrieben.

Vielen Dank für die Hinweise. Werde es gleich heute Abend ausprobieren. 
Darauf wäre ich selber nicht gekommen.

Gruss,
Gerhard

: Bearbeitet durch User
Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerhard O. schrieb:
> Vielen Dank für die Hinweise.
Gerne doch.

Gerhard O. schrieb:
> Darauf wäre ich selber nicht gekommen.
Danke für die Blumen!

Nachtrag:
Über eine Rückmeldung würde ich mich sehr freuen.

: Bearbeitet durch User
Autor: Gerhard O. (gerhard_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Gerhard O. schrieb:
>> Vielen Dank für die Hinweise.
> Gerne doch.
>
> Gerhard O. schrieb:
>> Darauf wäre ich selber nicht gekommen.
> Danke für die Blumen!
>
> Nachtrag:
> Über eine Rückmeldung würde ich mich sehr freuen.

Gute Nachricht: Ich habe Deine Instruktionen mit den nötigen Anpassungen 
aufs Wort befolgt und es hat auf Anhieb funktioniert.

Nochmals vielen Dank für dieses kleine Juwel.

Gruss,
Gerhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.