PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rp6 Programm Debuggen + ACS u. Bumper Handler # Multithreadi



WebWurm
12.08.2010, 17:08
Hallo zusammen,
bin seit heute stolzer Besitzer eines RP6.
Da ich mit der Elektronik noch nicht ganz so fit bin hab ich mich für dieses Modell entschieden, damit ich mich erst mal auf die Programmierung konzentrieren kann.

Jetzt zu meinen Fragen:
a) Gibt es Möglichkeiten Programme die man geschrieben hat direkt zu debuggen?
In meinem Programm passieren da ein paar Abläufte die ich so noch nicht ganz nachvollziehen kann. Über einen Debugger würde ich mich da viel leichter tun.

b) Ich versuche gerade ein Programm zu schreiben um folgendes zu tun:
- Wenn IR Sensor links was erkennt - nach rechts drehen und weiterfahren
- Wenn IR Sensor rechts was erkennt - nach links drehen und weiterfahren
- Wenn ein Bumper getroffen wird - zurücksetzten, drehen und weiterfahren

An sich eine relativ einfache Funktionalität.
Den Status von Bumper und ACS frage ich über die selbe Callback ab.
D.h. die set-Methoden für Bumper und ACS zeigen auf die gleiche Methode.
In der Callback selbst lasse ich dann die Bewegung "nicht blockierend" ausführen - damit bei entsprechender Statusänderung gleich wieder der Vorwärtsgang eingelegt werden kann.

Aktuell erkennt der Robbi zwar das Hinderniss und Dreht sich, allerdings fährt er dann nicht weiter.
Die entsprechende moveAtSpeed() Methode wird laut Terminal - Ausgabe auch aufgerufen und danach nix mehr.

Woran kann es liegend das er nix macht bzw. sollte die moveAtSpeed() nicht endlos laufen?
Macht es vielleich Sinn die ACS Sensoren analog (wenn das möglich ist) abzufragen?
Ist der Handler als ausführende Methode überhaupt geeignet?

c) Grundsätzliche Frage: Ist auf dem RP6 (nur Basis) Multithreading möglich, wenn ja - muss ich was spezielles beachten?

Danke und Gruß
Tobias

TobiKa
12.08.2010, 17:17
Zu a: So ohne weiteres nicht. Du könntest dir aber auf dem LCD ausgeben lassen was er grad tut.

Zu b: Musst mal dein Programm posten.

Zu c: Über Timer bzw. Interrupts liesse sich sowas (ähnliches) wohl machen. Müsstest mal genau schreiben auf was du hinaus willst.

radbruch
12.08.2010, 17:40
Hallo

Glückwunsch zum RP6:)

Multithreading kann der Mega32 des RP6 nicht. Um trotzdem mehrere Aufgaben quasi gleichzeitig ausführen zu können verwendet die Library des RP6 ein Task-System. Hier ist auch die Ursache für deine moveatspeed-Problem angesiedelt:

https://www.roboternetz.de/phpBB2/viewtopic.php?t=55540

Debuggen kann man scheinbar in der Simulation von AVR-Studio, das habe ich allerdings noch nicht selbst ausprobiert. Ich mache es eher klasisch indem ich an Schlüsselstellen des Programms Ausgaben an das Terminal sende.

"Musst mal dein Programm posten.", aber wenn möglich auf das Problem reduziert und kommentiert;)

Gruß

mic