Dopo aver spostato del codice incorporato in FreeRTOS, mi rimane un interessante dilemma sul cane da guardia. Il timer watchdog è un must per la nostra applicazione. Usare FreeRTOS è stato un grande vantaggio anche per noi. Quando l'applicazione era più single-tasked, alimentava il watchdog in punti tempestivi nel suo flusso logico, in modo che potessimo essere sicuri che l'attività stesse facendo progressi logici in modo tempestivo.Strategia per alimentare un cane da guardia in un ambiente multitask
Con più attività, tuttavia, non è facile. Un compito potrebbe essere legato per qualche motivo, non facendo progressi, ma un altro sta facendo bene e facendo progressi sufficienti per mantenere felicemente il cane da guardia.
Un pensiero era quello di avviare un'attività separata esclusivamente per alimentare il cane da guardia, e quindi utilizzare alcuni contatori che le altre attività aumentano regolarmente, quando l'attività del cane da guardia fa tic tac, farebbe in modo che tutti i contatori sembrino come i progressi fatti su tutte le altre attività, e se è così, andare avanti e dare da mangiare al cane da guardia.
Sono curioso di sapere cosa hanno fatto gli altri in situazioni come questa?
Abbiamo fatto più o meno quello che hai detto. C'è un kicker e le attività con periodi noti si verificano con il kicker. Se queste attività non vengono eseguite in tempo, anche il kicker non viene eseguito. Il kicker dovrebbe essere il thread con la priorità più bassa nel sistema, quindi se il sistema non ha il tempo di arrivare al kicker, il dispositivo si resetterà. (Questo ti dà protezione anche sul kicker stesso.) Sono occupato ora, ma cercherò di mettere insieme una risposta più lunga insieme. – Ross
Mi sembra di ricordare una domanda simile nell'ultimo mese o giù di lì, certamente con il tag incorporato. – Dan