-> Hier kostenlos registrieren
Ich starte hiermit den Thread für Themen rund um den Preprozessor.
Gruß Barnee
Gruß Barnee
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Speedy schrieb:Hallo zusammen,
gibt es irgendwelche Sachen die der Preprozessor bei unterschiedlichen CPUs berücksichtigen muss. Kennt z.B. die S7-200 float und double. Sind die Zahlenbereiche bei allen CPUs identisch.
Welche CPUs wollen wir überhaupt unterstützen?
Gruß Speedy
Rainer Hönle schrieb:Die 200er ist so ein bisschen ein Sonerthema bei Siemens. Kommt ursprünglich von ti (so heißt es). Hat fast nichts mit der 300er und 400er zu tun, außer gewisse Gemeinsamkeiten bei der Kommunikation. Mir wäre es arg Recht, wenn wir uns für den Anfang auf die "großen" konzentrieren könnten.
Siehe oben. SFCs und SFBs sind wie der Name schon sagt Funktionen und Funktionsbausteine des S7-Systems. Der Zugriff zu diesen Funktionen (ich fasse das mal zusammen, mir ist diese Siemens-Terminologie etwas lästig, weil der Unterschied ja nur Siemens-spezifisch ist) erfolgt aus der Sicht unseres C-Compilers wie auf eine gewöhnliche Library, d.h. wir werden für diese SFCs und SFBs C-spezifische Headerfiles erstellen, die dann durch unseren C-Compiler berücksichtigt werden.Jochen Kühner schrieb:es ist ja auch wichtig für uns welche SFB's und SFC's von der jeweiligen Cpu unterstützt werden...
Gut am anfang vieleicht noch nicht, aber falls wird dann eine lib zur stringverarbeitung einbauen muss ja klar sein ob z.b. der sfc20 (blockmove vorhanden ist oder nicht)
Rainer Hönle schrieb:Da müssen wir halt Codegenerierungsoptionen ähnlich Prozessor im VirtualStudio einbauen, damit die Steureungseigenheiten möglichst optimal unterstützt werden. Ineffizienten Code gibt es bereits genügend!
gt := IN1 > IN2;
ge := IN1 >= IN2;
eq := IN1 == IN2;
le := IN1 <= IN2;
lt := IN1 < IN2;
L #IN1
L #IN2
>I
= #gt
L #IN1
L #IN2
>=I
= #ge
L #IN1
L #IN2
==I
= #eq
L #IN1
L #IN2
<=I
= #le
L #IN1
L #IN2
<I
= #lt
L #IN1
L #IN2
>I
= #gt
>=I
= #ge
==I
= #eq
<=I
= #le
<I
= #lt
Das automatisch hinzubekommen ist nicht nur optimal sondern genial. Das muss der Codegenerierer sämtliche Registerinhalte "im Kopf" haben, dann geht das. Ist anzustreben aber nicht einfach. Die heutigen Compiler machen hier manches auch in mehreren Durchläufen nacheinander.Barnee schrieb:Nicht optimal!!!!!Und das wäre optimal:
Code:L #IN1 L #IN2 >I = #gt >=I = #ge ==I = #eq <=I = #le <I = #lt
L #IN1
L #IN2
>I
= #gt
NOT
= #le
>=I
= #ge
NOT
= #lt
==I
= #eq
Na, kürzer geht's wohl nimmer, was dieses Beispiel anbelangt. Es gäbe noch eine Variante, die ausschließlich mit den Vergleichen >I bzw. <I auskommen würde. Aber schlussendlich bliebe es trotzdem bei 12 ZeilenRainer Hönle schrieb:Bei der Darlegung, was richtiger und optimaler Code ist, ist mir noch etwas eingefallen. Sollten wir einen Optimizer vorsehen? Der müsste dann das Wissen über die Akkuinhalte haben und ggf. auch Code-Umorganisationen vornehmen.
Beispiel:
Der kann dann auch arbeiten, wenn die Akkus für die Vergleiche in unterschiedlicher Reihenfolge geladen werden und ggf. die Bedingungen negieren.Code:L #IN1 L #IN2 >I = #gt NOT = #le >=I = #ge NOT = #lt ==I = #eq
Klar, die Codelänge in Zeilen ist das eine, die Codelänge in Bytes oder die Ausführungszeit das andere. Da muss ich mich auch noch schlau machen und mit dem Spezialisten bei mir im Hause reden.Barnee schrieb:Na, kürzer geht's wohl nimmer, was dieses Beispiel anbelangt. Es gäbe noch eine Variante, die ausschließlich mit den Vergleichen >I bzw. <I auskommen würde. Aber schlussendlich bliebe es trotzdem bei 12 Zeilen
Mach ich gerne. Hatte schon immer eine Vorliebe für effizienten kompakten Code. Kommt wahrscheinlich noch aus der Zeit als jedes Byte richtig Geld gekostet hat :wink:Barnee schrieb:Rainer, wie wäre es, wenn du dich dieses Parts annehmen würdest? Ich glaube, dass da unsere Gedankengänge sich ähnlich sind. Bliebe aber zu beachten, das es wohl auch CPUs gibt, die nur mit zwei Akkus ausgerüstet sind, da müsste wohl ggf. eine Projektvoreinstellung berücksichtigt werden.
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen