I see Alan,

That's true. Thanks for your explanation!

Sara

Em qua., 30 de set. de 2020 às 11:33, Alan Carvalho de Assis <
acas...@gmail.com> escreveu:

> Hi Sara,
>
> Actually it is not incorrect, because inside the timer start function
> the interruption it enabled to call the ISR (the callback function).
>
> Let's use the nRF52 as example, inside setcallback() we have:
>
> /* Save the new callback */
>
>   priv->callback = callback;
>   priv->arg      = arg;
>
> if (callback != NULL && priv->started == true)
>     {
>       NRF52_TIM_SETISR(priv->tim, nrf52_timer_handler, priv);
>       NRF52_TIM_ENABLEINT(priv->tim, NRF52_TIMER_INT);
>     }
>
> But inside nrf52_timer_start() we have it again:
>
> if (priv->callback != NULL)
>     {
>       NRF52_TIM_SETISR(priv->tim, nrf52_timer_handler, priv);
>       NRF52_TIM_ENABLEINT(priv->tim, NRF52_TIMER_INT);
>     }
>
> So, this way the code will work, no matter the order we call it.
>
> BR,
>
> Alan
>
> On 9/29/20, Sara da Cunha Monteiro de Souza
> <saramonteirosouz...@gmail.com> wrote:
> > Hi all,
> >
> > I realized a logic issue in the Timers' Example.
> > The ioctl notification is called before the ioctl start in order to set
> the
> > timer callback. The set callback function, in the lower half layer, sets
> > the callback and enables the interruption, but to do so, it dependes on 2
> > conditions:
> >
> > 1. It depends on have a non NULL callback.
> > 2. It depends on having the timer started previously. And it is verified
> > through a variable from the timers' status.
> >
> > Since the variable is set in the start function, if ioctl notification is
> > called before the ioctl start, the callback will never be set.
> >
> > There is also other issue regarding the stop implementation in the lower
> > half layer that I've seen. The stop function usually reset the driver
> > status to false to indicate the timer was stopped, but it does not make
> the
> > callback NULL. I am not sure if this was the expected behaviour. Maybe,
> we
> > could set the callback to NULL in the end of stop function.
> >
> > Regards,
> >
> > Sara S
> >
>

Reply via email to