EMB_75

57 EMBEDDED FEBBRAIO RTOS TOOLS | SOFTWARE eventi dell’utente e utilizzan- do la funzione “User Event Si- gnal Plot” è possibile tracciare l’andamento del margine del watchdog in funzione del tem- T À - tivo al carico della CPU (CPU Load Graph) sulla medesima timeline è possibile esaminare in che modo l’esecuzione del % Á watchdog (si faccia riferimen- to all’immagine a sinistra di À ? ( Osservando il “CPU Load Graph” è possibile notare che ServerTask è in esecuzione per molto tempo nella secon- da parte del trace e ciò sembra Á € ] # % ' À ? ( ha una priorità più elevata rispetto a ControlTa- sk (verde scuro) per cui quando viene eseguito a lungo ControlTask ottiene un tempo di CPU in- feriore. Molto probabilmente, ciò potrebbe pro- vocare il riempimento della coda dei messaggio, poiché ControlTask potrebbe non essere in grado di leggere i messaggi abbastanza velocemente quando il task a più alta priorità (ServerTask) sta utilizzando la maggior parte del tempo di CPU. Questo è un classico problema di inversione di priorità in quanto SamplerTask è bloccato da un task non correlato di priorità più bassa. Problema risolto con il cambiamento di priorità Una possibile soluzione potrebbe essere quella di cambiare le priorità di schedulazione, in modo che ControlTask abbia una priorità più alta rispetto a ] # % " À À À ? O priorità tra ServerTask e ControlTask il sistema mostra un comportamento molto più stabile. Il cari- co sulla CPU di SamplerTask (in rosso) è abbastan- ` _ - portamento periodico stabile, mentre il margine di watchdog è una linea perfettamente diritta (pari a ? ( " € * stato in tal modo brillantemente risolto. * +; \ = % ] % % ^ $_ ` j { + % informazioni relativamente a un oggetto dell’RTOS. In questo caso, relativo a una coda di messaggio, è possibile vedere ad esempio il numero di messaggi presenti nella coda * +; <| = ? % À+ % + % % % % } '% ~  + % ] % % % %++ %$$% % % ] € % # + % ;  % ] % À % ‚€ $ %  % + %À % %

RkJQdWJsaXNoZXIy MTg0NzE=