Frage

Wir haben eine einfache Architektur:

  1. Hauptchip (arm9 basiert)
  2. PIC-Controller

Die PIC kommuniziert über ein Interrupt-basierte I2C-Kommunikationsprotokoll für die Übertragung von Daten an dem Arm. Im Innern der Interrupt-Signal, das wir eine Aufgabe, die die Daten aus der I2C-Schicht liest (Bus).

Falls die Daten begrenzt werden wir in der Regel nicht viel Problem haben, die Daten zu lesen und an oberer Schicht zu senden. Falls diese Daten sehr groß die Unterbrechung wird für eine lange Zeit gebunden werden.

Die erste Frage lautet:

  1. Habe ich Recht?

  2. Falls ich Recht hat, wie das gleiche zu vermeiden? ... oder können wir eine andere Lösung?

War es hilfreich?

Lösung

Haben Sie eine Art ‚Worker-Thread‘, manchmal einen Kernel-Thread genannt, deren Aufgabe es ist, Daten zu ziehen aus der I2C-Schnittstelle und den Puffer es, gibt es an anderen Teilen des Systems aus usw. Verwenden Sie die Interrupt-Routine nur un-Block des Kernel-Thread. Auf diese Weise, wenn es andere Aufgaben das System durchführen muss, ist es nicht daran durch die Interrupt-Handler verhindert, und Sie immer noch Ihre Daten in von Ihrem Gerät in angemessener Zeit erhalten.

Andere Tipps

Sie sollten nicht ein komplettes Paket in einer Ausführung der Interrupt-Routine lesen. Je nach Hardware-Unterstützung sollten Sie eine Probe / Bit / Byte, speichern Daten in einem Puffer behandeln und nur die Aufgabe, das Signal, wenn das Paket abgeschlossen ist.

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