FreeRTOS, task umre pri cekani na semafor...

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Středa Říjen 30 11:57:49 CET 2013


Stale bojuju s STM32F4 a LWIP, docela to funguje ale občas umře... Nyni 
resim zahadu se synchronizaci, cast  funkce (task) pro prijem paketu 
redukovana na podstatne aktualne vypada takto:

   for( ;; )
   {
STM32F4_Discovery_LEDOn(LEDO);
     int bSync = xSemaphoreTake( s_xSemaphore, 20); 
//emacBLOCK_TIME_WAITING_FOR_INPUT); 
<------------------------------------- tady to umre, ledka zustane svitit
STM32F4_Discovery_LEDOff(LEDO);
     portTickType tckRcv = xTaskGetTickCount();
     {
       while (ETH_CheckFrameReceived())
       {
           p = low_level_input( s_pxNetIf );
           LedSetRx();
           if (ERR_OK != s_pxNetIf->input( p, s_pxNetIf))
           {
             pbuf_free(p);
             p=NULL;
           }
           bSmallDelay = pdTRUE;
           while (bSync && xTaskGetTickCount() - tckRcv < 3) 
vTaskDelay(3);            <---------------------------------- bez tohoto 
zpozdeni to umre behem par minut, takhle za par hodin az dni
       }
     }

Semafor je uvolnovan z ISR ale to funguje (pomaleji a se ztratami 
nekterych paketu) i bez toho diky timeoutu a nemelo by se snad stat, ze 
by to z cekani po 20ms zas nevypadlo...
Problem je, ze tento task ma nejvyssi prioritu jako jediny, ma v 
chybovem stavu status READY (bezne vetsinou BLOCKED) a vesele si pri tom 
funguji tasky s nizsi prioritou a i IDLE. Tomuto scheduler proste 
procesor neprideli, budu dal badat - zatim reseno watchdogem coz 
samozrejme neni idealni... Divne je, ze to je casove zavisle (to 
zpozdeni ma i jiny vyznam kvuli stabilite prenosu vetsich objemu dat, 
dalsi cil badani - mozna to souvisi) a nezda se, ze by selhani melo 
nejakou vazbu na intenzitu komunikace (je na to vetsinou PINGano po 2s)
Zasobniky tasku jsou dostatecne, stav vsech tasku si muzu normalne 
vypsat pres USB, zas to bude asi nejaka blbost ale slusna zabava na 
dlouhe vecery je jista ;-)

No budu se muset nejak zorientovat v tech systemovych frontach, pokud 
nekdo neco podobneho neresil.




Další informace o konferenci Hw-list