Ankündigung

Einklappen
Keine Ankündigung bisher.

Makro expansion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [EibParser] Makro expansion

    Hallo,
    soweit ich bisher beobachtet habe, kann ich den return Wert eines Makros in einem anderen Macro verwenden.
    Beispiel mit zwei Variationen:
    Code:
    // dieses Makro untern verwendet
    :begin Sp_Ret_EgRadMin()
    :return(min("HVAC_C-3/2/42","HVAC_E-3/2/44"))
    :end
    //////////////////////////////////////////////////
    :begin Sp_SetHk3_EG_minMode(minMDTMode)
    :var mi@ 
    mi@ = Sp_Ret_EgRadMin()
    if(event("HVAC_C-3/2/42") or event("HVAC_E-3/2/44")  ) then{
    	if(mi@ < HZ_MDT_NIGHT  ) 	then minMDTMode = HZ_MDT_KOMFORT endif;
    	if(Sp_Ret_EgRadMin() < HZ_MDT_NIGHT  ) 	then minMDTMode = HZ_MDT_KOMFORT endif
    	}endif
    :end
    Der Parser expandiert nun den Text in zwei Files:
    tmpMacroFuncOut.txt:
    Code:
    // Expanded Functions - Code generated by Macroexpander of EibParser v2.312 (Windows Win32 Version)
    //
    
    (min("HVAC_C-3/2/42","HVAC_E-3/2/44"))
    
    // -------------- End of expansion ------------
    
    (min("HVAC_C-3/2/42","HVAC_E-3/2/44"))
    
    // -------------- End of expansion ------------
    tmpMacroOut.txt
    Code:
    __Sp_SetHk3_EG_minMode_11__mi = Sp_Ret_EgRadMin()
    if(event("HVAC_C-3/2/42") or event("HVAC_E-3/2/44")  ) then{	
    	if(__Sp_SetHk3_EG_minMode_11__mi < HZ_MDT_NIGHT  ) 	then 
    		HzEG_MDTminiMode = HZ_MDT_KOMFORT endif;
    	if(Sp_Ret_EgRadMin() < HZ_MDT_NIGHT  ) 	then 
    		HzEG_MDTminiMode = HZ_MDT_KOMFORT endif	}
    endif
    Der Code geht ohne Fehler durch den Compiler aber ich finde kein "tmp*.txt" File mit den komplett expandierten Makros.
    Desshalb meine Frage:
    - Werden die inneren if() clause ( beide?) invalid wenn "HVAC_C-3/2/42" oder "HVAC_E-3/2/44" invalid werden? Mit anderen Worten, ist die aussere if() clause redundant?

    Gruß Alexander

    #2
    Zitat von asc570 Beitrag anzeigen
    - Werden die inneren if() clause ( beide?) invalid wenn "HVAC_C-3/2/42" oder "HVAC_E-3/2/44" invalid werden? Mit anderen Worten, ist die aussere if() clause redundant?
    es wird das event() für beide invalid. Die Frage verstehe ich aber ehrlich nicht so wirklich.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Ok, neuer Versuch:
      Code:
      // dieses Makro untern verwendet
      :begin macro1()
      :return(min("HVAC_C-3/2/42","HVAC_E-3/2/44"))
      :end
      //////////////////////////////////////////////////
      :begin macro2(minMDTMode)
      if(macro() < HZ_MDT_NIGHT  ) 	then minMDTMode = HZ_MDT_KOMFORT endif
      :end
      Wird der then-Teil ausgeführt wenn sich "HVAC_C-3/2/42" oder "HVAC_E-3/2/44" ändert?

      tmpMacroOut.txt sieht so aus:
      Code:
      if(macro1() < HZ_MDT_NIGHT  ) 	then 
      		HzEG_MDTminiMode = HZ_MDT_KOMFORT endif
      Der "Preprocessor" lässt da das macro1 als Funktionsaufruf stehen, und ich hätte gerne gewust, wie der Compiler in Bezug auf die Validierung damit umgeht.

      Gruß,
      Alexander

      Kommentar

      Lädt...
      X