이 글을 쓰는 시점(4년 2023월 <>일)을 기준으로 JetBrains CLion은 Rust에 대한 플러그인 지원과 임베디드 개발에 대한 기본 지원을 제공하지만 이 둘에 대한 기본 또는 플러그인 지원은 결합하지 않습니다. 그러나 OpenOCD 지원 및 사용자 지정 빌드 도구를 사용하여 CMake 래퍼에 의존하지 않고도 합리적인 빌드 및 디버깅 경험을 얻을 수 있습니다.
다음은 STM32F3VCT32VCT303 MCU를 사용하는 STM6F<> 디스커버리 보드의 기본 설정에 대해 설명하지만 OpenOCD를 사용하여 프로그래밍 및 디버깅할 수 있는 모든 보드에 적용되어야 합니다. 나는 최근에 장난감 프로젝트에서 그것을 사용했다.
STM32F3 디스커버리 블로그 게시물은 LED 룰렛 예제의 GIF 없이는 완성되지 않습니다.
Rust 환경 준비
이 글은 특히 CLion에 초점을 맞추고 있으므로, The Embedded Rust Book을 팔로우하여 시작하는 것이 좋습니다. STM32F3 Discovery용으로 특별히 사용할 수 있는 이전 버전의 책도 있으며 여기에서 읽을 수 있습니다.
특히 다음이 필요합니다.
- 적절한 Rust 타겟이 설치되어 있어야 합니다(예: thumbv7em-none-eabi).
- OpenOCD 설치,
- GDB Multi-Arch (또는 대상 플랫폼의 GDB)가 설치되어 있습니다.
- UDEV 규칙 설정 및
- UART 디바이스와 통신할 수 있는 사용자 권한입니다.
이 책은 이 모든 것을 안내할 것입니다.
대상 도구 체인 설정
CLion에서 설정(Settings) > 빌드, 실행, 배포(Build, Execution, Deployment) > 도구 체인(Toolchains)으로 이동하여 새 도구 체인을 생성합니다. 이 창에서 하드웨어의 GDB를 선택합니다(이 경우 ). 이 단계는 나중에 유사한 선택을 할 것이기 때문에 엄격하게 요구되지는 않지만 일을 멋지고 깔끔하게 유지합니다.arm-none-eabi-gdb
툴체인 설정(빌드, 실행, 배포 > 툴체인 설정> 설정)
빌드 타겟 설정
Settings(설정) >Build, Execution, Deployment > Custom Build Targets(사용자 지정 빌드 대상)로 이동하여 빌드할 각 바이너리 및 플레이버에 대한 새 타겟을 생성합니다. 아래 그림에서 위에서 만든 툴체인을 만들고 타겟팅하고 선택했습니다. 빌드 및 정리 단계는 바로 뒤에 생성됩니다.Cargo DebugCargo Release
빌드 대상 설정(Settings > Build, Execution, Deployment > Custom Build Targets)
이 구성은 에 저장됩니다..idea/customTargets.xml
Build and Clean 옆에 있는 점 3개 버튼을 클릭하면 External Tools 대화상자가 나타납니다.
외부 도구
버튼을 클릭하고 빌드하려는 각 플레이버 또는 바이너리에 대해 하나씩 단일 타겟 Clean 및 여러 Build 타겟을 만듭니다. 그러면 편집 도구 대화 상자가 나타납니다.+
그룹 이름은 편집 도구 창에서 자유롭게 지정할 수 있으며 Rust Build를 선택했습니다. 빌드하는 각 바이너리에 대해 일반 이름 또는 특정 이름을 선택할 수 있습니다(예: 바이너리당 디버그 및 릴리스 빌드를 번들로 묶기 위해).
화물 청소 도구 구성.
cargo 빌드 도구 구성입니다.
프로젝트에서 구성과 함께 사용자 지정을 사용하는 경우 인수를 생략할 수 있습니다. 내 프로젝트는 다음을 사용합니다.--target ....cargo/config.tomlbuild.target
[build]
target = "thumbv7em-none-eabihf" # Cortex-M4 and Cortex-M7 (no FPU)
이와 같은 구성을 제공하지 않는 경우 Argument 값은 다음과 같아야 합니다.
build --target thumbv7em-none-eabihf
화물 작업공간
프로젝트를 단일 바이너리가 아닌 화물 작업공간으로 설정할 때 변수 확장은 유용하지 않습니다. 예를 들어, 는 작업 영역 디렉토리를 참조하지만 . 올바른 바이너리를 빌드하려면 에서 지정하거나 빌드 명령에 매개 변수를 구체적으로 제공해야 합니다.$ContentRoot$$ProjectFileDir$default-membersCargo.toml--bin your-project
인수의 전체 값은 다음과 같습니다.
build --target thumbv7em-none-eabihf --bin led-roulette
실행/디버그 구성
마지막으로 실행 구성을 설정해야 합니다. 이를 위해 Debug/Run Configuration(디버그/실행 구성) 선택에서 Edit Configurations(구성 편집)로 이동합니다. 놀랍게도 Run/Debug Configurations 대화 상자가 나타납니다.
여기에서 OpenOCD 다운로드 및 실행 유형의 구성을 만듭니다.
- Target의 경우 위에서 만든 빌드 타겟을 선택합니다. 아래 예에서는 Cargo Debug를 선택했습니다.
- Executable binary(실행 가능한 바이너리)의 경우 디렉터리에서 빌드 바이너리 아티팩트를 선택합니다. 필자의 경우, 바이너리는 프로젝트가 타겟을 위해 빌드 된 이후 하위 디렉토리에있었습니다.targettarget/thumbv7em-none-eavbihfdebugthumbv7em-none-eavbihf
- 위에서 만든 도구 체인을 선택하거나 도구 체인을 만들지 않은 경우 디스크의 올바른 디버거를 가리켜 디버거를 선택합니다.
- Board 구성 파일의 경우 Assist 버튼을 클릭합니다. 그러면 보드 구성 파일 선택 대화 상자가 나타나 관련 구성을 선택할 수 있습니다.
- GDB 포트 및 텔넷 포트는 다른 컨피그레이션과 충돌하지 않는 한 그대로 둡니다.
- [Download]에서 [Always] 또는 [If updated]를 선택합니다.
- Reset(재설정)에서 Halt(중지)를 선택합니다. 어쨌든 이것은 나에게 최고의 디버깅 경험을 제공했습니다.
- [Before launch]에서 [Build]를 유지합니다.
실행/디버그 구성
보드 구성 파일 선택 대화 상자에서 올바른 보드 구성을 선택하십시오.
보드 구성 파일 선택 도우미
응용 프로그램 플래싱 및 실행
선택한 실행/디버그 구성을 시작하면 디버그 창이 열립니다. 툴팁은 OpenOCD를 통해 업로드되는 펌웨어에 대해 알려주며 이제 자유롭게 중단점을 배치하고 평소와 같이 단계별로 실행할 수 있습니다.
경우에 따라 디버거를 다시 시작하면 컴파일 통신 오류가 발생합니다. 디버깅 세션을 두 번째로 다시 시작하면 이러한 문제가 해결됩니다.
시스템 뷰어 설명(SVD)
디버그 보기의 주변 장치 탭에서는 보드와 관련된 SVD 파일을 선택할 수 있습니다. github.com/stm32-rs/stm32-rs 저장소의 하위 디렉토리 ( here )에서 내 것을 선택했습니다.svd
GPIO32 ODR303이 LED 하이를 토글하도록 설정된 STM3F11 SVD.
레지스터 보기
마찬가지로, 디버그 보기의 레지스터 탭에서는 현재 레지스터 값을 검사할 수 있습니다.
OpenOCD 개발 경험의 보기를 등록합니다.
그게 다야
세계 최고의 개발은 아니지만 합리적인 출발점입니다. 재미있게 지내세요.
'프로그래밍 > 리눅스' 카테고리의 다른 글
프로그래밍 「 리눅스 편」Linux: 오픈 소스 운영 체제 (0) | 2023.06.15 |
---|---|
프로그래밍 「 리눅스 편」이 상위 5개 Linux 배포판으로 해킹 기술을 발휘하십시오. (0) | 2023.06.15 |
프로그래밍 「 리눅스 편」리눅스 'groupadd' 명령 마스터하기: 종합 가이드 (1) | 2023.06.15 |
프로그래밍 「 리눅스 편」당신이 없이는 살 수 없는 덜 알려진 상위 10개 Linux 전원 명령 (0) | 2023.06.15 |
프로그래밍 「 리눅스 편」DevOps 및 SRE: "파악"해야 하는 도구 및 기술 (1) | 2023.06.15 |