INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Liebe Kommunity, ich will einen Umlaufpuffer programmieren. Das ist eine Liste mit 6 Einträgen. Ein Zeiger wird beim Start auf den Anfang der Liste gesetzt. Bei einem neuen Eintrag in die Liste wird der Zeiger weiter geschaltet. Geht er über das Ende der Liste hinaus, wird auf den Anfang zurück geschaltet. das schien mir die günstigste Lösung gegenüber einem Index für die Liste, da es dafür keine richtigen Sprachmittel gibt. Nun habe ich ein Problem: Mein großes Programm, in dem ich das realisiert hatte, verschwand nach dem Start im Nirwana. Ein Testprogramm nur mit der Pointerhantierung zeigte seltsame Daten. Hier mein Testprogramm. Ich habe die Kommentare mal drin gelassen. 'Einzelwerte für den gleitenden Mittelwert 'Das ist speziell für das Lesen der Solarleisatung 'Sie wird alle 10 sek gelesen und daraus ein "gleitender Mittelwert" 'über eine Minute gemacht, d.h. es werden immer 6 Werte gelesen 'aufsummiert und durch 6 geteilt define gleitwert word[24] 'Mittelwert der vergangenen Minute define gleitwert_1 word[25] define gleitwert_2 word[26] define gleitwert_3 word[27] define gleitwert_4 word[28] define gleitwert_5 word[29] define gleitwert_6 word[30] define floatwert word[31] : define ^p_gleitwert word[41] 'Der wird einmal bei Anlauf auf den ersten Wert der obigen Liste gesetzt, 'rotiert dann immer vom ersten bis letzten Wert, dann wieder zurück auf den ersten : : p_gleitwert = ^gleitwert_1 : #sekunden_zyklus : if second mod 10 = 0 then floatwert = floatwert + 1 'Das ist nur ein Hilfswert zur Kontrolle des Abspeicherns print "10 sec Zählerwerte lesen" gosub gleitwert_aktualisiern end if : : goto sekunden_zyklus '---------------------------------------------------------------------- #gleitwert_aktualisiern 'Ein: floatwert: neuer Eintrag in die Liste 'Der Zeiger p_gleitwert zeigt noch auf den letzten Eintrag, 'muss also vor dem Eintragen eins weiter geschaltet werden p_gleitwert = p_gleitwert + 1 if p_gleitwert > ^gleitwert_6 then p_gleitwert = ^gleitwert_1 end if @p_gleitwert = floatwert gleitwert = (gleitwert_1 + gleitwert_2 + gleitwert_3 + gleitwert_4 + gleitwert_5 + gleitwert_6) / 6 return Ich habe die Werte von p_gleitwert ausgegeben, er ist nach dem Programmstart 20 statt der erwarteten 24. Auch wird er in der Routine #gleitwert_aktualisiern mal weiter geschaltet, mal nicht. Frage: Was ist da faul? Ist die Anweisung if p_gleitwert > ^gleitwert_6 then erlaubt? Danke und Gruß in die Runde Laika PS: Ich weiß, dass Du, Dietmar, die absolute Definition von Variablen nich empfiehlst. Aber nimm es einfach mal hin. |
Antwort schreiben |