Domanda

Ho una TI DSP (TMS320F28235 se qualcuno avesse voglia) che ho bisogno di attuare un FIFO di accodamento informazioni tra codice principale ad anello e un interrupt. esecuzione ad alta velocità per questa coda è molto critica, ma lo è anche il corretto funzionamento, e non sono sicuro se posso ottenere via con l'attuazione di un FIFO, senza alcuna sincronizzazione esplicita, o se no, dove devo disabilitare gli interrupt.

Ho trovato questa pagina e chiedevo se qualcuno qui potrebbe commentare la sua applicabilità.

È stato utile?

Soluzione

La pagina che avete trovato è appunto applicabile alla vostra situazione. Essa si basa solo su Word legge e scrive di essere atomica. E 'vulnerabile ad hardware che riordina in silenzio carichi e negozi. D'altra parte, solo ogni altro algoritmo sulla sincronizzazione che l'uomo conosca è anche vulnerabile a quel particolare pulviscolo.

Se avete voglia di fare qualche seria archeologia informatica, scavare le descrizioni buffer circolare per i sistemi operativi CDC 6600. CDC originariamente sviluppato la tecnica per la comunicazione tra più processori fisici nel 6600.

Altri suggerimenti

NUOVO e correggere le informazioni

Il riferimento per il set di istruzioni si possono trovare qui .

Per emulare un blocco si suggerisce nella documentazione che interupts essere disabilitata.

Example ; Make the operation ”VarC = VarA + VarB” atomic:
    DINT ; Disable interrupts (INTM = 1)
    MOVL ACC,@VarA ; ACC = VarA
    ADDL ACC,@VarB ; ACC = ACC + VarB
    MOVL @VarC,ACC ; Store result into VarC
    EINT ; Enable interrupts (INTM = 0)

- puntatori Algorithm -

interrompe anticipare principale-loop e apparentemente non esistono operazioni atomiche. Il vostro principale anello deve disabilitare gli interrupt mentre è popping. Dal momento che disabilitando gli interrupt è come possedere una serratura in questo contesto si potrebbe implementare la coda come memoria contigua o ontop di uno slist. Il primo mezzo copiando la memoria allo stack del main-ciclo sul pop, che potrebbe essere più lento - ma a condizione che il FIFO non ha memoria sufficiente, non si dovrebbe avere per allocare i nodi slist fornisce da un mucchio - il che significa che nessun mal di testa di gestione della memoria . Naturalmente, non esistono problemi di gestione della memoria se i nodi slist fornisce sono di dimensioni uniformi.

Quindi, per un pop è necessario disattivare gli interrupt e rimuovere l'elemento - una volta fatto, riattivare l'interrupt. Per vettori di interrupt è business as usual (potrebbe essere necessario disattivare i interupts durante la lavorazione vettore interrupt - questo è un controllore dipendente)

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top