## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### Re: [ct-bot] Stackimplementation und Verhalten bot_drive_stack

Absender: Timo Sandmann
Datum: Sa, 15.12.2007 18:39:43
In-reply-to: <000001c83e8a$1d59ea20$0200a8c0@mexpnew>
References: <000001c83e8a$1d59ea20$0200a8c0@mexpnew>

    Hallo,

`ein Stack für die Bot-Positionen ist auf jeden Fall eine gute Sache.` `Aber warum ist der Stack denn als verkettete Liste implementiert? Mit` `einem einfachen Array liegen push() und pop() doch auch schon in O(1).` `Außerdem haben malloc() und free() auf dem echten Bot viel zu viel` `Overhead, zumal das in diesem Fall auch gar keinen Vorteil bringt, oder?` `Das Speichern / Laden einer Position vom Stack braucht IMHO auch kein` `eigenes Verhalten zu sein, es müssen ja nur einmal die Werte` `gespeichert oder zurückgegeben werden und fertig.` `Wenn man bot_set_stackpos(0,0) aufruft, wird die aktuelle Bot-Position` `gespeichert, aber was ist, wenn ich die Position (0,0) auf den Stack` `pushen will? Da fände ich eine zusätzliche inline-Funktion wie` `push_actual_pos() besser, die einfach bot_set_stackpos(pos_x, pos_y)` `"aufruft" eleganter.`

`Alles was "stack" heißt, vielleicht besser in "pos_stack" umbenennen,` `das ist ja nicht der einzige Stack im System. Außerdem wäre es ganz` `gut, die übliche Namenkonvention einzuhalten, also eigene Datentypen` `enden auf _t usw.`

`Wäre es nicht auch sinnvoll, die Positionen automatisch zu speichern,` `sobald ein Wechseln von Verhalten A zu Verhalten B auftritt? Wenn man` `jetzt noch die ID des jeweiligen Verhaltens speichert (und 0 für` `selbst gesetzte Positionen z.B.), wäre recht leicht nachzuvollziehen,` `welches Verhalten was veranlasst hat. Das ist vor allem interessant,` `wenn ein Notfallverhalten aktiv wurde. Oder für ein Rollback von` `Verhalten. Mal so als Erweiterungsidee...`

    Gruß Timo

    Am 14.12.2007 um 20:47 schrieb Frank Menzel:

>     Hallo,
>     anbei mal ein Patch zur Implementation eines Stacks. Es können
>     Int16-Punktkoordinaten abgespeichert werden mittels push_pos oder von
>     dort mittels pop_pos wieder entnommen werden.
>     Ein kleines Verhalten bot_drive_stack fährt die vom Stack entnommenen
>     Punkte der Reihe nach wieder an mittels dem relativ neuen Verhalten
>     behaviour_goto_pos (Taste 4 auf dem neuen Screen). Wenn der Bot durch
>     die Gegend gefahren wird, so können mittels der Taste 3 die

> `Botpositionen jeweils auf dem Stack gebracht werden. Die Wegstrecke` `wird`

>     somit rückwärts wieder abgefahren. Das Ganze funktioniert bei mir auch
>     bestens mit dem echten bot. Da behaviour_goto_pos nur mit der
>     Motorregelung funktioniert, so muß dies auch eingeschaltet werden.

> `Das Setzen der Koordinaten als auch das Abfahren der Stackpunkte` `wurden`

>     als kleine Verhalten geschrieben und sind somit via Remotecall
>     aufrufbar.
>     Somit kann der Punkt aus der todo-Liste gestrichen werden.
>     Bin schon dabei, den Stack für ein anderes Verhalten zu benutzen, aber
>     dazu in wenigen Wochen...

>     Gruß, Frank Menzel
>     <patch_drive_stack.txt>_______________________________________________
>     ct-bot-entwickler Mailingliste
>     ct-bot-entwickler@xxxxxxxxxxxxxxxxx
>     http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler

- Antworten:
  - Re: [ct-bot] Stackimplementation und Verhalten bot_drive_stack
    - From: Frank Menzel
  - AW: [ct-bot] Stackimplementation und Verhalten bot_drive_stack
    - From: Frank Menzel

- Referenzen:
  - [ct-bot] Stackimplementation und Verhalten bot_drive_stack
    - From: Frank Menzel

- Voriger (Datum): [ct-bot] Stackimplementation und Verhalten bot_drive_stack, Frank Menzel
- Nächster (Datum): Re: [ct-bot] Stackimplementation und Verhalten bot_drive_stack, Frank Menzel
- Voriger (Thread): [ct-bot] Stackimplementation und Verhalten bot_drive_stack, Frank Menzel
- Nächster (Thread): Re: [ct-bot] Stackimplementation und Verhalten bot_drive_stack, Frank Menzel
- Indizes:
  - Datum
  - Thread