FreeRTOS, task umre pri cekani na semafor...

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Pondělí Listopad 4 17:52:52 CET 2013


Takze chyba zda se mezi klavesnici a zidli, pochopeni systemu priorit a 
subpriorit preruseni vedlo k tomu, ze jsem zjistil, ze je to blbe...
Snad uz tech zasadnich chybicek nebude moc... ;-)
FTP server chodi dobre, zapis na SD asi 190kB/s, cteni skoro 1MB/s, 
limitujici je asi cteni po 1 sektoru - RAM opravdu neni nikdy dost a pri 
128+64kB uz vubec ne.
HTTP take OK, problem s prodlenim close po odeslani obsahu poresilo 
uvedeni delky obsahu v hlavicce - u vsech testovanych klientu je spojeni 
ukonceno klientam a jinak tam mam timeout. Dalsi problem byl, ze 
browsery nacitaji obsah ve vice vlaknech (treba obrazky) a ja odmital 
dalsi pripojeni nez bylo vyrizeno jedno (zas malo pameti :-( ) Cekani 
par s az se dokonci prvni spojeni toto vyresilo. Na obrazky 10MB+ to 
samozrejme neni ;-)

Kdy uz bude k sehnani STM32F429 ke kteremu lze pripojit SDRAM? 
(discovery kit uz mam, super hracka)
Pripojivat SRAM asi nema smysl, to je hrozne pomale pro vsechny potrebne 
ucely (halda, -> zasobniky tasku...)


Dne 30.10.2013 13:55, Jaroslav Buchta napsal(a):
> je to takto:
>
> #define INCLUDE_vTaskSuspend            1
>
> a ISR komplet:
> void ETH_IRQHandler(void)
> {
>   portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
>
>   /* Frame received */
>   if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET)
>   {
>     /* Give the semaphore to wakeup LwIP task */
>     xSemaphoreGiveFromISR( s_xSemaphore, &xHigherPriorityTaskWoken );
>   }
>
>   /* Clear the interrupt flags. */
>   /* Clear the Eth DMA Rx IT pending bits */
>   ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
>   ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
>
>   /* Switch tasks if necessary. */
>   if( xHigherPriorityTaskWoken != pdFALSE )
>   {
>     portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
>   }
> }
>
> ale kdyby chybelo portEND_SWITCHING_ISR tak se snad nic nestane krome 
> vetsiho zpozdeni, ne?
> to ETH_DMAClearITPendingBit je umistene spatne ale jine preruseni 
> stejne neni povoleno a mam overeno, ze se skutecne nevyskytuje.
>
> jeste me napada, ze je trosku dopraseny port modulu sys_arch, ktery 
> jsem syntetizoval z vice zdroju, ale stejne problemy byly i s verzi 
> LWIP 1.3.x kde byl projekt prevzaty cely takze spis ne...
>
>
>
> Dne 30.10.2013 13:37, Stano napsal(a):
>> Este jedna vec, ako mate nastavenu premennu
>> INCLUDE_vTaskSuspend v konfiguracii RTOS
>>
>> Jaroslav Buchta  wrote / napísal(a):
>>> 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.
>>>
>>>
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list