mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik FreeRTOS portMAX_DELAY Frage


Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich bin gerade dabei mich in FreeRTOS einzuarbeiten. FreeRTOS laeuft 
soweit und ich bin dabei ein paar Tasks zu erstellen.
Ich habe hier eine Situation die ich nicht ganz verstehe. Vielleicht hat 
jemand noch ein paar Kommentare dazu.

Folgende Situation: Task_I2C.c
Es existiert eine I2C-ISR, welche bei Fehler oder erfolgreichen 
Datenverker ein xQueueSendToBackFromISR() aufruft und ein Status-Byte 
sendet.

Der Handler-Task zur I2C-ISR wartet mit:
xQueueReceive(xQueueI2C0, &queueStatus, DataDelay30ms);

auf die ISR. Soweit funktioniert die Sache auch.

Nur wenn ich "DataDelay30ms" durch "portMAX_DELAY" ersetze verbraucht 
der Task mehr Rechenzeit (~50%).

WIESO?

Geht der Task nicht bei beiden Definitionen in den Blockstate, falls die 
Queue leer ist und wird wieder aktiviert sobald neue Daten in der Queue 
vorhanden sind? Die Queue wird auch innerhalb von nur 10msec wieder 
gefuellt.


Danke Stephan

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner eine Erklaerung?

Autor: muh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan schrieb:
> Nur wenn ich "DataDelay30ms" durch "portMAX_DELAY" ersetze verbraucht
> der Task mehr Rechenzeit (~50%).

wie sind denn die beiden definiert?

sicher das beide 30ms darstellen?

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

portMAX_DELAY ist eine Standarddefinition von FreeRTOS:
#define portMAX_DELAY ( portTickType ) 0xffffffff


Definition von DataDelay30ms:

const portTickType DataDelay30ms = 30 / portTICK_RATE_MS;

mit:
#define portTICK_RATE_MS ( ( portTickType ) 1000 /configTICK_RATE_HZ)

#define configTICK_RATE_HZ ( ( portTickType ) 500 )


Stephan

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...könnte es sein, dass der Compiler bei den kleinen Zahlen auf 8-Bit 
Arithmetik vereinfacht, wogegen er bei portMAX_DELAY (0xffffffff) 
(rechenzeit-)schwerere Geschütze auffahren muss?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.