Frage

Ich habe ein TI DSP (TMS320F28235 wenn jemand kümmert), die ich für Warteschlangen Informationen zwischen Haupt-Loop-Code und einem Interrupt einem FIFO implementieren muß. High-Speed-Ausführung für diese Warteschlange ist sehr kritisch, aber so ist einwandfreier Betrieb, und ich bin mir nicht sicher, ob ich mit der Umsetzung einen FIFO ohne explizite Synchronisation wegkommen kann, oder wenn nicht, wo ich auf Interrupts deaktivieren.

Ich fand diese Seite und wunderte mich, wenn jemand hier auf ihre Anwendbarkeit äußern könnte.

War es hilfreich?

Lösung

Die gewünschte Seite gefunden ist genau die für Ihre Situation. Es stützt sich nur auf Wort liest und schreibt Atom zu sein. Es ist anfällig für Hardware, die Lasten und speichert geräuschlos neu ordnet. Auf der anderen Seite, nur etwa jeder zweite Synchronisations-Algorithmus auf den Menschen bekannt ist auch anfällig für diese bestimmte Crock.

Wenn Sie das Gefühl, dass einige ernsthafte Computer Archäologie zu tun, graben, um die Ringpuffer Beschreibungen für die CDC 6600-Betriebssysteme auf. CDC ursprünglich entwickelt, die Technik in den 6600 zwischen mehreren physikalischen Prozessoren in Verbindung steht.

Andere Tipps

neue und korrekte Informationen

Die Referenz für den Befehlssatz kann hier .

, eine Sperre zu emulieren es in der Dokumentation vorgeschlagen wird, die deaktiviert werden interupts.

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)

- Algorithmus Zeiger -

Unterbricht vorgreifen Hauptschleife und scheinbar atomare Operationen nicht existieren. Ihre Haupt-Schleife hat Interrupts zu deaktivieren, während es knallt. Da Unterbrechungen gesperrt wird, wie der Besitz eine Sperre ist in diesem Zusammenhang könnten Sie die Warteschlange als zusammenhängende Speicher oder OnTop eines slist implementieren. Ersteres bedeutet, die Erinnerung an den Stapel der Hauptschleife auf Pop Kopieren aus, die langsamer sein könnte - vorausgesetzt jedoch Ihre FIFO genügend Speicher hat, sollten Sie nicht slist Knoten aus einem Heap reservieren haben -, die keine Speicherverwaltung Kopfschmerzen bedeutet . Natürlich wird nicht Speicherverwaltung Kopfschmerzen existieren, wenn die slist Knoten von einheitlicher Größe sind.

Also, für einen Pop müssen Sie Interrupts deaktivieren und das Element entfernen - einmal getan, den Interrupt wieder aktivieren. Für Interrupt-Vektoren ist es Business as usual (man könnte das interupts während Interrupt Vektorverarbeitung deaktivieren muß - dieser Regler abhängig ist)

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top