Bit-banging trägt eine software-overhead CPU-Zyklen zu verbrauchen, die Sie sonst zu nutzen für andere Zwecke. Dies kann einen spürbaren Effekt auf die Reaktionsgeschwindigkeit des Systems zu anderen Veranstaltungen, und in einem hard real-time system, erheblich beeinträchtigen können, die Systeme, die Fähigkeit zur Erfüllung von Echtzeit-Fristen.
Wenn die bit-banged-Schnittstelle zu haben und keine nachteilige Wirkung auf die Echtzeit-performance, dann muss es angesichts der niedrigen Priorität, so dass dann selbst die nicht-deterministisch in Bezug auf den Daten-Durchsatz und Latenz.
Den meisten CPU-effizienten übertragung wird erreicht, indem eine hardware-Schnittstelle und der DMA-übertragung zu minimieren, die software-overhead. Bit-banging ist bei dem anderen extrem.
Ich würde nicht sagen, es war schrecklich; wenn Sie in Ihrer Anwendung, die Sie erreichen können, Reaktionsfähigkeit und Echtzeit-Einschränkungen und die Verwendung von bit-banging vielleicht reduziert die Kosten von dem Teil benötigt, oder Sie können verwenden Sie die vorhandene hardware für das Beispiel ist, dann kann es sein, absolut gerechtfertigt.
Ich weiß nicht, dass es schrecklich, aber wenn Sie haben eine SPI-oder I2C-Peripheriegeräte bereits vorhanden, es gibt sicherlich "das Rad nicht neu erfinden" argument gegen bit-banging, vor allem, wie Sie vielleicht einen Fehler in deinem code - Beispiel für Sie sein könnte Probenahme auf der falschen Flanke des SPI-clock, und je nach Toleranzen beteiligt und welche hardware Sie für den test, die Sie vielleicht nicht bemerken, bis Sie bereits in der Produktion. Die wikipedia Artikel stellt auch fest, dass Sie über zusätzliche Rechenleistung und, dass du bist wahrscheinlich zu machen jitter in der alle Signale, die Sie produzieren.
Alles, was gesagt, bit-banging ist die Wahl nur verfügbar, wenn Ihre hardware nicht über eine eingebaute Peripherie, oder wenn es bereits von anderen Geräten, z.B. wenn der eingebaute SPI Peripherie verwendet wird, die durch einen Breitband-Gerät, das Sie haben, um kontinuierlich zu kommunizieren, vielleicht ist dir etwas bang auf ein anderes SPI Gerät, das muss nicht so sein, in Echtzeit in der Anwendung.
Bit-banging ist tragbar, siehe den I2C-code in den Linux-kernel-Treiber zum Beispiel. Sie können Sie aufstehen und laufen schnell und es funktioniert einfach. Hardware-basierten Lösungen in der Regel nicht und nehmen Sie eine Weile, um aufzustehen und zu laufen, und sind begrenzt durch die hardware-Implementierung. Nicht alle spi und insbesondere i2c-konform zu einem standard, der umgesetzt werden können in einem generischen hardware-Lösung. Sie müssen immer in der Lage sein zu fallen zurück auf bit-banging.
Bit-banging verbraucht mehr Prozessor-Ressourcen, das macht es wünschenswert, von, vorne. Es ist mehr tragbar oder kann, je nachdem, wie es geschrieben ist, so ist es wünschenswert, dass vor. Hardware SPI/I2C ist das Gegenteil von denen, nimmt etwas von der cpu-overhead, ist nicht tragbar, ist nicht immer flexibel genug, um alle Peripheriegeräte.
Als Profi benötigen Sie, um bequem zu sein mit den beiden, genau wie jeder andere embedded-Abwägung, die Sie in Ihrem design.
Wäre es nicht aufgerufen werden schrecklich als solche. Aber ja, wenn wir implementieren ein Protokoll mit bit-banging, ist es sehr wahrscheinlich, dass der controller verpassen tun die andere wichtige Aufgabe, denn das Protokoll kann verbraucht mehr CPU-Zeit als das, was eine dedizierte hardware verbrauchen würde. ALSO, sollte es vermieden werden, in Echtzeit die Umgebung, oder sagen Sie, die Zeit-kritischen Umfeld.
Zusammen mit diesen, gibt es eine weitere Sorge mit bit-banging, in der Regel beim Lesen und/oder schreiben mit der pin, der das signal erzeugt hat in der Regel mehr jitter oder Pannen, vor allem wenn der controller auch die Ausführung anderer Aufgaben, während die Kommunikation.. Wenn überhaupt es unvermeidlich ist, verwenden Sie bit-banging, dann zumindest versuchen, und verwenden Sie Sie mit interrupts statt polling.
Bit-banging ist erst Recht nicht möglich, in einem nicht-realtime-system. Und wenn Sie legte es in den kernel, noninterruptable dann haben Sie wirklich sicherstellen, dass Sie nur bitbang eine bestimmte Anzahl von bits vor der Umschuldung Benutzer-Prozesse.
Beachten Sie dies: Sie haben eine scheduling-timer läuft auf 1/1000s Abständen. Wenn es läuft, überprüfen Sie, wenn einige Prozess will senden von Daten über die bitbanged Schnittstelle, und Sie behandeln diesen Antrag. Die Anfrage erfordert, dass Sie bitbang ein byte bei 9600 baud (als Beispiel). Jetzt haben Sie ein problem: es dauert 0.8 ms bis bitbang ein byte. Sie können nicht wirklich leisten, denn wenn die zeitgesteuerte interrupt läuft, es hat damit zu tun, es ist Arbeit und laden das nächste Prozess, der erforderlich ist, um zu laufen, und beenden Sie dann. Dies dauert in der Regel viel kürzer als 1 MS und 1 MS ist meistens damit verbracht, mit dem Benutzer-Prozess bis zum nächsten interrupt. Aber wenn Sie anfangen, bitbanging dann sind Sie meist zu verbringen, dass ms nichts zu tun.
Einer Lösung kann mit Hilfe einer timer-Peripherie nur für das bitbanging Zweck. Dies würde ein relativ autonomen und interrupt-gesteuerten bitbanging-code, der nicht untätig ist, aber das ist nur auf Kosten des durch eine dedizierte timer. Wenn Sie können genug einen hardware-timer, dann bitbanging würde wahrscheinlich Super funktionieren. Aber im Allgemeinen ist es sehr schwer zu tun, zuverlässige bitbanging bei hohen Geschwindigkeiten in einer multitasking-Umgebung.
Bit-banging trägt eine software-overhead CPU-Zyklen zu verbrauchen, die Sie sonst zu nutzen für andere Zwecke. Dies kann einen spürbaren Effekt auf die Reaktionsgeschwindigkeit des Systems zu anderen Veranstaltungen, und in einem hard real-time system, erheblich beeinträchtigen können, die Systeme, die Fähigkeit zur Erfüllung von Echtzeit-Fristen.
Wenn die bit-banged-Schnittstelle zu haben und keine nachteilige Wirkung auf die Echtzeit-performance, dann muss es angesichts der niedrigen Priorität, so dass dann selbst die nicht-deterministisch in Bezug auf den Daten-Durchsatz und Latenz.
Den meisten CPU-effizienten übertragung wird erreicht, indem eine hardware-Schnittstelle und der DMA-übertragung zu minimieren, die software-overhead. Bit-banging ist bei dem anderen extrem.
Ich würde nicht sagen, es war schrecklich; wenn Sie in Ihrer Anwendung, die Sie erreichen können, Reaktionsfähigkeit und Echtzeit-Einschränkungen und die Verwendung von bit-banging vielleicht reduziert die Kosten von dem Teil benötigt, oder Sie können verwenden Sie die vorhandene hardware für das Beispiel ist, dann kann es sein, absolut gerechtfertigt.
InformationsquelleAutor Clifford
Ich weiß nicht, dass es schrecklich, aber wenn Sie haben eine SPI-oder I2C-Peripheriegeräte bereits vorhanden, es gibt sicherlich "das Rad nicht neu erfinden" argument gegen bit-banging, vor allem, wie Sie vielleicht einen Fehler in deinem code - Beispiel für Sie sein könnte Probenahme auf der falschen Flanke des SPI-clock, und je nach Toleranzen beteiligt und welche hardware Sie für den test, die Sie vielleicht nicht bemerken, bis Sie bereits in der Produktion. Die wikipedia Artikel stellt auch fest, dass Sie über zusätzliche Rechenleistung und, dass du bist wahrscheinlich zu machen jitter in der alle Signale, die Sie produzieren.
Alles, was gesagt, bit-banging ist die Wahl nur verfügbar, wenn Ihre hardware nicht über eine eingebaute Peripherie, oder wenn es bereits von anderen Geräten, z.B. wenn der eingebaute SPI Peripherie verwendet wird, die durch einen Breitband-Gerät, das Sie haben, um kontinuierlich zu kommunizieren, vielleicht ist dir etwas bang auf ein anderes SPI Gerät, das muss nicht so sein, in Echtzeit in der Anwendung.
InformationsquelleAutor Sam Skuce
Bit-banging ist tragbar, siehe den I2C-code in den Linux-kernel-Treiber zum Beispiel. Sie können Sie aufstehen und laufen schnell und es funktioniert einfach. Hardware-basierten Lösungen in der Regel nicht und nehmen Sie eine Weile, um aufzustehen und zu laufen, und sind begrenzt durch die hardware-Implementierung. Nicht alle spi und insbesondere i2c-konform zu einem standard, der umgesetzt werden können in einem generischen hardware-Lösung. Sie müssen immer in der Lage sein zu fallen zurück auf bit-banging.
Bit-banging verbraucht mehr Prozessor-Ressourcen, das macht es wünschenswert, von, vorne. Es ist mehr tragbar oder kann, je nachdem, wie es geschrieben ist, so ist es wünschenswert, dass vor. Hardware SPI/I2C ist das Gegenteil von denen, nimmt etwas von der cpu-overhead, ist nicht tragbar, ist nicht immer flexibel genug, um alle Peripheriegeräte.
Als Profi benötigen Sie, um bequem zu sein mit den beiden, genau wie jeder andere embedded-Abwägung, die Sie in Ihrem design.
InformationsquelleAutor old_timer
Wäre es nicht aufgerufen werden schrecklich als solche. Aber ja, wenn wir implementieren ein Protokoll mit bit-banging, ist es sehr wahrscheinlich, dass der controller verpassen tun die andere wichtige Aufgabe, denn das Protokoll kann verbraucht mehr CPU-Zeit als das, was eine dedizierte hardware verbrauchen würde. ALSO, sollte es vermieden werden, in Echtzeit die Umgebung, oder sagen Sie, die Zeit-kritischen Umfeld.
Zusammen mit diesen, gibt es eine weitere Sorge mit bit-banging, in der Regel beim Lesen und/oder schreiben mit der pin, der das signal erzeugt hat in der Regel mehr jitter oder Pannen, vor allem wenn der controller auch die Ausführung anderer Aufgaben, während die Kommunikation.. Wenn überhaupt es unvermeidlich ist, verwenden Sie bit-banging, dann zumindest versuchen, und verwenden Sie Sie mit interrupts statt polling.
InformationsquelleAutor
Bit-banging ist erst Recht nicht möglich, in einem nicht-realtime-system. Und wenn Sie legte es in den kernel, noninterruptable dann haben Sie wirklich sicherstellen, dass Sie nur bitbang eine bestimmte Anzahl von bits vor der Umschuldung Benutzer-Prozesse.
Beachten Sie dies: Sie haben eine scheduling-timer läuft auf 1/1000s Abständen. Wenn es läuft, überprüfen Sie, wenn einige Prozess will senden von Daten über die bitbanged Schnittstelle, und Sie behandeln diesen Antrag. Die Anfrage erfordert, dass Sie bitbang ein byte bei 9600 baud (als Beispiel). Jetzt haben Sie ein problem: es dauert 0.8 ms bis bitbang ein byte. Sie können nicht wirklich leisten, denn wenn die zeitgesteuerte interrupt läuft, es hat damit zu tun, es ist Arbeit und laden das nächste Prozess, der erforderlich ist, um zu laufen, und beenden Sie dann. Dies dauert in der Regel viel kürzer als 1 MS und 1 MS ist meistens damit verbracht, mit dem Benutzer-Prozess bis zum nächsten interrupt. Aber wenn Sie anfangen, bitbanging dann sind Sie meist zu verbringen, dass ms nichts zu tun.
Einer Lösung kann mit Hilfe einer timer-Peripherie nur für das bitbanging Zweck. Dies würde ein relativ autonomen und interrupt-gesteuerten bitbanging-code, der nicht untätig ist, aber das ist nur auf Kosten des durch eine dedizierte timer. Wenn Sie können genug einen hardware-timer, dann bitbanging würde wahrscheinlich Super funktionieren. Aber im Allgemeinen ist es sehr schwer zu tun, zuverlässige bitbanging bei hohen Geschwindigkeiten in einer multitasking-Umgebung.
InformationsquelleAutor user2826084