Roman Midi-Opa Posted February 7, 2013 Report Posted February 7, 2013 Hallo zusammen, nach dem Initialisieren eines Wavetable Board benötigt das Board bis zu 0,5 Sekunde Zeit um zu reagieren. Dies kann auch bei diversen anderen Funktionen notwendig sein. Um das Programm nicht unnötig aufzuhalten, suche ich nach einer Möglichkeit nach einer Wartezeit die Task an einer definierten Stelle fortzusetzen. Ich habe im SCS_config zu MIDIO128 folgenden Schnippsel gefunden. if( !do_enable ) { // wait a bit longer... normaly it would be better to print a warning that "unmounting via OS" is better SCS_InstallDelayedActionCallback(MSD_EnableReq, 5000, do_enable); SCS_Msg(SCS_MSG_DELAYED_ACTION_L, 5001, "", "to disable MSD USB!"); } else { SCS_InstallDelayedActionCallback(MSD_EnableReq, 2000, do_enable); SCS_Msg(SCS_MSG_DELAYED_ACTION_L, 2001, "", "to enable MSD USB!"); } Wird hiermit das RTOS angesprochen? Kann mir das vielleicht jemand erklären. Wie wird bei Anwendung in einer periodischen Routine diese Funktion eingesetzt? Gibt es vielleicht Alternativen? Viele Fragen, ich weiss, aber ich freue mich auf Eure Antworten. Gruss Roman Quote
TK. Posted February 7, 2013 Report Posted February 7, 2013 Hallo Roman, hiermit wird nicht das RTOS angesprochen, die delayed action wird lediglich ueber einen Zaehler gesteuert, der mit jedem SCS_Tick() Aufruf bedient wird (ich gehe jetzt mal lieber nicht zu sehr ins Detail, um Dich nicht mit unnoetigen Informationen zuzumuellen, die nicht zielfuehrend sind - u.A. geht es darum, dass von einem Task mehrere Handler bedient werden sollen, nicht nur das SCS). Auf Applikationsebene fuehrt das i.d.R. zu einem unleserlichen Code, in Deinem Fall wuerde ich folgendes empfehlen: while( 1 ) { vTaskDelay(1 / portTICK_RATE_MS); // mache dies // und jenes // und jetzt moechtest Du 500 mS warten vTaskDelay(500 / portTICK_RATE_MS); // ... } das wars auch schon ;-) vTaskDelay kann man auch aus einer anderen Funktion, und sogar von anderen Files aufrufen (wenn die FreeRTOS header files included wurden) Wichtig ist nur, dass sie von einem Task aus aufgerufen wird - und keinesfalls von APP_Init() oder APP_Background() Gruss, Thorsten. Quote
Roman Midi-Opa Posted February 7, 2013 Author Report Posted February 7, 2013 Hallo Thorsten, wie immer eine schnelle, umfassende und kompetente Antwort von Dir. Daumen Hoch! :smile: Gruss und Danke Roman Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.