Pages: [1]   Go Down
Author Topic: Stößt man bei der Arduino-Programmiersprache an die Grenzen?  (Read 1095 times)
0 Members and 1 Guest are viewing this topic.
@home
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo!

Wir programmieren in der Schule seit einiger Zeit Arduino (Uno) - natürlich alles einfache und unkomplizierte Programme - ich bin davon ziemlich begeistert.
Ich möchte mir jetzt einen Arduino kaufen (Arduino MEGA 2560). Die Frage ist jetzt: Seid ihr schonmal mit der Arduino-Programmiersprache an eure Grenzen gestoßen, also dass etwas, das eigentlich Hardware-seitig möglich wäre, nicht umsetzbar war?
Ich programmiere sonst PHP, da bin ich es nicht gewohnt, an die Grenzen zu stoßen und als ich dann anfing mit ROBO Pro (Fischertechnik "Programmiersprache") kompliziertere Sachen zu machen und eben genau dies passierte, ärgerte mich das extrem. Seitdem programmiere ich nicht mehr Fischertechnik-Roboter.
Wie ist das bei Arduino?

Viele Grüße, lux
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

programmier seit 3-4 tagen mit arduino und was mich persönlich aufregt ist das es kein multitasking gibt und falls mal ein sensor etc. zeit braucht um das ergebnis zu liefern ist das in der void loop schleife praktisch wie ein delay! und somit werden dann andere befehle erst später ausgeführt oder reagieren für eine bestimmte zeit leider nicht smiley-sad
Logged

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 2
Posts: 770
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist aber keine Beschränkung der "Arduino-Programmiersprache" sondern des Prozessors an sich. smiley-wink
Logged

@home
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, also nur das fehlende Multitasking? Gibt es da keinen Workaround?
Die Programmiersprache hat sonst alles, also Schleifen etc.?
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 9
Posts: 642
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@lux
Der Arduino wird in ganz normalem C/C++ programmiert. Da stöst Du eher mit der Hardware an Grenzen.

