Dividi il programma in programmi più piccoli

3

Ho progettato di costruire il mio drone da zero per scopi di apprendimento e programmerò tutti i controlli per il drone. La mia domanda è se è una buona idea dividere il codice che non interagisce tra loro con un altro programma o semplicemente averli in thread diversi.

Ad esempio, ho un programma per controllare il drone e poi un programma per scattare le immagini.

I pro che ho trovato di questo sono:

  • Se il programma si blocca, l'altro andrà bene.

  • Il che porta anche a che potrei avere programmi di backup in caso di arresto anomalo.

Alcuni negativi che ho trovato è che

  • Tutti i segnali che inviamo avanti e indietro verranno controllati più volte volte.
  • Le dimensioni totali del file saranno maggiori.
posta Olof 15.06.2015 - 19:21
fonte

1 risposta

1

Vorrei sconsigliare il multi-threading, specialmente per un'applicazione in tempo reale. Le domande principali sono come utilizzare i core, se si tratta di un processore multi-core, e come gestire più processi (come già notato).

In primo luogo, consiglierei di inserire l'elaborazione del sensore nel proprio processo in tutti i casi per ciascun sensore. Ad esempio, se hai un imager e un IMU, ognuno dovrebbe avere il proprio processo. Qualsiasi codice specializzato ad alta velocità per l'elaborazione del flusso di dati del sensore dovrebbe essere nel gestore del sensore. In generale, se il sensore è critico, come l'IMU, dovrebbe avere il proprio core dedicato. I processi non critici dovrebbero condividere tutti i core rimasti. Ovviamente hai bisogno di un RTOS per farlo (consigliato) o di una versione appositamente configurata di Linux.

Oltre all'elaborazione del sensore, tutto il resto dovrebbe solitamente essere nello stesso processo monolitico, a meno che non si abbia un bisogno specifico e specifico di farlo in un processo separato. Questo processo monolitico deve essere progettato in modo che assegni quantità adeguate di tempo di elaborazione alle diverse attività e dovrebbe avere un gestore di eccezioni di primo livello che garantisce che qualsiasi problema verrà risolto in modo utile.

È anche una buona idea avere due monitor a battito cardiaco. Questi processi controllano gli altri processi e li riavviano se si sono arrestati in modo anomalo. Ce ne sono due perché se uno muore, è necessario l'altro per riavviarlo.

È possibile comunicare tra processi ad alta velocità utilizzando la memoria condivisa. Fare questo è in genere molto più veloce e più semplice che fare confusione con IPC o qualsiasi comunicazione moderata dal sistema operativo.

    
risposta data 16.06.2015 - 01:33
fonte

Leggi altre domande sui tag