Zeiger auf Adresse des Unterprogramm

Gast #1005941
Lesenswert?

@ Siegfried
1
unsigned int *ProzessUpAdresse;
ist kein Zeiger auf eine Funktion, sondern ein Zeiger auf unsigned int.

Damit, man den Zeiger richtig deklarieren kann, zeige mal die 
Deklaration der Funktion
1
FahrstrasseAusfahrenSbhGleis_15 ()

Nebenbei bemerkt, scheint mir die Nummer am Ende der Funktion auf 
mögliche Verbesserungen im Design hinzudeuten. Es ist sehr viel Aufwand 
15 oder mehr Funktionen zu deklarieren und zu schreiben. Das kann man 
vermutlich kürzer erledigen.
OP #1005965
Lesenswert?

Hallo,
hier die Deklaration der Funktion
->  unsigned char FahrstrasseAusfahrenSbhGleis_15(void)  <-

welch "Verbesserungen im Design" könnte ich machen ?
Die Deklaration der Funktion geht von FahrstrasseAusfahrenSbhGleis_11 
bis FahrstrasseAusfahrenSbhGleis_15.

möchte mal kurz beschreiben, was ich mit dem "Zeiger auf Adresse des 
Unterprogramm" vorhabe.

In der Funktion "FahrstrasseAusfahrenSbhGleis_XX" werden unterschiedlich 
Abläufe und Anzahl in einen Buffer geladen. Diese Abläufe werden über 
einen Timer ausgeführt. Sollte jedoch beim laden des Buffers, dieser 
überlaufen, möchte ich den letzten Auftrag (Unterprogramm) sichern, 
sodas dieser wenn der Buffer wieder genügend Platz verfügt, nach geladen 
wird.

Gruß Siegfried
Gast #1005981
Lesenswert?

>hier die Deklaration der Funktion
1
unsigned char FahrstrasseAusfahrenSbhGleis_15 (void)

Dann muss der Zeiger auf die Funktion wie folgt deklariert sein:
1
unsigned char (* Funktionszeiger)(void);

Die Zuweisung wäre dann:
1
Funktionszeiger = & FahrstrasseAusfahrenSbhGleis_15 ();

Detail dazu findest Du auch im K&R 2. Auflage, Hanser, S. 116

>welch "Verbesserungen im Design" könnte ich machen ?
Auch aufgrund Deiner Beschreibung lässt sich das nicht im Detail 
erklären.
Allgemein sollte man generisch behandeln, was in wechselnden 
Ausprägungen vorkommt. Du schreibst ja auch keine Funktionen plus_1, 
plus_2, plus_3 usw. sondern benutzt den + Operator.

Du sagst ja, das in den Funktionen verschiedene Kombinationen von Daten 
in einen Buffer geladen werden. Wenn Du diese Daten selbst in einem 
Array oder einer geeigneten Struktur speicherst, die mit der 
Fahrstrassennummer indiziert werden, brauchst Du nur eine Funktion mit 
der Nummer als Parameter, die dann die Daten in Deinen Buffer lädt.
OP #1006039
Lesenswert?

Hallo,
Infos sind klasse, es funktioniert.
Habe bereits auch weiter geschrieben.

Funktionszeiger = FahrstrasseAusfahrenSbhGleis_15;
if (Funktionszeiger() == -1)
{
AddFahrstrasseError();
}

genau, das was ich haben wollte.

Vielen Dank an alle.

Gruß Siegfried

PS.
hat hierzu jemand die ISBN Nummer ?
K&R 2. Auflage, Hanser, S. 116
Gast #1006093
Lesenswert?

> Allerdings ist das Buch von 1990 Wahrscheinlich gibt es inzwischen
> Neuauflagen.

Soweit ich weiß, nicht. Eigentlich wäre so langsam eine C99-Auflage
fällig. Fast 10 Jahre nach Herausgabe des neuen Standards sinken aber
IMHO die Chancen, dass sich die Jungs noch einmal hinsetzen und das Buch
auf den neuesten Stand bringen.

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