This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Variables zeroed out when doing simple math

I'm using RTL for my project, and what I am finding is that when I pass parameters (mentioned in another post) and when I do simple math the variables are zeroed out?

What in the world would cause this? I have never seen this, and I am really not sure what could be causing this. Has anyone ever seen this before, and what in the world do I need to do to prevent this?

Here is a snipit of code that is being zeroed:

pMot->STAT.ulPulseWidth = pMot->STAT.ulPulseWidth / 100;

pMot->STAT.ulSysClkPeriod = (unsigned long)(SysCtlClockGet() / PWM_PERIOD_DIV); pMot->STAT.ulPWMPeriod = pMot->STAT.ulSysClkPeriod * pMot->STAT.ulPulseWidth;

Parents
  • Looking at the code from the cross post:

        static volatile float fPWMPercent;
        static volatile unsigned long ulLocal;
    
        .
        .
        .
    
    
        ulLocal = ulVal;
    
        // Make sure we stay within the range of 50 - 100
        if (ulVal < 50)
            ulVal = 50;
    
        // Make sure we stay within the range of 50 - 100
        if (ulVal > 99)
            ulVal = 99;
    
        fPWMPercent = (ulLocal / 100);  ****** HERE IS WHERE THE PROBLEM IS ******
    

    ulLocal will have a value between 50 and 99 (inclusive). Using integer arithmetic, the result of that value divided by 100 will always be zero. This value is then converted to a float, which is zero.

    Looks like simple bad coding/assumptions to me.

Reply
  • Looking at the code from the cross post:

        static volatile float fPWMPercent;
        static volatile unsigned long ulLocal;
    
        .
        .
        .
    
    
        ulLocal = ulVal;
    
        // Make sure we stay within the range of 50 - 100
        if (ulVal < 50)
            ulVal = 50;
    
        // Make sure we stay within the range of 50 - 100
        if (ulVal > 99)
            ulVal = 99;
    
        fPWMPercent = (ulLocal / 100);  ****** HERE IS WHERE THE PROBLEM IS ******
    

    ulLocal will have a value between 50 and 99 (inclusive). Using integer arithmetic, the result of that value divided by 100 will always be zero. This value is then converted to a float, which is zero.

    Looks like simple bad coding/assumptions to me.

Children