Scrivo codice per un sistema embedded (Cortex M0) e non ho tutti i lussi di mutex/spinlock/ecc. C'è un modo semplice per aggiungere dati a un buffer condiviso (log-file) che verrà scaricato su disco dal mio ciclo Main()?Buffer interrupt
Se c'è un solo produttore (1 interrupt) e singolo consumatore (anello principale), potrei usare un buffer semplice in cui il produttore aumenta la "testa" e il consumatore la "coda". E sarà perfettamente al sicuro. Ma ora che ho più produttori (interrupt) mi sembra di essere bloccato.
Potrei assegnare a ciascun interrupt un proprio buffer e combinarli in Main(), ma ciò richiederà un sacco di RAM e complessità extra.
Avete qualche tipo di libreria run-time con cui vi collegate? Forse contiene funzioni "atomiche"? O di non esiste tale funzione/libreria, quindi la CPU potrebbe avere istruzioni per confrontare e aumentare/diminuire i valori atomicamente? Questi possono essere usati per la tua implementazione di semafori o mutex. –
@JoachimPileborg È una CPU NXP LPC11U35 ed è collegata alla libreria RedLib, che non fornisce funzioni atomiche per quanto ne so. – Muis
Non ho familiarità con la struttura di interrupt di questo sistema. Ma i tuoi interrupt hanno la stessa priorità o c'è un ordine gerarchico? Ad ogni modo, sembra che tu possa semplicemente usare uno stack per un buffer. O puoi prevedere un problema di overflow dello stack con questa soluzione? –