RT-Thread / RT-Thread/rt-thread

rt_timer_list_next_timeout() may return error?

Offen
#4,309 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

discussion
Vorherrschende Sprache
C
Sterne
12.2k
Forks
5.4k
Ø Merge
4 T. 12 Std.
Gemergte PRs (30 T.)
40

Beschreibung

If a timer has a timeout tick 0xFFFFFFFF(RT_TICK_MAX), the timer thread will suspend itself. And if the rt_tick now is 0xFFFFFFFF(RT_TICK_MAX), timer callback should be called immediately.


  /* the fist timer always in the last row */
  static rt_tick_t rt_timer_list_next_timeout(rt_list_t timer_list[])
  {
      struct rt_timer *timer;
      register rt_base_t level;
      rt_tick_t timeout_tick = RT_TICK_MAX;
  
      /* disable interrupt */
      level = rt_hw_interrupt_disable();
  
      if (!rt_list_isempty(&timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1]))
      {
          timer = rt_list_entry(timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1].next,
                                struct rt_timer, row[RT_TIMER_SKIP_LIST_LEVEL - 1]);
          timeout_tick = timer->timeout_tick;
      }
  
      /* enable interrupt */
      rt_hw_interrupt_enable(level);
  
      return timeout_tick;
  }


        /* get the next timeout tick */
        next_timeout = rt_timer_list_next_timeout(rt_soft_timer_list);
        if (next_timeout == RT_TICK_MAX)
        {
            /* no software timer exist, suspend self. */
            rt_thread_suspend(rt_thread_self());
            rt_schedule();
        }

Is that OK?

I suppose that the API should be "rt_err_t rt_timer_list_next_timeout(rt_list_t timer_list[], rt_tick_t *timeout_tick) " instead,

Thanks.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit der Untersuchung von rt_timer_list_next_timeout() und des im Issue gezeigten Software-Timer-Thread-Codes. Verfolge die RT_TICK_MAX-Fälle, wenn ein Timer existiert und wenn der aktuelle Tick diesen Wert erreicht, und ermittle anschließend das erwartete callback- und Suspendierungsverhalten. Als abgeschlossen gilt die Aufgabe, wenn der Edge Case konsistent behandelt wird und das API-Verhalten eindeutig validiert ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c
Bereich
embedded-iot, operating-systems
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.