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

delay milisecond

Hi all Iam using STR912FW44 based board and I want a delay function that should give the delay in milisecond I made a function


void delay_ms (unsigned long nCount){   /* Wait function                    */
  nCount=nCount+16000000L;

  while (nCount--);
}


when I call

delay_ms(10000);

it gives arround 10 second delay but when I call

delay_ms(20000);
it should give arround 20 second delay but it does not happen

but when I call

delay_ms(10000);
delay_ms(10000);

it gives arround 15 sec delay

please tell me exact way to build a delay function

regards
rupesh

Parents
  • // this system call is an asynchronous call that is used to register a callback for exact
    // time-based notifications. any timer can serve as either in 'exact' mode or in 'poll'
    // mode.
    // 'a_index' if the index of the timer in 's_timers', a_timoeut should be given
    // using the MILLISECONDS_X_10 macro, 'a_timer' is a struct that contains a pointer to a
    // callback that shall be invoked once the timer elapses and the required parameter to be
    // send alog, and 'a_mode' is the timer more - must be either 'e_timer_exact_period_mode' or
    // 'e_timer_exact_oneshot_mode' when using the system call.
    // note that the first 1 + MAX_TASKS timers are dedicated to internal timers of tasks, and
    // should not be used for any other purpose. user timers having an index USER_TIMER_0,
    // USER_TIMER_1 etc. should be used instead.
    int32s timer_exact(int32s a_index, int32s a_timeout, timer_callback_prop_t a_timer, timer_mode a_mode)
    {
            int32u   l_scheduler_state ;
            timer_t *lp_timer ;
    
            if ( (a_timeout < 0) ||
                     (!a_timer.callback) ||
                     ( (a_mode != e_timer_exact_period_mode) && (a_mode != e_timer_exact_oneshot_mode) ) )
            {
                    software_error("%d %s %d", ERR_INVALID_PARAMETER, __FILE__, __LINE__) ;
            }
    
            scheduler_disable(&l_scheduler_state) ;
            system_timer_disable() ;
    
            lp_timer = (s_timers + a_index) ;
            lp_timer->state = e_timer_ticking ;
            lp_timer->deadline_countdown = a_timeout ;
            lp_timer->period = a_timeout ;
            lp_timer->callback = a_timer.callback ;
            lp_timer->callback_parameter = a_timer.parameter ;
            lp_timer->mode = a_mode ;
    
            system_timer_enable() ;
            scheduler_restore(l_scheduler_state) ;
    
            return 0 ;
    }
    

Reply
  • // this system call is an asynchronous call that is used to register a callback for exact
    // time-based notifications. any timer can serve as either in 'exact' mode or in 'poll'
    // mode.
    // 'a_index' if the index of the timer in 's_timers', a_timoeut should be given
    // using the MILLISECONDS_X_10 macro, 'a_timer' is a struct that contains a pointer to a
    // callback that shall be invoked once the timer elapses and the required parameter to be
    // send alog, and 'a_mode' is the timer more - must be either 'e_timer_exact_period_mode' or
    // 'e_timer_exact_oneshot_mode' when using the system call.
    // note that the first 1 + MAX_TASKS timers are dedicated to internal timers of tasks, and
    // should not be used for any other purpose. user timers having an index USER_TIMER_0,
    // USER_TIMER_1 etc. should be used instead.
    int32s timer_exact(int32s a_index, int32s a_timeout, timer_callback_prop_t a_timer, timer_mode a_mode)
    {
            int32u   l_scheduler_state ;
            timer_t *lp_timer ;
    
            if ( (a_timeout < 0) ||
                     (!a_timer.callback) ||
                     ( (a_mode != e_timer_exact_period_mode) && (a_mode != e_timer_exact_oneshot_mode) ) )
            {
                    software_error("%d %s %d", ERR_INVALID_PARAMETER, __FILE__, __LINE__) ;
            }
    
            scheduler_disable(&l_scheduler_state) ;
            system_timer_disable() ;
    
            lp_timer = (s_timers + a_index) ;
            lp_timer->state = e_timer_ticking ;
            lp_timer->deadline_countdown = a_timeout ;
            lp_timer->period = a_timeout ;
            lp_timer->callback = a_timer.callback ;
            lp_timer->callback_parameter = a_timer.parameter ;
            lp_timer->mode = a_mode ;
    
            system_timer_enable() ;
            scheduler_restore(l_scheduler_state) ;
    
            return 0 ;
    }
    

Children
No data