mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik An die FreeRTOS Profis, Task hängt, wie umgehen?


Autor: David Lucinkiewicz (davidl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich arbeite mit FreeRTOS gerade an meiner Bachelorarbeit, es wird ein in 
VHDL entworfener Soundcore von einer SD Karte mit Sounddaten versorgt, 
das ganze auf nem Spartan 3a.

So ich hab einen Menu Task, der kümmert sich um die Benutzereingabe und 
das Auslesen der Soundfiles, dann nen Soundtask, der einfach nur bei 
jedem Interrupt vom Soundcore Puffer vollmachen soll. Die Daten holt 
ersich aus der Queue. Beide Tasks haben die selbe Prio, weil der 
Soundtask schon von anfang an die werte aus der Queue holen soll , und 
nicht erst wenn der Menu Task in den blocked mode geht.

Wenn ich jetzt im Soundtask die printf Meldung rausnehme dann 
funktioniert der Task nicht mehr.

Das liegt war. daran, das am Anfang keine Interrupts kommen, und der 
Task keine änderungen am Speicher vornimmt, und dann irgendwie 
wegrationalisiert wird.

Wie kann ich das umgehen ?

Danke u. Gruß
david

static void sound_task( void *pvParameters )
{

    struct sound_config s_con1;    // Struktur für Queue  

    for(;;)
    {
      

      xil_printf("test!\n");

  
  if (sound_interrupt == 1)
  {
    xQueueReceive(sound_Queue, &s_con1, 0);
    sound_interrupt = 0;
    manage_interrupt_sound (&s_con1);
  }


Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich rate mal

sound_interrupt ist nicht volatile?

> Das liegt war. daran, das am Anfang keine Interrupts kommen,
> und der Task keine änderungen am Speicher vornimmt, und dann
> irgendwie wegrationalisiert wird.

Oh, wie ich das hasse:
Wenns nicht sauber funktioniert, ist immer alles andere Schuld. Der 
Compiler hat sich mit dem Betriebssystem zusammen getan und beide, 
gemeinsam mit der Hardware, lauern nur darauf, dem glorreichen 
Programmierer ein Bein zu stellen. Man kann zwar nicht genau sagen wie, 
das passiert immer alles magisch und nur bei Vollmond, aber das macht 
auch nichts. Schuld ist nie der Programmierer.

Die Wahrheit ist: In 99,999999% aller Fälle ist es nur das mangelnde 
Wissen des Programmierers, das Projekte auf dieser Ebene zum kippen 
bringt. Schuld ist der Programmierer! Nicht der Compiler, nicht das 
Betriebssystem.

Autor: David Lucinkiewicz (davidl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie bistn du drauf....,

das ist ganau der Grund warum mich es richtig nervt hier eine Frage zu 
stellen.

Autor: Werner B. (werner-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt hau mal nicht so auf den David ein.
Er hat in seinem Post weder einem Betriebssystem noch einem Compiler 
noch dem Vollmond eine Schuld zugeschoben. Ist doch ein Formal (fast) 
perfekter Hilferuf mit einer klaren Bescheibung des Problems. Da gibt es 
hier im Forum WESENTLICH kunfusere Freds in denen wirklich sofort alles 
auf einen Compiler Bug etc. geschoben wird.
Volatile wird eben in 99,9% aller C/C++ Bücher nur Bestandteil des 
Sprachumfanges erwähnt ohne auf die Funktionalität einzugehen (oft nur 
in der Liste der reservierten Bezeichner). Die Profs. haben aller 
Erfahrung nach (Außnahmen bestätigen die Regel) selbst keine Ahnung, die 
"betreuen" ja nur.
Was fehlt ist (mal wieder) die Hintergrundinformation zum System. 
Wenigstens die FreeRTOS Konfiguration gehört hier mit rein.
;-) Werner

Autor: David Lucinkiewicz (davidl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Werner, dass seh ich auch so, wenigstens gibts hier auch noch 
Leute die nicht gleich explodieren wenn man es wagt in einem Forum, wo´s 
drum geht Probleme zu diskutieren, eine Frage zu stellen ! Da sollte 
sich der Karl Heinz doch mal die Frage stellen, nicht in einem anderen 
Forum den Moderator zu spielen!

an das volatile hab ich schon gedacht, es ist aber im versionen wirrwarr 
untergegangen.

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.