Re: switch Abfrage Kategorie: Programmierung C (von Josef - 1.11.2015 10:37) | ||
Als Antwort auf Re: switch Abfrage von Josef - 28.10.2015 23:12 | ||
| ||
Hallo UlliS, danke für deine Unterstützung, habe den Fehler mit systematischen Ausgaben gefunden (Initialisierung des Displays war ein Bug). Es hat zwar alles auf switch Funktion (durch Auslagerung in U-Prg) gezeigt, Bug behoben und es funkt. Kann bestätigen, switch Funktion hat keine Begrenzung. > ich sende dir für den Test noch das komplette Prg > > > Anbei sende ich dir die screenshots. > > Beim screenshot 1 mit aktivierten U Prg funktioniert das Prog. Jetzt wird die Endlosschleife > > nicht mehr unterbrochen, wenn das Prg so wie im screenshot 2 compiliert wird. Jedoch habe ich > > am Display keine Anzeige mehr. > > > > > > > Also eigentlich gibt's keine Beschränkung bei Switch. > > > Wenn Du mal das Prog. soweit abspeckst und als Demo hier als Dateianhang anfügen würdest ging es > > > schneller mit Debuggen :-) > > > > > > Evtl. auch einen Screenshot deiner Fehlermeldung. > > > > > > > > > > > > Hallo zusammen, > > > > > > > > > > > > habe eine sehr lange switch Abfrage. Caseabfragen sinds ca. 30. > > > > > > Gibt es hier eine Begrenzung der Befehlszeilen? > > > > > > Das Problem tritt auf, wenn ich in einer caseabfrage mehr > > > > > > als 16 Befehlszeilen habe. Beim compilieren wird keine Fehlermeldung angezeigt. > > > > > > Der Start wird trotz Endlosschleife jedoch nach 250ms unterbrochen. > > > > > > Habe die Befehlszeilen in ein U-Prg ausgelagert, dann funktionierts. > > > > > > > > > > > > > > > > Kannst du das Bespiel hier mal als Zip anhängen zum testen? > > > > > > > > > Danke für die rasche Antwort. > > > > > > > > Ich hänge mal das U-Prg an in dem es passiert ist. In Zeile 200 und 204 habe ich die Befehlszeilen > > > > und ein weiteres U-Prg auslagern müssen.(Zeile habe ich fett gekennzeichnet) > > > > In diesem U-Prg werden von einem Touchdisplay die vorher definierten Tasten beim Seitenwechsel > > > > gelöscht. > > > > > > > > // -- Bei der Definition neuer Touchpages sind die vorigen Seiten zu löschen --- > > > > void page_change(void) > > > > { > > > > eDIP_cmd16(0,'R','L',0,51,480,255,d16,d16); // Bereich löschen > > > > eDIP_cmd16(0,'R','L',150,254,350,272,d16,d16); // Bereich löschen > > > > switch (m_page) // Vorige Touchbereiche löschen > > > > { > > > > case pageError: > > > > eDIP_cmd4_8('A','L',Error_return,1); > > > > eDIP_cmd4_8('A','L',Error_reset,1); > > > > break; > > > > case page1: > > > > eDIP_cmd4_8('A','L',menu_down,1); > > > > eDIP_cmd4_8('A','L',pageWG_MWdown,1); // Vesteckte Taste für WG Daten > > > > eDIP_cmd4_8('A','L',page_E_KFZ_down,1); // Vesteckte Taste für KFZ-Ladedaten > > > > if (page!=pageE_KFZ) // sonst wird in KFZ Seite das Menü angezeigt > > > > { > > > > if (menu==page3_menu) TOUCHMENU3_DELETE(); > > > > if (menu==page2_menu) TOUCHMENU2_DELETE(); > > > > if (menu==page1_menu) TOUCHMENU1_DELETE(); > > > > Menu_page1(); //Menüanzeige initialisieren > > > > menu=page1_menu; > > > > m_menu=menu; > > > > eDIP_cmd4_8('A','P',pagePVdown,1); //Schalter PV-Seite stellen > > > > } > > > > else eDIP_cmd16(0,'R','L',0,0,480,255,d16,d16); // gesamten Bereich löschen > > > > break; > > > > case pageE_KFZ: > > > > eDIP_cmd4_8('A','L',E_KFZvoll_down,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',E_KFZ_4h_down,1); > > > > eDIP_cmd4_8('A','L',E_KFZ_7h_down,1); > > > > eDIP_cmd4_8('A','L',E_KFZ_Eco_down,1); > > > > eDIP_cmd4_8('A','L',E_KFZ_Ecoplus_down,1); > > > > eDIP_cmd4_8('A','L',E_KFZ_AUS_down,1); > > > > eDIP_cmd4_8('A','L',menu_ret_down,1); > > > > break; > > > > case pageWG: > > > > eDIP_cmd4_8('A','L',BeschOBENdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',BeschUNTENdown,1); > > > > eDIP_cmd4_8('A','L',FensterZUdown,1); > > > > eDIP_cmd4_8('A','L',FensterOFFENdown,1); > > > > eDIP_cmd4_8('A','L',KlappeZUdown,1); > > > > eDIP_cmd4_8('A','L',KlappeOFFENdown,1); > > > > eDIP_cmd4_8('A','L',SpeicherAUSdown,1); > > > > eDIP_cmd4_8('A','L',SpeicherEINdown,1); > > > > eDIP_cmd4_8('A','L',WGBautodown,1); > > > > eDIP_cmd4_8('A','L',WGFautodown,1); > > > > eDIP_cmd4_8('A','L',WGKautodown,1); > > > > eDIP_cmd4_8('A','L',WGSautodown,1); > > > > break; > > > > case pageAlarm: > > > > eDIP_cmd4_8('A','L',Al_Start_plus,1); > > > > eDIP_cmd4_8('A','L',Al_Ende_plus,1); > > > > eDIP_cmd4_8('A','L',Al_Start_minus,1); > > > > eDIP_cmd4_8('A','L',Al_Ende_minus,1); > > > > eDIP_cmd4_8('A','L',Al_ein_down,1); > > > > eDIP_cmd4_8('A','L',Al_ein_down,1); > > > > eDIP_cmd4_8('A','L',Al_Panik_down,1); > > > > eDIP_cmd4_8('A','L',Al_Urlaub_down,1); > > > > eDIP_cmd4_8('A','L',Al_StiegeLicht_down,1); > > > > break; > > > > case pageRollDach: > > > > eDIP_cmd4_8('A','L',RSobendown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RSuntendown,1); > > > > eDIP_cmd4_8('A','L',RSautodown,1); > > > > eDIP_cmd4_8('A','L',RBobendown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RBuntendown,1); > > > > eDIP_cmd4_8('A','L',RBautodown,1); > > > > eDIP_cmd4_8('A','L',RKobendown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RKuntendown,1); > > > > eDIP_cmd4_8('A','L',RKautodown,1); > > > > break; > > > > case pagePV: > > > > eDIP_cmd4_8('A','L',WR_LufterON,1); > > > > eDIP_cmd4_8('A','L',WR_LufterOFF,1); > > > > // eDIP_cmd4_8('A','L',Speich_pumpON,1); > > > > // eDIP_cmd4_8('A','L',Speich_pumpOFF,1); > > > > // eDIP_cmd4_8('A','L',Speich_pumpautodown,1); > > > > break; > > > > case pageBewBLicht: > > > > eDIP_cmd4_8('A','L',BewassrgONdown,1); > > > > eDIP_cmd4_8('A','L',BewassrgOFFdown,1); > > > > eDIP_cmd4_8('A','L',Bewassrg_Start1,1); > > > > eDIP_cmd4_8('A','L',Bewassrg_Lauf1,1); > > > > eDIP_cmd4_8('A','L',Bewassrg_Start2,1); > > > > eDIP_cmd4_8('A','L',Bewassrg_Lauf2,1); > > > > eDIP_cmd4_8('A','L',BLichtONdown,1); > > > > eDIP_cmd4_8('A','L',BLichtOFFdown,1); > > > > eDIP_cmd4_8('A','L',BLicht_Start,1); > > > > eDIP_cmd4_8('A','L',BLicht_Lauf,1); > > > > break; > > > > case pageZSaugTeichp: > > > > eDIP_cmd4_8('A','L',H2O_EnthartgON,1); > > > > eDIP_cmd4_8('A','L',H2O_EnthartgOFF,1); > > > > eDIP_cmd4_8('A','L',ZSaugerON,1); > > > > eDIP_cmd4_8('A','L',ZSaugerOFF,1); > > > > eDIP_cmd4_8('A','L',ZSauger_Nachl,1); > > > > eDIP_cmd4_8('A','L',TeichpONdown,1); > > > > eDIP_cmd4_8('A','L',TeichpOFFdown,1); > > > > eDIP_cmd4_8('A','L',TeichpTIME1,1); > > > > eDIP_cmd4_8('A','L',TeichpTIME2,1); > > > > eDIP_cmd4_8('A','L',TeichpAUTO,1); > > > > break; > > > > case pageRollKUCHE: // Touchs von Rolladen Küche löschen > > > > eDIP_cmd4_8('A','L',RKNeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RKNausfdown,1); > > > > eDIP_cmd4_8('A','L',RKNautodown,1); > > > > eDIP_cmd4_8('A','L',RKOeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RKOausfdown,1); > > > > eDIP_cmd4_8('A','L',RKOautodown,1); > > > > case pageRollWZ: // Touchs von Rolladen Wohnzimmer löschen > > > > eDIP_cmd4_8('A','L',RWZTeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RWZTausfdown,1); > > > > eDIP_cmd4_8('A','L',RWZTautodown,1); > > > > eDIP_cmd4_8('A','L',RWZSeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RWZSausfdown,1); > > > > eDIP_cmd4_8('A','L',RWZSautodown,1); > > > > eDIP_cmd4_8('A','L',RWZWeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RWZWausfdown,1); > > > > eDIP_cmd4_8('A','L',RWZWautodown,1); > > > > break; > > > > case pageRollOG: // Touchs von Rolladen OG löschen > > > > eDIP_cmd4_8('A','L',RGOeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RGOausfdown,1); > > > > eDIP_cmd4_8('A','L',RGOautodown,1); > > > > eDIP_cmd4_8('A','L',RGTeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RGTausfdown,1); > > > > eDIP_cmd4_8('A','L',RGTautodown,1); > > > > eDIP_cmd4_8('A','L',RSTeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RSTausfdown,1); > > > > eDIP_cmd4_8('A','L',RSTautodown,1); > > > > eDIP_cmd4_8('A','L',RKWeinfdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RKWausfdown,1); > > > > eDIP_cmd4_8('A','L',RKWautodown,1); > > > > break; > > > > case pageFS20: // Touchs von Rolladen Küche löschen > > > > FS20_CLEAR(); // U-Prg notwendig, da zu viel Befehlzeilen für switch > > > > RS232=WR_RS; // RS232 auf WR zurückstellen (Mux und Baudrate) > > > > break; > > > > case pageHEIZUNG_STAT: // Touchs löschen > > > > HEIZUNG_STAT_CLEAR(); // U-Prg notwendig, da zu viel Befehlzeilen für switch > > > > break; > > > > case pageHEIZUNG_EINSTLLG: // Touchs löschen > > > > eDIP_cmd4_8('A','L',Hzgwahl_down,1); > > > > eDIP_cmd4_8('A','L',HK_Tempdown,1); > > > > eDIP_cmd4_8('A','L',FBH_Tempdown,1); > > > > break; > > > > case pageHEIZUNG_ZEIT: // Touchs von Rolladen Küche löschen > > > > eDIP_cmd4_8('A','L',GasZeitdown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',PufferZeitdown,1); > > > > eDIP_cmd4_8('A','L',FBH_Zeitdown,1); > > > > break; > > > > case pageHEIZUNG_ENERGIE: > > > > eDIP_cmd4_8('A','L',StartEnergie,1); > > > > eDIP_cmd4_8('A','L',StopEnergie,1); > > > > break; > > > > } > > > > if (menu!=m_menu) > > > > { > > > > switch (m_menu) // Vorige Touchbereiche löschen > > > > { > > > > case page3_menu: > > > > TOUCHMENU3_DELETE(); > > > > Menu_page1(); //Menüanzeige initialisieren > > > > page=pagePV; > > > > eDIP_cmd4_8('A','P',pagePVdown,1); //Schalter PV-Seite stellen > > > > break; > > > > case page2_menu: > > > > TOUCHMENU2_DELETE(); > > > > Menu_page3(); //Menüanzeige initialisieren > > > > page=pageHEIZUNG_TMP; > > > > eDIP_cmd4_8('A','P',pageHEIZUNG_TMPdown,1); //Schalter PV-Seite stellen > > > > break; > > > > case page1_menu: > > > > TOUCHMENU1_DELETE(); > > > > Menu_page2(); //Menüanzeige initialisieren > > > > page=pageRollDach; > > > > eDIP_cmd4_8('A','P',pageRollDach_down,1); //Schalter > > > > break; > > > > } > > > > m_menu=menu; > > > > } > > > > switch (page) // Seitenauswahl > > > > { > > > > case pageError: > > > > ERROR_INIT(); > > > > ERROR_ANZ(); > > > > break; > > > > case page1: > > > > PAGE1_INIT(); // Seite 1 aktivieren > > > > PAGE1_ANZ(); > > > > break; > > > > case pageE_KFZ: > > > > PAGE_E_KFZ_INIT(); > > > > PAGE_E_KFZ_ANZ(); > > > > break; > > > > case pageWG_MW: > > > > WG_MW_INIT(); > > > > WG_MW_ANZ(); > > > > break; > > > > case pageBewBLicht: > > > > BLICHT_INIT(); > > > > BLICHT_ANZ(); > > > > break; > > > > case pageWG: > > > > WG_INIT(); > > > > WG_ANZ(); > > > > break; > > > > case pagePV: > > > > PV_INIT(); > > > > PV_ANLAGE(); > > > > PV_ANZ(); > > > > break; > > > > case pageAlarm: > > > > ALARM_INIT(); > > > > ALARM_ANZ(); > > > > break; > > > > case pageZSaugTeichp: > > > > ZSAUG_TEICHP_H2OENTHARTG_INIT(); > > > > ZSAUG_TEICHP_H2OENTHARTG_ANZ(); > > > > break; > > > > case pageRollDach: > > > > ROLL_DACH_INIT(); > > > > ROLL_DACH_ANZ(); > > > > break; > > > > case pageRollKUCHE: > > > > ROLL_KUCHE_INIT(); > > > > ROLL_KUCHE_ANZ(); > > > > break; > > > > case pageRollWZ: > > > > ROLL_WZ_INIT(); > > > > ROLL_WZ_ANZ(); > > > > break; > > > > case pageRollOG: > > > > ROLL_OG_INIT(); > > > > ROLL_OG_ANZ(); > > > > break; > > > > case pageFS20: > > > > RS232=FS20page_RS; // RS232 auf FS20 stellen (Mux und Baudrate) > > > > FS20_INIT(); > > > > FS20_ANZ(); > > > > break; > > > > case pageHEIZUNG_STAT: > > > > HEIZUNG_STAT_INIT(); > > > > HEIZUNG_STAT_ANZ(); > > > > break; > > > > case pageHEIZUNG_EINSTLLG: > > > > HEIZUNG_EINSTLLG_INIT(); > > > > HEIZUNG_EINSTLLG_ANZ(); > > > > break; > > > > case pageHEIZUNG_ZEIT: > > > > HEIZUNG_ZEIT_INIT(); > > > > HEIZUNG_ZEIT_ANZ(); > > > > break; > > > > case pageHEIZUNG_TMP: > > > > HEIZUNG_TMP_INIT(); > > > > HEIZUNG_TMP_ANZ(); > > > > break; > > > > case pageHEIZUNG_ENERGIE: > > > > HEIZUNG_ENERGIE_INIT(); > > > > HEIZUNG_ENERGIE_ANZ(); > > > > break; > > > > > > > > } > > > > if (month) DATUM(); > > > > m_page=page; > > > > } > > > > void FS20_CLEAR(void) > > > > { > > > > eDIP_cmd4_8('A','L',RKNtimedown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',RKOtimedown,1); > > > > eDIP_cmd4_8('A','L',RWZTtimedown,1); > > > > eDIP_cmd4_8('A','L',RWZStimedown,1); > > > > eDIP_cmd4_8('A','L',RWZWtimedown,1); > > > > eDIP_cmd4_8('A','L',RGOtimedown,1); > > > > eDIP_cmd4_8('A','L',RGTtimedown,1); > > > > eDIP_cmd4_8('A','L',RSTtimedown,1); > > > > eDIP_cmd4_8('A','L',RKWtimedown,1); > > > > } > > > > void HEIZUNG_STAT_CLEAR(void) > > > > { > > > > eDIP_cmd4_8('A','L',HEIZGautodown,1); // vorige Touchbereiche löschen > > > > eDIP_cmd4_8('A','L',HEIZGhanddown,1); > > > > eDIP_cmd4_8('A','L',GasEINdown,1); > > > > eDIP_cmd4_8('A','L',PufferEINdown,1); > > > > eDIP_cmd4_8('A','L',HK_EINdown,1); > > > > eDIP_cmd4_8('A','L',HK_AUSdown,1); > > > > eDIP_cmd4_8('A','L',FBH_EINdown,1); > > > > eDIP_cmd4_8('A','L',FBH_AUSdown,1); > > > > eDIP_cmd4_8('A','L',OfenEINdown,1); > > > > eDIP_cmd4_8('A','L',OfenAUSdown,1); > > > > eDIP_cmd4_8('A','L',HKMischerAUFdown,1); > > > > eDIP_cmd4_8('A','L',HKMischerZUdown,1); > > > > eDIP_cmd4_8('A','L',FBHMischerAUFdown,1); > > > > eDIP_cmd4_8('A','L',FBHMischerZUdown,1); > > > > } | ||
Antwort schreiben Antworten: Re: switch Abfrage (von Josef - 1.11.2015 12:13) Re: switch Abfrage (von Josef - 1.11.2015 12:27) Re: switch Abfrage (von UlliS - 2.11.2015 8:59) Re: switch Abfrage (von Josef - 2.11.2015 21:06) Re: switch Abfrage (von Josef - 4.11.2015 20:52) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum