B&R: Zugriff auf Globale Variablen innerhalb einer Funktion

Leuchtkeks

Level-1
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich wollte gerade folgendes Ausprobieren: Einen Ringpuffer in den ich bequem per Funktionsaufruf eine Nachricht reinschreibe. Parallel dazu wollte ich in einem Task zyklisch nachschauen sind Nachrichten da, wenn ja schick die an einen Syslog-Server. Also z.B. so

Code:
if ( foo <= 0) then
    logmsg("Help, we're all out of foo's")
endif

Ich hab mir dann unter Datentypen eine Struktur erstellt:

Code:
typedef struct logmsg_s {
    unsigned short idx;
    plcstring message[20][256]
} logmsg_s;

Ich hab das jetzt per Automation Basic und mit C probiert, aber beim kompilieren sagt der mir immer das er die Struktur nicht kennt. An der B&R Hotline sagte man mir das ich logischerweise noch eine globale Variable definieren muss. Also eine globale Variable deklariert, kein Erfolg. Im Library-Manager die Variable als VAR_DYNAMIC hinzugefügt, auch kein Erfolg. Im Handbuch wird das auch nirgens gescheit erklärt oder ich bin zu doof dazu. Vielleicht ist mein Ansatz für die Lösung auch falsch, keine Ahnung. Ich hoffe jemand von euch kann mir den Schubs in die richtige Richtung geben.

Gruß,
Marco
 
Per Library-Manager hab ich das jetzt ungefähr so hinbekommen, nur muss ich der Funktion einen Pointer für meine Struktur übergeben. Ich bin aber faul, also hab ich das ganze nochmal direkt im Task gemacht und dort die Funktion reingeschrieben und den Funktions-Prototyp in eine .h-Datei gepackt. Wenn ich jetzt aber in einem anderen Task die Funktion aufrufen möchte sagt der mir immer "undefined reference", obwohl der include richtig ist.
 
Das Problem ist, dass der Linker nicht weiß wo sich deine Funktion befindet.
Der einfachste Weg ist eine Library, alternativ kannst du es auch mit einem Funktionspointer lösen.
 
Zurück
Oben