Verwendung von Pointern bei Funktions Aufrufen

msauerpb

Level-2
Beiträge
203
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe von meinem Vorgänger, den ich leider nicht mehr fragen kann, unser Beckhoff SPS Projekt übernommen.
Für das Eventmanagement werden die Daten des Event (Id, Zeit, Datum, ...) in eine Struktur eingetragen. Innerhalb einer Funktion wird jetzt diese Struktur in eine Liste, beginnend von Platz 30 ansteigend, einsortiert.

Code:
    IF GVL_EVENT.ActuallEventList[_Run].ErrorCode <= 0 THEN
        GVL_EVENT.ActuallEventList[_Run].ErrorCode             := iNewEvent^.errorCode;
        GVL_EVENT.ActuallEventList[_Run].errorClass            := iNewEvent^.errorClass;
        GVL_EVENT.ActuallEventList[_Run].dateString            := iNewEvent^.dateString;
        GVL_EVENT.ActuallEventList[_Run].timeString            := iNewEvent^.timeString;
        GVL_EVENT.ActuallEventList[_Run].state                 := iNewEvent^.state;
        GVL_EVENT.ActuallEventList[_Run].actualTargetString    := iNewEvent^.actualTargetString;
        
        _End                                         := TRUE;
    END_IF

Mein Vorgänger hat jetzt dieser Funktion das die Struktur des einzelnen Events nicht als Variable übergeben, sondern als Pointer und dereferenziert dann beim einsortieren in die Liste diesen Pointer. Mir jetzt allerdings nicht klar, warum an dieser Stelle ein Pointer übergeben wird. Da könnte ich doch auch einfach die Variable übergeben oder bringt dies Vorteile bezgl. Speicher / Geschwindigkeit?

Ich hoffe ihr habt eine logische Erklärung dafür.

Danke schonmal für die Hilfe.
gruss
martin
 
Hallo,

wenn die Daten an eine Funktion übergeben werden und dort sortiert werden, macht das schon Sinn. Denn bei Funktionen gehts über den Stack (der hat aber jedoch eine begrenzte Größe und fehlt dann womöglich was an anderer Stelle).

Viele Grüße
 
Ich habe auch erst daran gedacht, dass es um die Vermeidung der Übergabe auf dem Stack geht. Scheinen ja alles Strings zu sein, so dass 1.5 kByte zusammenkommen könnten. Da kann man schon mal über Alternativen nachdenken, aber das würde doch auch mit einer Übergabe als VAR_IN_OUT einfacher gehen.
Vielleicht haben aber auch die Daten, die der Funktion übergeben werden, zwar den Aufbau eines iNewEvent, aber nicht dessen Datentyp, und der Pointer wird für eine heimliche Typumwandlung benötigt.
 
Zurück
Oben