Jump to content

Recommended Posts

Posted

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

 

Posted

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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...