@AndiIsl
Es gibt für Arduino ein paar Bibliotheken welche ein quasi Multitasking implementieren.
Einfach: MSTimer2 (http://www.pjrc.com/teensy/td_libs_MsTimer2.html)
Komplex: qL state machine (http://www.state-machine.com/arduino/index.php)
Es gibt noch weitere, persönlich kenn ich aber nur die beiden.
Logged

_______
Manfred

@home
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, also als Fazit: "Nein, mann stößt nicht an die Grenzen."?

EDIT: Ah, ich habe gerade gesehen, man könnte das doch auch mit millis() und einem if umsetzen, oder? Dann hätte man schonmal keine Software-Delays mehr. Und sonst müsste man halt Sensorwerte jedes Mal abfragen, bis sie verfügbar sind. Geht das?
« Last Edit: March 19, 2012, 08:12:13 am by lux » Logged

Germany
Offline Offline
Edison Member
*
Karma: 44
Posts: 2261
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich stoße gelegentlich an die Grenzen der Hardware, oft an die Grenzen meines eigenen Programmiervermögens, aber bisher noch nicht an die der IDE. smiley-grin
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

NRW
Offline Offline
Sr. Member
****
Karma: 1
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich stoße oft gegen Bettkante oder Schrankkante, zählt das auch?

Ne, im Ernst: Ich glaube das liegt eher entweder in der Hardware oder in der unwissenheit
Logged

@home
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@MueThoS:
Guter Witz, musste lachen...

OK, danke an alle für eure Hilfe! Dann werde ich mir auf jeden Fall mal einen Arduino zulegen...
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20236
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C an sich ist eine der leistungsstärksten Programmiersprachen. Falls notwendig kannst Du auch Teile in Assembler (maschinensprache) einfügen.
Eine Grenze an die man schnell stößt ist das RAM. Wenn man viele Variablen (Arrays) braucht oder Webserver anlegt dann sind 2kByte RAM des ATmega328 schnell mal knapp. Da kann man zu einem Arduino MEGA ausweichen und eventuell ein zusätzliches RAM anhängen.

Lux wieso hast Du dieses Topic blockiert?

Viele Grüße Uwe
 
« Last Edit: March 19, 2012, 11:15:30 am by uwefed » Logged

@home
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie gesagt, ich möchte mir ja auch ein MEGA zulegen. Gerade deshalb.

Das Multitasking geht? Das sieht erstmal ziemlich kompliziert aus, wie verhält sich das in der Praxis?

Ups, keine Ahnung, das habe ich irgendwie aus Versehen blockiert...
Logged

Neuss
Offline Offline
Full Member
***
Karma: 0
Posts: 200
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Multitasking geht? Das sieht erstmal ziemlich kompliziert aus, wie verhält sich das in der Praxis?

Die Unterstützung von Multitasking ist sicherlich gegeben. Prinzipiell wird so etwas ja durch das Betriebssystem zur Verfügung gestellt. Und so etwas hat der Arduino ja nicht.

Wenn man die Multitasking-Fähigkeiten benötigt, muss man entweder die von MaFu angesprochenen Bibilotheken verwenden oder etwas selbst programmieren. Was aber je nach Aufgabestellung durchaus möglich ist. Z.B. kann man mit Interrupts arbeiten, und dadurch eine Art Multitasking nachbilden:

Man kann durch bestimmte Ereignisse (Änderung von Eingangssignalen, Eintreffen von Zeichen über die serielle Schnittstelle, Erreichen von Zählerständen im Controller, Ablauf von Zeitgebern, usw.) den normalen Ablauf des Programms in der Endlostschleife in der Funktion loop() unterbrechen und den zum Ereignis passenden Programmcode ausführen (quasi anderer Task). Stichwort: ISR/Interrupt Service Routine. Wenn der Code dann abgeabeitet ist, wird wieder in loop() zurückgesprungen und dort weiter gemacht. Wobei natürlich gewisse Randbedingungen zu berücksichtigen sind.

Um das Ganze zu verstehen, sollte/muss man allerdings ein wenig suchen und lesen. Aber da hilft Tante Google sicherlich, etwas zu finden (Stichwort: AVR, ISR, interrupt, programming): hat gerade versuchsweise 67500 Ergebnisse geliefert. Aber auch bei Linux oder Windows muss man sich ja erst einmal schlau machen, wenn man Multitasking verstehen will.

Aber das muss man sich ja nicht von heute auf morgen aneignen. Macht auf jeden Fall Spaß, sich damit zu befassen. Finde ich.

Gruß
Wolfgang
Logged

@home
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, cool, dann steht dem Kauf nichts mehr im Weg.
Danke an alle!
Logged

Germany
Offline Offline
Full Member
***
Karma: 1
Posts: 130
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

es sei noch hinzugefügt, dass man ein Arduino nicht mit einer .NET-Programmiersprache o.Ä. vergleichen kann. Dort kann man auch nicht parallel Arbeiten, wenn man nur einen Prozessor hat. Aber Hardware und Betriebssystem schieben die Prozesse in eine Queue und arbeiten diese nacheinander ab. Das geschieht aber nicht am Stück (Sonst würde ja z.B. immer nur ein Programm zu Ende laden) sondern immer nur eine bestimme Anzahl von Rechenoperationen.

Und ungefähr so sollte man auch die Programmierung im Loop() strukturieren. Also primär einzelne Schritte definieren und z.B. Ausstiegspunkte schaffen.
In einem Projekt habe ich eine Ethernet-Schnittstelle und eine LED Matrix. Nun steuere ich per Webinterface die verschiedenen Grafiken auf der Matrix. Lade ich die Steuerungsseite, kann die Matrix nicht leuchten, spielt die Matrix eine längere Abfolge, kann ich sie nicht steuern oder abbrechen.
Also alles brav Schrittweise im Loop aufgebaut, dass quasi fast auf Schleifen verzichtet werden kann, wo undefinierbar lange Operationen stattfinden.

Eine persönliche Begrenzung sehe ich in der Speicherkapazität und im RAM. Jedoch habe ich eine Atmega328 Chip und der MEGA bietet doch deutlich mehr.
Logged

Pages: [1]   Go Up
Jump to: