2017-01-13 1 views
-2

Allwinner A20 cortex-a7 cpu가 포함 된 임베드 장치로 작업하고 있습니다. Qt는 말리 지원으로 빌드되어 here, 아니 x11과 같은 프레임 버퍼로 직접 작업합니다. 내 앱이 uart를 사용하여 데이터를 수신합니다.Qt로 작업하면 Uart 데이터가 손상됨 Allwinner A20 레거시 커널에서

Qt 5.7 예제에서 standart Qml 오실로 스코프를 동시에 실행하는 경우 uart에서 수신 한 데이터 바이트가 손실되거나 잘못된 앱이됩니다. 나는 내 애플 리케이션 (like here), 동일한 결과 QSerialPort 및 기본 C 직렬 구현 테스트했다. Htop 반환 시스템로드가 0.75 (A20은 2 코어)이므로 시스템이 완전히로드되지 않은 것처럼 보입니다.

내 앱을 실행하고 sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run을 실행하면 htop이 두 코어 모두에 100 %로드되지만 내 앱에는 데이터가 손실되지 않습니다.

UPDATE :

안녕! 각 155ms, 그 대략 (65hz) CRC가있는 96 바이트 패킷을 보내고 있습니다. 내가 115200 또는 250000 보오를 사용하는 경우, 매초마다 65 패킷이 모두 crc 검사를 통과합니다. 하지만 내가 1mbit 이상으로 속도를 높이고 동적 qml 인터페이스로 qt gui 앱을 실행하면, uart 손실의 데이터는 오류 비율이 약 20-24 %입니다. 내 앱만 실행하고 qt qml gui 앱이 없으면 모든 데이터가 정확합니다. 오류 백분율은 1,5mbit에서도 1 % 미만입니다.

+0

적절한 질문을하는 방법에 대해 알아보십시오 [http://skackoverflow.com/help/how-to-ask]. 이것은 규칙에 따라 "불명확"하다고 판단 될 수 있습니다. 지적해야 할 두 가지. A) 상관 관계는 인과 관계가 아닙니다. B) 우리는 훨씬 더 높은 처리량 (WiFi 때문에 캡슐화으로 인한 추가 데이터 오버 헤드)으로 A20보다 QML을 사용했으며 데이터 손실이 결코 발생하지 않았습니다. – BaCaRoZzo

+0

@BaCaRoZzo thx. Wifi는 다른 것입니다. 드라이버가 올바르게 작동하면 soc 및 doesnt에 의존하지 않습니다. Iam은 sunxi 레거시 커널을 사용하고 uart 드라이버가 높은 CPU로드에 문제가 있다고 생각합니다. 나는 정확히 그 문제를 모른다. 그래서 정확하게 묻는 법을 모른다. 누군가가이 문제를 만났기를 바랍니다. – aneox

+0

이 보드는 동일한 SoC를 사용하는 보드와는 다른 보드 였지만 아무리해도 내 워크로드가 이상하게 들릴 수 있다고 말하는 예가되었습니다. 드라이버에 버그가 있다고 생각되면 여기에서 문제를 조사하고 문제를 좁히십시오. 나는 당신이이 방법으로 대답을 가지지 않을 것이라고 생각합니다. 행운을 빕니다. – BaCaRoZzo

답변

0

것 같습니다. 데이터 시트 a20에 따르면이 SoC에는 64 바이트 하드웨어 UART 버퍼가 있음을 발견했습니다. 내 패킷 크기는 156입니다. 그래서 지금은 4 부분 (39 바이트)로 패킷을 분할하고 지금은 CPU가 완전히로드 된 경우에도 0 % 나쁜 패킷을 얻을려고했습니다. 그러나 나는 qml 엔진이 영향을 미칠 수있는 CPU로드의 이런 종류를 생성하는 것에주의하고 싶다.

관련 문제