Hilfe bei Statemachine (Yakindu C-Code)

#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:
#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
}
#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren