patacongo commented on a change in pull request #1380:
URL: https://github.com/apache/incubator-nuttx/pull/1380#discussion_r451199113
##########
File path: arch/arm/src/stm32f7/stm32_tickless.c
##########
@@ -988,22 +988,31 @@ int up_timer_start(FAR const struct timespec *ts)
}
#endif
+#ifdef CONFIG_SCHED_TICKLESS_ALARM
int up_alarm_start(FAR const struct timespec *ts)
{
uint64_t tm = ((uint64_t)ts->tv_sec * NSEC_PER_SEC + ts->tv_nsec) /
NSEC_PER_TICK;
- uint64_t counter = ((uint64_t)g_tickless.overflow << 32) |
- STM32_TIM_GETCOUNTER(g_tickless.tch);
-
- g_tickless.last_alrm = tm;
+ irqstate_t flags;
- int32_t diff = tm / NSEC_PER_TICK + counter;
+ flags = enter_critical_section();
STM32_TIM_SETCOMPARE(g_tickless.tch, CONFIG_STM32F7_TICKLESS_CHANNEL, tm);
stm32_tickless_ackint(g_tickless.channel);
stm32_tickless_enableint(CONFIG_STM32F7_TICKLESS_CHANNEL);
+ g_tickless.pending = true;
+
+ uint64_t counter = ((uint64_t)g_tickless.overflow << 32) |
+ STM32_TIM_GETCOUNTER(g_tickless.tch);
+
+ if (counter > tm)
+ {
+ stm32_interval_handler();
Review comment:
So you are saying that nxsig_timeout() is being called before
up_block_task()? This is the only place that nxsig_timeout is referenced:
358 /* Start the watchdog */
359
360 wd_start(rtcb->waitdog, waitticks,
361 nxsig_timeout, 1, wdparm.pvarg);
362
363 /* Now wait for either the signal or the watchdog, but
364 * first, make sure this is not the idle task,
365 * descheduling that isn't going to end well.
366 */
367
368 DEBUGASSERT(NULL != rtcb->flink);
369 up_block_task(rtcb, TSTATE_WAIT_SIG);
The watchdog should not occur because we are in a critical section. We will
stay in the critical section until rtcb is blocked in TSTATE_WAIT_SIG state. I
guess I don't understand you problem description.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]