2017-01-13 2 views
-2

Ich arbeite mit Embed-Gerät mit Allwinner A20 Cortex-A7-CPU arbeiten. Qt wurde mit Mali Unterstützung gebaut, um direkt mit Framebuffer wie here, keine X11 zu arbeiten. Meine App verwendet uart, um Daten zu empfangen.Uart Daten beschädigt, wenn mit Qt Qml auf Allwinner A20 Legacy-Kernel

Wenn ich eigene App und (zum Beispiel) Standard Qml Oscilliscope von Qt 5.7 Beispiele gleichzeitig laufen, verlorene Daten Bytes von uart verloren oder werden falsch in meiner APP. Ich habe Test mit QSerialPort und grundlegende C serielle Implementierung in meiner App(), das gleiche Ergebnis. Htop Rückholsystem Last unter 0,75 (A20 hat 2 Kerne), so sieht aus wie ein System nicht vollständig geladen.

Wenn ich meine App und sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run ausführen, htop 100% Last auf beiden Kernen zurückgeben, aber meine App keine Daten verloren.

UPDATE:

Hallo! Ich sende 96 Bytes Paket mit CRC alle 155ms, es ist ungefähr (65Hz) Wenn ich 115200 oder 250000 Baud verwende, überprüfen alle 65 Pakete in jedem zweiten Durchlauf CRC. Aber wenn ich die Geschwindigkeit auf 1mbit oder mehr erhöhen und qt GUI-App mit dynamischen qml-Schnittstelle ausführen, verlieren Daten in uart, Fehlerprozent ist etwa 20-24%. Wenn ich nur meine App starte, und keine qt qml GUI App in der Nähe, sind alle Daten korrekt, Fehler Prozent ist niedriger als 1% sogar bei 1,5mbit.

+0

Schauen Sie [hier] (http://Stackoverflow.com/help/how-to-ask) nach, wie Sie eine richtige Frage stellen können. Dies wird wahrscheinlich als "unklar" gemäß den Regeln geschlossen. Zwei Dinge, auf die ich hinweisen muss. A) Korrelation ist keine Kausalität. B) Wir haben QML über A20 mit einem viel höheren Durchsatz verwendet (WiFi, also zusätzlicher Daten-Overhead aufgrund der Kapselung), und wir haben niemals einen Datenverlust. – BaCaRoZzo

+0

@BaCaRoZzo thx. Wifi ist eine andere Sache, es ist nicht in soc und hängt nicht davon ab, wenn Treiber korrekt funktioniert. Ich benutze den Sunxi Legacy-Kernel und denke, dass der uart-Treiber Probleme mit hoher CPU-Last hat. Ich weiß das genau nicht das Problem, so weiß nicht, wie man richtig fragt. Hoffe, jemand hat dieses Problem gelöst und kann beraten. – aneox

+0

Es war ein anderes Board als Ihres mit dem gleichen SoC, aber irgendwie war meins nur ein Beispiel, um zu sagen, dass Workload als Problem seltsam klingt. Wenn Sie denken, dass der Treiber einen Bug hat, untersuchen Sie das und schränken Sie das Problem ein, bevor Sie hier posten. Ich denke nicht, dass Sie auf diese Weise eine Antwort haben werden. Viel Glück. – BaCaRoZzo

Antwort

0

scheint ich eine Lösung zu bekommen. Laut Datenblatt a20 habe ich festgestellt, dass dieser SoC 64 Bytes Hardware-UART-Puffer hat. Meine Paketgröße war 156. Also jetzt habe ich versucht, Paket auf 4 Teile (39 Bytes) zu teilen und bekomme jetzt 0% schlechte Pakete, selbst wenn CPU vollständig geladen ist. Aber ich möchte darauf hinweisen, nur qml-Engine generieren diese Art von CPU-Last, die beeinflussen kann.