Hilfe bei Statemachine (Yakindu C-Code)

OP #3841695
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe gerade das Statemachine Turorial gelesen:
http://www.mikrocontroller.net/articles/Statemachine
und einen ersten Versuch mit dem Yakindu SCT gemacht (das Ampelbeispiel 
1, allerdings wird der Statewechsel nicht mit einem Timer sondern auf 
Tastendruck durchgeführt).
Der C-Code Genarator erstellte mir 4 Files (Anhang).
Wie kann ich diese Statemachine jetzt in einem Programm verwenden. Ich 
weiss nicht, was ich als Funktionsparameter übergeben soll.

Als erstes muss wohl die SM initialisiert werden mit der Funktion:
1
void ampel_init(Ampel* handle) //was muss ich hier genau übergeben?
2
{
3
...
4
}

Vielleicht hat jemand schon Erfahrung mit dem Codegenerator gemacht und 
kann mir mal die ersten Schritte erklären.

Danke.
Angehängte Dateien:
OP #3841947
Lesenswert?
• ▲
▼
Danke für Deine Antwort.

Der Datentyp "Ampel" ist in ampel.h als structure definiert:
1
/*! Type definition of the data structure for the Ampel state machine.
2
This data structure has to be allocated by the client code. */
3
typedef struct
4
{
5
    AmpelStates stateConfVector[AMPEL_MAX_ORTHOGONAL_STATES];
6
    sc_ushort stateConfVectorPosition; 
7
    AmpelIfaceUser ifaceUser;
8
} Ampel;

Mike schrieb:
> Du brauchst eine Variable vom Typ Ampel. Übergeben tust du einen
> Pointer auf diese Variable

Aber welches Element muss ich dann uebergeben
und welchen Zweck haben diese?
Wie übergebe ich dann den Pointer in diesem Fall?
1
void main (void)
2
{
3
    ampel_init(Ampel.stateConfVector); //Element ist ein Array, kein Adressoperator?
4
    ampel_init(&Ampel.stateConfVectorPosition); //???
5
    ampel_init(&Ampel.ifaceUser);  //???
6
}
OP #3842071
Lesenswert?
• ▲
▼
Danke,

ich habe mir das falsch gedacht...
Ich habe gedacht, dass ich an die Funktion die Adresse von einem 
"Handler" mit einer ID oder sowas übergeben muss, die ich vorher 
festlege.

Mark Brandis schrieb:
> Ampel my_ampel;        // Eine Variable von Typ "Ampel" anlegen
> ampel_init(&my_ampel); // Adresse der angelegten Variable übergeben

Also ich lege eine Variable (typ structure) an und übergebe diese ohne 
irgendeine Zuweisung. Die Variable wird dann in der Funktion 
weiterverarbeitet (und weitergegeben als Adresszeiger).

Ok. Also nach der Initialisierung kann ich dann direkt auf die SM 
ampel_runCycle() zugreifen?
Der Codegenerator hat recht viele Funktionen erstellt (in ampel.c), 
deren Zweck ich noch nicht erkennen kann.
Ich muss ja jetzt in den State 0 gelangen (Ampel rot) und dann durch 
eine Benutzeraktion (Tastendruck) in den Zustand State 1 gelangen usw.
Vielleicht kann mir da jemand helfen?
1
char getbutton(void)
2
{
3
    //Tastenabfrage
4
    return (1);
5
}
6

7

8
void main (void)
9
{
10
    Ampel my_ample;
11
    Nop();
12
    Nop();
13
    Nop();
14
    ampel_init(&my_ample);
15
    ampel_enter(&my_ample);
16
    while(1)
17
    {
18
        if(getbutton()==1)
19
        {
20
            ampelIfaceUser_raise_tick(&my_ample);
21
        }
22
        ampel_runCycle(&my_ample);
23
    }
24
}

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.