2016-08-05 1 views
2

Qt Creator를 사용하여 STM32 용 베어 메탈 구성을 사용하는 임베디드 응용 프로그램을 개발합니다. KIEL uVision, IAR System Workbench 또는 일부 Eclipse IDE와 같은 다른 IDE에서이 응용 프로그램을 디버깅 할 때 트리 목록에 프로세서 특정 레지스터를 볼 수있는 특수 뷰를 사용할 수 있습니다. Qt Creator와 비슷한 것이 있습니까?디버깅하는 동안 Qt Creator의 주변 레지스터

디버그 뷰에서 레지스터보기를 보았습니다. 표시 할 메모리 주소를 말할 가능성이 있습니까?

편집 : 내가 쓰고있는 응용 프로그램은 C 및 C++입니다. 타겟은이 경우 STM32의 ARM 아키텍처를 기반으로 한 마이크로 컨트롤러입니다. Qt 또는 QML 코드는 없습니다.

제 목표는이 응용 프로그램을 개발하기 위해 IDE로 QtCreator를 사용하는 것입니다. 키트 구성에서 컴파일러 (arm-none-eabi-gcc), 디버거 (arm-none-eabi-gdb) 및 gdb-server (openocd)를 구성하기 만하면됩니다. 이를 통해 베어 메탈 타겟 용 실행 파일을 생성 한 다음 마이크로 컨트롤러 내부의 플래시 메모리로 플래시 할 수 있습니다.

이러한 모든 단계는 이미 완료되었습니다.

그러나 디버깅 부분은 메모리 공간의 일부로 까다로워 지는데 바로 하드웨어 구성이 아니라 순수한 메모리입니다. 이 메모리 공간에는 주변기기 구성이 포함되어 있습니다. UART, I2C, ETHERNET, USB를 통해 대화하거나 핀 또는 클록 속도를 구성하십시오.

이 값을보고 참조 설명서와 비교하고 각 비트가하는 것을 확인해야합니다. 현재 메모리 맵을보고 거기서 읽을 수는 있지만 Keil uVision, IAR System Workbench 및 Ecplipse 기반 IDE는 레퍼런스 매뉴얼과 똑같은 값을 볼 수있는 멋진 플러그인을 가지고 있습니다. (이미지를 참조하십시오)

내 질문에 일부 플러그인 또는 일부 방법을보고 편집하는 경우 또는이 플러그인을 직접 작성해야합니까?

후자의 경우 디버거 인스턴스에 연결하고 명령을 쓰고 출력을 읽는 방법을 알아야합니다. 주로 데이터 @ 주소를 읽고 데이터 @ 주소를 쓰십시오. 나는 gdb가 MI 모드를 사용한다는 것을 알고 있습니다. 다른 프로세스에서 gdb에 연결을 시도했지만 가능하지 않으므로 Qt Creator 용 플러그인을 만들어야합니다. 레지스터 설명은 XML 형식의 정의 된 파일 형식 인 SVD 형식입니다.

마지막 부분을 요약하면 실행중인 gdb에 연결하고 중단 점에 도달하면 데이터를 보내고받을 수 있도록 플러그인에서 구현해야하는 코드를 찾습니다.

STM32 Memory map Keil registers Eclipse registers

+0

작업에 잘못된 도구를 사용하는 것처럼 보입니다. Qt 또는 QML을 사용하지 않는 경우 QtCreator를 사용하는 이유는 무엇입니까? 원하는 기능이있는 여러 환경을 나열 했으므로 그 환경을 사용하지 않는 이유는 무엇입니까? – rjp

+0

나는 Win, Mac 및 Linux 프로그램과 Android 용 Qt 및 QML을 사용합니다. 그것이 능력을 가지고 있다고 나에게 보인다. 누락 된 유일한 것은이 특별한 견해입니다. 다른 환경에는이 기능이 있지만 IDE로는 끔찍합니다. IAR과 Keil은 자신의 빌드 시스템과 컴파일러를 사용합니다.이 컴파일러는 나를 위해 적당하지 않습니다. 따라서 빌드 중에 사용자 지정 항목을 추가해야하므로 CMake를 사용합니다. 휴대용도 아닙니다. 의심 와인이 도움이 될 것입니다. – phodina

+0

Eclipse와 GNU ARM 도구는 어떻게됩니까? 당신이 둥근 못보다 네모 달린 못을 좋아하기 때문에 당신이 둥근 구멍 속으로 사각형 못을 망치 려하고있는 것처럼 보입니다. 무차별 대용 암호로 작동하도록 만들 수도 있지만 더 나은 해결책이 있습니다. – rjp

답변

1

당신이 C++ 코드 또는 QML 코드를 디버깅 여부를 당신은 말을하지 않습니다, 그래서 더 예 '로 응답하거나 수 없습니다. 이러한 레지스터 값은 어셈블리 언어 수준에서 디버깅하는 경우 유용합니다 (자체적으로 또는 유용하지 않을 수도 있음).

C++ 코드를 디버깅하는 경우 해당 코드의 어셈블리 목록을 생성하도록 컴파일러를 구성 할 수 있지만 꽤 낮은 수준에서 디버깅 할 수 있습니다.

QML 코드를 디버깅하는 경우 QML 엔진의 어셈블리 목록이 필요합니다.이 목록에는 얻을 수 있을지 의심됩니다. 더 중요한 것은 낮은 수준의 프로 시저 디버거로 QML과 같은 선언적 언어를 디버깅하는 것은 시간 낭비라고 생각합니다. QML과 같은 언어의 요점은 무엇보다도 당신을 얻는 것입니다.

+0

임베디드 시스템에서 C 코드를 디버깅 할 때 정기적으로 레지스터 값을 조사해야합니다. 특히 주변 장치 구성 레지스터와 관련하여 어셈블리와 관련성이 있습니다. 당신이 QML을 디버깅하는 것이라면 동의 할 수 있습니다. – rjp

+1

맞습니다. 특히 주변 장치 레지스터 값은 사용하는 언어에 상관없이 관련이 있습니다. QML (QML 코드가 주변 장치 레지스터를 수정하는 것은 의심 스럽지만)도 마찬가지입니다. CPU 레지스터를 생각하고 있었는데, 기본 어셈블리 코드를 보지 않고서는 해석하기가 어려웠습니다. – Mark

관련 문제