TIA wo geht mein Datenarbeitsspeicher hin?

Zuviel Werbung?
-> Hier kostenlos registrieren
Das ganze mit der Speicherverschwendung währe eigentlich kein Problem,
wenn Siemens den Preis der Zeit angepasst hätte. Sie lassen sich zur Zeit
den Speicher noch bezahlen, als würde dieser noch aus Röhren bestehen,
wie vor 70 Jahren.

Wenn du dir die Vergleichslisten von Siemens ansiehst welche 1500er du als Ersatz für einer 300er verwenden sollst, dann kann diese wirklich nicht viel mehr. Hinzu kommt, dass bei der 300er per sé jeder DB remanent ist, was ich zudem sehr praktisch finde. Wenn du das bei der gleichwertigen 1500er machst, dann geht dir schnell der Speicher aus.
Und wenn du dann vor hast deine Codebasis von der 1500er auch auf der 1200er einzusetzen, musst du noch mehr aufpassen da nicht zu verschwenderisch mit dem Speicher umzugehen.
 
Nur so eine Frage an Rande: die 100 Byte Standard-Speicherreserve ist ausgeschaltet?


Nein die war natürlich eingeschaltet. Das hab ich gar nicht bedacht, weil mir die Speicherreserve irgendwie noch nie was genützt hat, ist die komplett aus meiner Sicht verschwunden. Aber tatsächlich da geht schonmal 100 Byte für flöten.

Ich hab mir derweil gedacht, wenn ich nun schon speicheroptimiert programmieren muss und so micro Funktionsblöcke keinen Sinn machen, kann man ja auch gleich noch etwas CPU optimierter aufbauen.

Code:
REGION Timestamp    
#timestamper.rfStatus1 := #Signal_Obj_LST.Status.Status1 AND NOT #timestamper.mStatus1;
    #timestamper.mStatus1 := #Signal_Obj_LST.Status.Status1;
    FOR #index := 0 TO 7 DO
        IF BYTE_TO_BOOL(SHR_BYTE(IN := #timestamper.rfStatus1, N := #index)) THEN
            #Signal_WEB.Status.Status1_Timestamp[#index] := #localtime;
        END_IF;
    END_FOR;
    
    #timestamper.rfStatus2 :=  #Signal_Obj_LST.Status.Status2 AND NOT #timestamper.mStatus2;
    #timestamper.mStatus2 := #Signal_Obj_LST.Status.Status2;
    FOR #index := 0 TO 7 DO
        IF BYTE_TO_BOOL(SHR_BYTE(IN :=  #timestamper.rfStatus2, N := #index)) THEN
            #Signal_WEB.Status.Status2_Timestamp[#index] := #localtime;
        END_IF;
    END_FOR;
    
    #timestamper.rfStatus_Internal := #Signal_Obj_LST.Status.Status_Internal AND NOT #timestamper.mStatus_Internal;
    #timestamper.mStatus_Internal := #Signal_Obj_LST.Status.Status_Internal;
    FOR #index := 0 TO 31 DO
        IF DWORD_TO_BOOL(SHR_DWORD(IN := #timestamper.rfStatus_Internal, N := #index)) THEN
            #Signal_WEB.Status.Status_Internal_Timestamp[#index] := #localtime;
        END_IF;
    END_FOR;
END_REGION

Ich kann aber nicht sagen ob das Zyklus mässig effektiv was bringt. denn immerhin verbrauch ich so zwei bytes und ein dword mehr statischen speicher. Dafür muss er nicht zweimal 47 mal bits schubsen wie im alten code.
Was denkt ihr, wär was für Programmierstrategien?
 
Zuletzt bearbeitet:
Zurück
Oben