Probleme bei Funktionsaufruf



  • Hallo,

    ich habe ein kleines Problem bei einem Funktionsaufruf. Die Funktion ist folgendermaßen deklariert :

    void PWN_SetFrequencySync ( UINT8 channel, UINT8 frequency );
    

    Wenn ich die Funktion jetzte so aufrufe :

    PWM_SetFrequencySync ( 16 , 100 );
    

    Dann wird mir wenn ich die Funktion debugge die 100 korrekt übergeben aber egal was ich auch vorne bei der 16 reinschreibe wird immer 0 an die Funktion übergeben. Hat jemand ne Ahnung an was das liegen könnte ?

    Ich programmiere gerade einen Treiber für einen Motorola HC12 auf Metrowerks Code Warrior. Vielleicht hatte jemand von euch dabei auch schon mal sowas ähnliches ?

    Danke

    Tom



  • Der Verschreiber wird wohl nicht der Fehler sein oder hast du eine Funktion die PWM_SetFrequencySync heist, du hast nämlich M mit N vertauscht.



  • Nein war blos ein Tippfehler hier im Forum, sonst würd ich auch nen Syntax Fehler kriegen. 😉



  • wenns nicht zu viel code ist, könntest dus mal reinkopieren



  • Die Funktion hat mindestens 5 Din A4 Seiten aber das Problem tritt nur da oben auf, der Rest würde funktionieren.



  • Übergibst du als 1. Parameter den festen Wert 16 oder eine Variable?

    Stimmt die Deklaration mit dem Definitionskopf deiner Funktion überein?



  • ist eine etwas komische Idee aber hast dus schon mal mit einem anderen Datentyp probiert?



  • @AJ:

    Ich kann eigentlich übergeben was ich will, ich hab schon feste Zahlen probiert und Variablen, aber es kommt immer 0 dabei rüber. Die Parameter stimmen, bei deklaration und Aufruf.

    @David14:
    Ein anderer Datentyp geht nicht, ich hab leider nicht unbegrenzt Speicher auf dem Controler und muss sparsam sein. Ausserdem sollte ein 8 Bit Datentyp für einen 8 Bit Wert eigentlich reichen. Der kann Maximal 255 kriegen.



  • und du veränderst den ersten parameter in der funktion nicht zufällig irgendwo?



  • en' bißl' code?



  • poste halt die funktion und deinen funktionsaufruf.
    ich denke des langt dann schon



  • Nein der wird nirgends verändert. Ich weiß nicht genau was ihr für code wollt ? Wenn ich die Funktion aufrufe, wird bei der Übergabe aus dem Wert einfach ne 0. Da kann der code in der Funktion doch sein wie er will. Der Fehler passiert definitiv beim übergeben der Parameter. Ich kann euch die Funktio hier schon komplett reinknallen aber dann habt ihr halt einen 10 Meter langen Beitrag ?

    Hier mal der auf den Es ankommt :

    Prototyp der Funktion :

    void PWM_SetFrequencySync (UINT8 frequency, UINT8 channel);
    

    Start der Funktion :

    void PWM_SetFrequencySync (UINT8 frequency, UINT8 channel) {
    
      UINT8 PwmOnAtCall;
      int TimerClk;
      UINT8 prescalerA;
      UINT8 prescalerB;
      UINT8 scaleA;
      UINT8 scaleB;
      int period;
      UINT8 temp;
    
      PwmOnAtCall = 0;
      TimerClk = 0;
      prescalerA = 0;
      prescalerB = 0;
      temp = 0;
      scaleA = 0;
      scaleB = 0;
    
      /* Prescaler A berechnen */
      temp = PWMPRCLK & 0x07; /* mask out ClockA */
    

    Und so ruf ich sie auf :

    PWM_SetFrequencySync (100,PWME_PWME0_MASK);
    


  • und welche variable ist nun 0?



  • vielleicht könntest die variable global deklarieren... sonst weiß ich auch nix 😕



  • Habs gelöst, bei Motorola hat ein unsigned char nur 7 Bit echt zum kotzen, auf sowas soll man mal kommen.


Anmelden zum Antworten