Nochmal bitte Funktion vereinfachen???



  • Danke! Das ist hiermit geschehen.
    So, aber jetzt zu meiner Frage. Ich habe mal wieder eine Funktion *gg* die mir äußerlich nicht gefällt. Könnt ihr mir helfen sie zu vereinfachen?

    void LEDS_Handler (void)
    {
      int i = (int)evaluate_ex();
    #ifdef WIN32
      printf ("called LEDS_handler %d\n", i);
    #else
      if (i & 1)
      {
        LED_0_ON();    
      }
      else
      {
        LED_0_OFF();    
      }
      if (i & 2)
      {
        LED_1_ON();    
      }
      else
      {
        LED_1_OFF();    
      }
      if (i & 4)
      {
        LED_2_ON();    
      }
      else
      {
        LED_2_OFF();    
      }
      if (i & 8)
      {
        LED_3_ON();    
      }
      else
      {
        LED_3_OFF();    
      }
    #endif  
    }
    

    LED_X_ON/OFF sind Makros die IO-Ports ein und ausschalten.
    Vielen Dank!!!



  • War nur zum test.
    bei mir kommt da keine Spamwarnung



  • Das hättest du in Assembler aber eleganter lösen können.



  • hast du dir den account nur zum trollen angelegt?



  • Nein, ich meine die bit-operationen. Es gibt gewisse Assembler mnemonics die genau darauf ausgelegt sind um bestimmte bit states auszulesen, zu setzen etc. Das dürfte schneller sein als über ein bitwise or. (glaub ich zumindest)



  • du schrieb:

    Nein, ich meine die bit-operationen. Es gibt gewisse Assembler mnemonics die genau darauf ausgelegt sind um bestimmte bit states auszulesen, zu setzen etc. Das dürfte schneller sein als über ein bitwise or. (glaub ich zumindest)

    kann aber auch sein, dass der compiler den code genau für diese bit set/clear befehle erzeugt.
    🙂



  • Bouncer schrieb:

    du schrieb:

    Nein, ich meine die bit-operationen. Es gibt gewisse Assembler mnemonics die genau darauf ausgelegt sind um bestimmte bit states auszulesen, zu setzen etc. Das dürfte schneller sein als über ein bitwise or. (glaub ich zumindest)

    kann aber auch sein, dass der compiler den code genau für diese bit set/clear befehle erzeugt.
    🙂

    Das glaube ich kaum. Schließlich erzeugt der Compiler aus einem Konsolen-Adressbuch keinen Webbrowser.

    EDIT: Die Optimierlaune der compiler in allen Ehren aber ich glaube kaum, dass das OR mnemonic in das BT mnemonic mit den jeweiligen operanden umgewandelt wird.

    BT, BTC, BTR und BTS heissen diese mnemonics die auf der x86 Platform es einem ermöglichen, einfach bits zu setzen.



  • ich weiss ja nicht, wass die x86-compiler so machen, aber IAR und metrowerks compiler verwenden gnadenlos bitoperationen.
    🙂



  • statt:

    if (i & 1)
      {
        LED_0_ON();    
      }
      else
      {
        LED_0_OFF();    
      }
    

    lieber:

    (i & 1) ? LED_0_ON() : LED_0_OFF();
    

    oder mit switch case



  • Ja, weil weniger Zeilen ist *wtf*, und *wtf* ist direkt in Performance zu messen. Mit anderen Worten: Schwachfug.

    @ du: Bitte such dir ein anderes Forum. Danke.


Anmelden zum Antworten