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


von David L. (davidl)


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
1
static void sound_task( void *pvParameters )
2
{
3
4
    struct sound_config s_con1;    // Struktur für Queue  
5
6
    for(;;)
7
    {
8
      
9
10
      xil_printf("test!\n");
11
12
  
13
  if (sound_interrupt == 1)
14
  {
15
    xQueueReceive(sound_Queue, &s_con1, 0);
16
    sound_interrupt = 0;
17
    manage_interrupt_sound (&s_con1);
18
  }

von Karl H. (kbuchegg)


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.

von David L. (davidl)


Lesenswert?

wie bistn du drauf....,

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

von Werner B. (werner-b)


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

von David L. (davidl)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.