Pregunta

Tengo una TI DSP (TMS320F28235 si a alguien le interesa) que necesito para implementar una FIFO para poner en cola la información entre el código de bucle principal y una interrupción. la ejecución de alta velocidad para esta cola es muy crítica pero también lo es el funcionamiento correcto, y no estoy seguro de si puedo salir con la implementación de un FIFO sin ninguna sincronización explícita, o si no, ¿dónde tengo que deshabilitar interrupciones.

he encontrado esta página y me preguntaba si alguien aquí podía hacer comentarios sobre su aplicabilidad.

¿Fue útil?

Solución

La página que has encontrado es precisamente aplicable a su situación. Se basa solamente en la palabra de lecturas y escrituras siendo atómica. Es vulnerable a hardware que reordena en silencio cargas y almacenamientos. Por otra parte, casi todos los demás algoritmo de sincronización conocidas por el hombre también es vulnerable a la vasija en particular.

Si tienes ganas de hacer un poco de arqueología equipo serio, desenterrar las descripciones buffer circular para los sistemas operativos CDC 6600. CDC originalmente desarrolló la técnica para la comunicación entre múltiples procesadores físicos en el 6600.

Otros consejos

Nuevo y correcta información

La referencia para el conjunto de instrucciones se puede encontrar aquí .

Para emular una cerradura se sugiere en la documentación que Interupts ser desactivada.

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)

- Algoritmo punteros -

interrumpe adelantarse principal de bucle y al parecer no existen operaciones atómicas. Su principal de bucle tiene que deshabilitar las interrupciones mientras se está haciendo estallar. Desde deshabilitar interrupciones es como poseer un bloqueo en este contexto se podría implementar la cola como memoria contigua o sábana de una slist. Lo primero significa la copia de la memoria a la pila del conducto-bucle en el pop, lo que podría ser más lento - sin embargo, siempre que su FIFO tiene suficiente memoria que no debería tener que asignar nodos SLIST de un montón - lo que significa que no hay problemas de administración de memoria . Por supuesto, no existen problemas de administración de memoria si los nodos SLIST son de un tamaño uniforme.

Por lo tanto, para un estallido debe deshabilitar interrupciones y retire el elemento - una vez hecho esto, vuelva a habilitar la interrupción. Para los vectores de interrupción es negocio como de costumbre (es posible que tenga que desactivar las interupts durante el procesamiento vectorial interupt - este es el controlador dependiente)

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top