FreeRTOS abschalten, deaktivieren?

#5804278
Lesenswert?

Hallo,

ich sitze nun schon eine Weile an einem Problem mit FreeRTOS und dem 
NFR52.


Der NRF52 soll im sleep so wenig wie möglich Strom benötigen. Aktuell 
schaffe ich 5-6µA.

Aber das FreeRTOS in der NRF52 Arduino Library von Adafruit lässt den 
Controller natürlich ständig aus dem Sleep aufwachen mit der 
eingestellten Tick Rate.

Dadurch steigt der Strom auf etwa 200µA.

Wenn ich die Tick Rate auf 4 Hz reduziere, schaffe ich meine 5-6µA
Aber viele Funktionen (insbesondere die I2C) leiden darunter.


Kann man das FreeRTOS nicht für eine bestimmte Zeit deaktivieren?
Ich habe zwar etwas über den Tickless mode gelesen, aber wie kann ich 
den aktivieren?


meine Idee:
FreeRTOS deaktivieren und dann in den Sleep

und beim aufwachen das FreeRTOS wieder aktivieren.

Geht sowas?
Kann mir jemand den entscheidenen Hinweis geben?
Gast #5804515
Lesenswert?

Indem man den Tick IRQ abschaltet.

int32_t  OS_Tick_Enable (void) {
  if (PendST != 0U) {
    PendST = 0U;
    SCB->ICSR = SCB_ICSR_PENDSTSET_Msk;
  }
  SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;
  return (0);
}


int32_t  OS_Tick_Disable (void) {
  SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
  if ((SCB->ICSR & SCB_ICSR_PENDSTSET_Msk) != 0U) {
    SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk;
    PendST = 1U;
  }
  return (0);
}
#5804998
Lesenswert?

chris schrieb:
> Indem man den Tick IRQ abschaltet.

werde ich mal ausprobieren, danke für den Hinweis.

Aber deaktiviert dies nicht den Systick vom NRF52?
Ich möchte ja auch verstehen was ich da tue.



gre schrieb:
> Tickless unterstützung?

Ja, denke schon. Zumindest ist die im config file eingetragen.


#define configUSE_TICKLESS_IDLE                                  1
#define configUSE_TICKLESS_IDLE_SIMPLE_DEBUG                     1

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren