이것은 CM Kormanyos, Real-Time C++: 효율적인 객체 지향 및 템플릿 마이크로컨트롤러 프로그래밍, 제4판(Springer, Heidelberg, 2021) ISBN 9783662629956 책의 동반 코드입니다.
이 저장소에는 몇 가지 주요 부분이 있습니다.
ref_app
입니다. 여기에는 벤치마크도 포함됩니다. GNU/GCC 크로스 컴파일러와 Win*
에서 실행되는 다양한 추가 도구(아래 설명된 특정 빌드에 선택적으로 필요함)는 관련 ckormanyos/real-time-cpp-toolchains 저장소에서 찾을 수 있습니다.
참조 애플리케이션은 작은 시작 코드로 부팅한 후 스키니 MCAL(마이크로 컨트롤러 추상화 계층)을 초기화합니다. 그런 다음 LED 애플리케이션을 관리하고 주기적 벤치마크 작업을 호출하며 감시 서비스를 제공하는 간단한 멀티태스킹 스케줄러로 제어가 전달됩니다.
LED 애플리케이션은 다음의 빈도로 사용자 LED를 전환합니다.
참조 애플리케이션은 C++14, 17, 20, 23 이상과 호환됩니다.
애플리케이션 소프트웨어는 한 번 구현되고 ref_app의 지원되는 각 대상에서 균일하게 사용됩니다. 개별 대상 간의 차이는 칩별 및 보드별 시작/MCAL 세부 사항과 관련된 하위 소프트웨어 계층에서만 발생합니다.
이러한 방식으로 프로젝트는 높은 수준의 이식성을 보여줍니다.
참조 애플리케이션은 다음 대상을 지원합니다.
대상 이름(빌드 명령에 사용됨) | 대상 설명 | *(브레드보드) |
---|---|---|
avr | MICROCHIP(R)[구 ATMEL(R)] AVR(R) ATmega328P | 엑스 |
atmega2560 | MICROCHIP(R)[구 ATMEL(R)] AVR(R) ATmega2560 | |
atmega4809 | MICROCHIP(R)[구 ATMEL(R)] AVR(R) ATmegax4809 | 엑스 |
am335x | Texas Instruments(R) AM335x ARM(R) A8을 탑재한 BeagleBone | |
bcm2835_raspi_b | ARM1176-JZFS(TM)를 갖춘 RaspberryPi(R) 제로 | |
Debug / Release | MSVC x64 컴파일러 Debug / Release 통한 Win* 의 PC | |
host | 호스트 컴파일러를 통한 Win* / mingw64 / *nix 의 PC/워크스테이션 | |
lpc11c24 | NXP(R) OM13093 LPC11C24 보드 ARM(R) Cortex(R)-M0+ | |
nxp_imxrt1062 | Teensy 4.0 보드 / NXP(R) iMXRT1062 ARM(R) Cortex(R)-M7 | 엑스 |
riscvfe310 | SiFive RISC-V FE310 SoC | |
rl78 | 르네사스(R) RL78/G13 | |
rpi_pico_rp2040 | 듀얼 ARM(R) Cortex(R)-M0+를 갖춘 RaspberryPi(R) Pico RP2040 | 엑스 |
rpi_pico2_rp2350 | 듀얼 ARM(R) Cortex(R)-M33을 갖춘 RaspberryPi(R) Pico2 RP2350 | 엑스 |
rx63n | 르네사스(R) RX630/RX631 | |
stm32f100 | STMicroelectronics(R) STM32F100 ARM(R) Cortex(R)-M3 | 엑스 |
stm32f407 | STMicroelectronics(R) STM32F407 ARM(R) Cortex(R)-M4F | |
stm32f429 | STMicroelectronics(R) STM32F429 ARM(R) Cortex(R)-M4F | |
stm32f446 | STMicroelectronics(R) STM32F446 ARM(R) Cortex(R)-M4F | |
stm32h7a3 | STMicroelectronics(R) STM32H7A3 ARM(R) Cortex(R)-M7 | |
stm32l100c | STMicroelectronics(R) STM32L100 ARM(R) Cortex(R)-M3 | 엑스 |
stm32l152 | STMicroelectronics(R) STM32L152 ARM(R) Cortex(R)-M3 | |
stm32l432 | STMicroelectronics(R) STM32L432 ARM(R) Cortex(R)-M4F | 엑스 |
v850es_fx2 | Renesas(R) Electronics V850es/Fx2 upd703231 | |
wch_ch32v307 | WCH CH32v307 RISC-V 보드 | |
wch_ch32v307_llvm | WCH CH32v307 RISC-V 보드(그러나 LLVM 툴체인 사용) | |
x86_64-w64-mingw32 | Win* 의 PC / GNU/GCC x86_x64 컴파일러를 통한 mingw64 | |
xtensa32 | Espressif(XTENSA) NodeMCU ESP32 | 엑스 |
이 표에서 *(브레드보드)는 보드(또는 특정 버전)가 일반 브레드보드와 함께 쉽게 사용될 수 있음을 의미합니다. 헤더 핀을 매우 간단하게 수동으로 납땜/장착해야 할 수도 있습니다.
avr
(ARDUINO), bcm2835_raspi_b
(RaspberryPi ZERO) 또는 am335x
(BeagleBoneBlack) 등과 같은 지원 보드 중 하나를 사용하여 참조 애플리케이션을 시작하는 것이 가장 쉽습니다. 참조 애플리케이션은 ref_app 디렉터리 및 해당 하위 디렉터리에서 찾을 수 있습니다. .
참조 애플리케이션은 교차 개발을 사용하고 빌드 시스템은 다음에서 지원됩니다.
*nix
make 도구,Win*
에 *nix
와 같은 make 도구를 포팅했습니다.Win*
, 빌드가 성공적으로 완료되면 HEX 파일(예: ref_app.hex
), 맵 파일, 크기 보고서 등을 포함한 결과 아티팩트를 bin
디렉터리에서 사용할 수 있습니다.
*nix
에서 참조 애플리케이션을 시작하려면
target avr
)을 고려하십시오../target/build/build.sh avr rebuild
명령을 사용하여 build.sh
실행합니다.avr rebuild
매개변수를 사용하여 GNU make를 호출하고 이후에 target avr
에 대한 전체 솔루션을 다시 빌드합니다.*nix
에서 가져와야 하는 경우 sudo apt install gcc-avr avr-libc
실행하세요.target avr
대한 *nix
빌드의 예 이제 target avr
에 대해 *nix
의 명령 셸에서 참조 애플리케이션을 빌드하는 방법을 예시하겠습니다. 이 대상 시스템에는 기본적으로 모든 ARDUINO(R) 호환 보드가 포함됩니다. 이는 책에서 직접 만든 보드와 실제로 사용되는 보드 호환성이기도 하다.
필요한 경우 gcc-avr
설치하십시오.
sudo apt install gcc-avr avr-libc
ckormanyos/real-time-cpp 저장소를 복제하거나 가져옵니다. 그런 다음 다음을 사용하여 빌드하세요.
cd real-time-cpp
cd ref_app
./target/build/build.sh avr rebuild
target stm32f446
에 대한 *nix
빌드 예시 이제 ARM(R) 타겟에 대해 *nix
의 명령 셸에서 참조 애플리케이션을 빌드하는 방법을 예시하겠습니다. 예를 들어 빌드 변형 target stm32f446
생각해 보세요. 이를 위해 STMicroelectronics(R)의 NUCLEO-F446RE 보드를 편리하게 사용할 수 있습니다.
필요한 경우 gcc-arm-none-eabi
설치하십시오.
sudo apt install gcc-arm-none-eabi
ckormanyos/real-time-cpp 저장소를 복제하거나 가져옵니다. 그런 다음 다음을 사용하여 빌드하세요.
cd real-time-cpp
cd ref_app
./target/build/build.sh stm32f446 rebuild
target stm32f446
에 대한 MacOS에서의 빌드 예 이제 ARM(R) 타겟에 대해 MacOS의 명령 셸에서 참조 애플리케이션을 빌드하는 방법을 예시하겠습니다. 예를 들어 빌드 변형 target stm32f446
생각해 보세요. 이를 위해 STMicroelectronics(R)의 NUCLEO-F446RE 보드를 편리하게 사용할 수 있습니다.
ckormanyos/real-time-cpp 저장소를 복제하거나 가져옵니다.
MacOS에서 GNUmake의 기본 버전 3.81을 (이제) 사용할 수 있습니다. 이 저장소에 사용된 make 파일은 이 저장소와 호환되도록 만들어졌습니다. 배경 정보는 문제 273을 참조하세요.
make
에 대한 직접 수동 호출을 통해 대상을 빌드합니다.
cd real-time-cpp
cd ref_app
make -f target/app/make/app_make.gmk rebuild TGT=stm32f446
툴체인이 필요한 경우 참조 애플리케이션의 대상을 빌드하기 전에 이를 설치하거나 검색해야 합니다.
필요한 경우 wget
통해(또는 선택적으로 설치) gcc-arm-none-eabi
툴체인을 얻을 수 있습니다. 이 경우 Arm GNU 도구 체인 다운로드에서 찾을 수 있는 최신 MacOS용 gcc-arm-none-eabi
사용하는 것이 편리하다는 것을 알았습니다.
arm-non-eabi
툴체인은 wget
통해 가져올 수 있으며 셸에서 로컬로 성공적으로 사용할 수 있습니다. 이를 원하는 경우 아래의 단계별 절차를 따르십시오.
1단계: 로컬 디렉터리(예: macos-gnu-arm-toolchain
)를 만들고 그 cd
로 들어갑니다.
cd real-time-cpp
mkdir -p macos-gnu-arm-toolchain
cd macos-gnu-arm-toolchain
2단계: wget
사용하여 툴체인의 tarball을 가져와서 압축을 풀고 컴파일러의 bin
디렉터리를 셸의 실행 파일 경로에 추가합니다.
wget --no-check-certificate https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-darwin-x86_64-arm-none-eabi.tar.xz
tar -xvf arm-gnu-toolchain-12.2.rel1-darwin-x86_64-arm-none-eabi.tar.xz
PATH= $( pwd ) /arm-gnu-toolchain-12.2.rel1-darwin-x86_64-arm-none-eabi/bin: $PATH
3단계: 선택적으로 빠른 경로 확인을 위해 PATH
echo
. arm-non-eabi-g++
버전을 쿼리하는 것도 도움이 될 수 있습니다. 이는 툴체인이 이 셸의 로컬 PATH
에 올바르게 추가되었는지 확인하기 위한 것입니다.
echo $PATH
arm-none-eabi-g++ -v
이제 make
직접 호출하여 대상을 빌드하는 명령을 사용하기만 하면 됩니다(위의 *nix
사례와 동일함).
cd real-time-cpp
cd ref_app
make -f target/app/make/app_make.gmk rebuild TGT=stm32f446
Win*
에서 참조 응용 프로그램을 시작하려면
Win*
에서 실행되는 필요한 GNU/GCC 크로스 컴파일러를 (ckormanyos/real-time-cpp-toolchains 저장소에서) 가져오고 설정합니다.ref_app.sln
솔루션을 엽니다. Microsoft(R) VisualStudio(R)의 ref_app
빌드에서는 외부 Makefile 유형의 프로젝트 작업공간을 사용한 교차 개발을 많이 사용합니다. GNUmake는 빌드 프로세스에서 배치 파일을 통해 호출됩니다. 이후에는 여러 Makefile과 함께 실행됩니다.
Win32용 Debug
또는 Release
이외의 ref_app
대상을 빌드하려면 크로스 컴파일러(GNU/GCC 크로스 컴파일러)가 필요합니다. 자세한 내용은 아래 텍스트를 참조하세요.
VisualStudio(R)의 참조 응용 프로그램을 위해 Win*
에서 실행되는 GNU/GCC 크로스 컴파일러는 도구 체인 저장소인 ckormanyos/real-time-cpp-toolchains에서 찾을 수 있습니다. 툴체인 저장소에는 이식된 GNU/GCC 컴파일러 설치, 이동 및 사용에 대한 자세한 지침이 포함되어 있습니다.
Win*
용 GNUmake에 대한 참고 사항: Win*
에서 사용할 수 있는 GNUmake는 ckormanyos/make-4.2.1-msvc-build 저장소에서 찾을 수 있습니다. 원하는 경우 이 저장소의 코드를 복제하거나 가져옵니다. MSVC를 사용하여 x64
Release
구성에서 make-4.2.1
빌드합니다(즉, VC 14.2 이상, Community Edition도 괜찮습니다).
환경 간 CMake는 참조 애플리케이션을 빌드할 수 있습니다. 이를 위해 지원되는 각 대상에 대해 CMake 파일도 생성되었습니다.
예를 들어 CMake를 사용하여 avr
대상에 대한 참조 애플리케이션을 구축하는 것을 고려해 보세요. 패턴은 아래와 같습니다.
cd real-time-cpp
mkdir build
cd build
cmake ../ref_app -DTRIPLE=avr -DTARGET=avr -DCMAKE_TOOLCHAIN_FILE=../ref_app/cmake/gcc-toolchain.cmake
make -j ref_app
예를 들어, 이제 CMake를 사용하여 지원되는 ARM(R) 타겟 중 하나에 대한 참조 애플리케이션을 구축하는 방법을 고려해 보겠습니다. 패턴은 아래와 같습니다. 이 경우 다음 make 옵션을 식별해야 합니다.
-DTRIPLE=avr -DTARGET=avr
이러한 옵션을 구축 중인 stm32f446
ARM(R) 기반 타겟용 옵션으로 전환하세요.
-DTRIPLE=arm-none-eabi -DTARGET=stm32f446
stm32f446
(즉, Cortex(R)-M4F를 갖춘 ST Microelectronics(R) STM32F446 ARM(R))용 CMake 빌드를 실행하기 위해 명령 전체를 명확히 하겠습니다.
cd real-time-cpp
mkdir build
cd build
cmake ../ref_app -DTRIPLE=arm-none-eabi -DTARGET=stm32f446 -DCMAKE_TOOLCHAIN_FILE=../ref_app/cmake/gcc-toolchain.cmake
make -j ref_app
다른 대상에 대해 CMake를 사용하여 빌드하는 경우 표준 *nix
패턴을 따라 빌드하세요. 또한 x86_64-w64-mingw32
용 CMake나 MSYS, Cygwin 또는 유사한 *nix
유사 셸이나 콘솔의 host
사용하여 빌드하는 것도 작동합니다.
다음 명령 시퀀스는 *nix
와 유사한 셸 또는 콘솔의 기본 host
에 대해 빌드됩니다.
cd real-time-cpp
mkdir build
cd build
cmake ../ref_app -DTARGET=host -DCMAKE_TOOLCHAIN_FILE=../ref_app/cmake/gcc-toolchain.cmake
make -j ref_app
ATMEL(R) AtmelStudio(R) 7용 작업 공간 솔루션도 있습니다. 이는 ref_app.atsln
이라고 하며 ref_app 디렉토리에도 있습니다. 참조 애플리케이션과 각 예제에 대한 ATMEL Studio 프로젝트가 있습니다. 이 저장소의 ATMEL Studio 프로젝트는 AVR 대상만 지원합니다.
ATMEL Studio를 사용하기로 결정한 경우, 이러한 프로젝트에 대한 추가 라이브러리(일반적으로 ATMEL Studio의 표준 설치 중에 설치되는 라이브러리 제외)를 사용하거나 포함할 필요가 없습니다.
시작 코드 및 링커 정의 파일을 포함한 대상 세부 정보는 ref_app/target 디렉터리 및 해당 하위 디렉터리에서 찾을 수 있습니다. 지원되는 각 대상 마이크로컨트롤러 시스템마다 개별 하위 디렉터리가 있습니다.
target avr
이라고 불리는 MICROCHIP(R) [이전 ATMEL(R)] AVR(R) 구성은 클래식 ARDUINO(R) 호환 보드에서 실행됩니다. 프로그램은 portb.5
의 노란색 LED를 전환합니다.
target atmega4809
라고 불리는 MICROCHIP(R) [이전 ATMEL(R)] ATmega4809 구성은 내부 공진기로 클럭되는 ARDUINO(R) EVERY 호환 보드에서 실행됩니다. porte.2
(예: D5
)의 노란색 LED를 전환합니다.
Espressif(XTENSA) NodeMCU ESP32 구현은 Espressif SDK의 하위 집합을 사용하여 해당 코어 중 1개에서만 단일 OS 작업으로 참조 애플리케이션을 실행합니다.
"target lpc11c24"라고 불리는 NXP(R) OM13093 LPC11C24 보드 ARM(R) Cortex(R)-M0+ 구성은 port0.8
의 LED를 토글합니다.
ARM(R) Cortex(R)-M3 구성( target stm32f100
이라고 함)은 ST Microelectronics(R)에서 시판하는 STM32VL-DISCOVERY 보드에서 실행됩니다. 프로그램은 portc.8
의 파란색 LED를 전환합니다.
두 번째 ARM(R) Cortex(R)-M3 구성( target stm32l100c
라고 함)은 ST Microelectronics(R)에서 상업적으로 구입할 수 있는 STM32L100-DISCOVERY 보드에서 실행됩니다. 프로그램은 portc.8
의 파란색 LED를 전환합니다.
세 번째 ARM(R) Cortex(R)-M3 구성( target stm32l152
라고 함)은 ST Microelectronics(R)에서 상업적으로 사용할 수 있는 STM32L152C-DISCOVERY 보드에서 실행됩니다. 프로그램은 portb.6
의 파란색 LED를 전환합니다.
첫 번째 ARM(R) Cortex(R)-M4F 구성( target stm32f407
이라고 함)은 ST Microelectronics(R)에서 상업적으로 사용할 수 있는 STM32F4-DISCOVERY 보드에서 실행됩니다. 프로그램은 portd.15
의 파란색 LED를 토글합니다.
또 다른 ARM(R) Cortex(R)-M4F 구성( target stm32f446
이라고 함)은 ST Microelectronics(R)에서 상업적으로 구입할 수 있는 STM32F446-NUCLEO-64 보드에서 실행됩니다. 프로그램은 porta.5
의 녹색 LED를 전환합니다. 관심 있는 분들을 위해 이 시스템에 대한 오존 디버그 파일이 제공됩니다.
첫 번째 ARM(R) Cortex(R)-M7 구성( target stm32h7a3
이라고 함)은 ST Microelectronics(R)에서 상업적으로 사용할 수 있는 STM32H7A3-NUCLEO-144 보드에서 실행됩니다. 프로그램은 portb.0
의 녹색 LED를 전환합니다.
ARM(R) A8 구성( target am335x
라고 함)은 BeagleBone 보드(블랙 에디션)에서 실행됩니다. 화이트 에디션의 경우 CPU 클럭을 에서 줄여야 합니다. *nix
배포판과 독립적으로 실행되는 BeagleBone용 베어메탈 프로그램을 만듭니다. 우리 프로그램은 FAT32 SDHC 마이크로카드에 저장된 MLO 라는 원시 바이너리 파일에서 BeagleBone을 부팅하도록 설계되었습니다. 바이너리 파일에는 두 개의 32비트 정수로 구성된 특수 부팅 헤더가 포함되어 있습니다. 프로그램은 SD 카드에서 RAM 메모리로 로드된 후 실행됩니다. 비글본 블랙의 전원을 켤 때에는 보드 전원을 켜는 동안 반드시 부팅 버튼(S2)을 눌러야 합니다. 프로그램은 첫 번째 사용자 LED( port1.21
의 LED1)를 토글합니다.
ARM(R) 1176-JZF-S 구성( target bcm2835_raspi_b
라고 함)은 RaspberryPi(R) Zero(PiZero) 단일 코어 컨트롤러에서 실행됩니다. 이 프로젝트는 PiZero용 베어메탈 프로그램을 만듭니다. 이 프로그램은 보드의 모든 종류의 *nix
배포판과 독립적으로 실행됩니다. 우리 프로그램은 원시 바이너리 파일에서 PiZero를 부팅하도록 설계되었습니다. 원시 바이너리 파일은 kernel.img 라고 하며 FAT32 SDHC 마이크로카드에 저장됩니다. 프로그램 objcopy는 출력 플래그 -O binary
사용하여 ELF 파일에서 원시 바이너리를 추출하는 데 사용할 수 있습니다. kernel.img 파일은 다른 세 가지 파일인 bootcode.bin, start.elf 및 (선택 사항) config.txt와 함께 SD 카드에 저장되며 모두 인터넷에 설명되어 있습니다. 베어 메탈 참조 애플리케이션을 실행하는 SD 카드에 대한 전체 PiZero 부팅 콘텐츠 세트가 이 저장소에 포함되어 있습니다. 프로그램은 GPIO 인덱스 0x47
에서 GPIO 상태 LED를 토글합니다.
rpi_pico_rp2040
대상 구성은 듀얼 코어 ARM(R) Cortex(R)-M0+ 클럭을 갖춘 RaspberryPi(R) Pico RP2040을 사용합니다. Blinky_Pico_dual_core_nosdk
저장소에서 시작되었으며 (많은 감사와 함께) 가져왔습니다.
rpi_pico2_rp2350
대상 구성은 RaspberryPi(R) Pico2 RP2350과 듀얼 코어 ARM(R) Cortex(R)-M33을 사용합니다. 2040
과 동일한 부팅 구조를 가지고 있습니다. 마찬가지로 듀얼 코어 스타트업은 현대화된 Blinky_Pico2_dual_core_nosdk
저장소에 드러난 노력에 의해 개척되었습니다.
Target v850es_fx2
클래식 Renesas(R) V850es/Fx2 코어를 사용합니다. F-Line Drive It 스타터 키트의 upd703231 마이크로컨트롤러 파생 제품이 사용됩니다.
riscvfe310
대상은 Spark Fun의 상용 Red Thing Plus 보드에서 SiFive RISC-V FE310 SoC를 활용합니다. 포트 GPIO0.5
의 파란색 LED가 전환됩니다.
wch_ch32v307
에 대한 적응은 WCH CH32v307 보드에서 실행됩니다. Nanjing Qinheng Microelectronics Co., Ltd.의 RISC-V CH32v307 마이크로컨트롤러를 사용합니다. 전선 연결을 통해 포트 GPIOC.0
에 수동으로 연결된 파란색 LED1은 깜박이는 토글을 제공합니다. 유사한 적응 wch_ch32v307_llvm
은 GCC RISC-V 대신 LLVM RISC-V 도구 체인을 사용한다는 점을 제외하면 기본적으로 동일합니다.
Target nxp_imxrt1062
Spark Fun의 Teensy 4.0 보드에서 실행됩니다. 주황색 사용자 LED가 켜집니다.
다른 호환 보드의 경우 저에게 직접 연락하거나 원하는 대상 시스템에 대한 지원을 요청하는 문제를 제출하세요.
벤치마크는 마이크로컨트롤러의 성능과 성능 클래스를 식별하기 위한 확장 가능하고 이식 가능한 수단을 제공합니다. 자세한 내용은 벤치마크 페이지의 세부 정보를 참조하세요.
이 저장소의 프로젝트는 자체 작성된 시작 코드를 사용하여 OS 없이 베어 메탈 모드로 프로그래밍됩니다. 네이티브 C++ 및 자체 표준 라이브러리 이외의 외부 라이브러리는 사용되지 않습니다.
예를 들어, 이 저장소에서 지원되는 여러 인기 대상 시스템 중 하나인 BeagleBone Black Edition(BBB, target am335x
라고도 함)을 생각해 보세요. 이 보드의 프로젝트는 SD 카드의 바이너리 이미지 파일 MLO 에서 부팅됩니다. 이 저장소의 다른 모든 프로젝트와 마찬가지로 BBB 프로젝트는 자체 정적 초기화 및 칩 초기화(즉, 이 특별한 경우 ARM(R) 8 AM335x 프로세서의 칩 초기화)를 수행합니다. BBB 프로젝트는 초기화 후 am335x
MCAL을 초기화하고 자체 작성 멀티태스킹 스케줄러를 시작하는 main()
으로 점프합니다.
아래 이미지는 실제 BeagleBone Black Edition의 실제 모습을 보여줍니다. 이 베어 메탈 작동 모드에서는 BBB에서 실행 중인 *nix
OS, 키보드, 마우스, 모니터, 디버그 인터페이스 및 에뮬레이터가 없습니다.
보드의 마이크로컨트롤러는 위에서 언급한 벤치마크 중 하나를 주기적으로 수행합니다. 첫 번째 사용자 LED는 멀티태스킹 작업 시 port1.21
에서 전환되며 오실로스코프는 BBB의 헤더 핀 P8.15
인 디지털 I/O port1.15
에서 벤치마크 시간 신호의 실시간 측정을 캡처합니다.
빌드 상태 배지는 야간 CI 빌드 및 테스트의 상태를 나타냅니다.
avr-gcc
툴체인 repo ckormanyos/avr-gcc-build는 x86_64-linux-gnu
및 x86_64-w64-mingw32
용 최신 avr-gcc
툴체인을 빌드합니다. 셸 및 YAML 스크립트는 GHA 실행기의 소스에서 직접 avr-gcc
빌드합니다. 또한 가끔 GitHub 릴리스에서는 x86_64-linux-gnu
및 x86_64-w64-mingw32
용으로 사전 구축된 avr-gcc
도구 체인을 제공합니다.
이 저장소는 소스에서 자신만의 avr-gcc
툴체인을 구축하는 방법을 배울 수 있는 좋은 장소입니다. 간단하고 잘 설명된 셸 및 YAML 스크립트는 이해, 사용 또는 적용이 쉽습니다.
위에서 언급한 것처럼 훨씬 더 상세하고 광범위한 임베디드 툴체인이 ckomanyos/real-time-cpp-toolchains에 설명되어 있습니다. 여기에는 앞서 언급한 avr-gcc
툴체인과 기타 툴체인(일부는 다른 곳에서 찾기 어렵습니다)이 포함됩니다.
참조 애플리케이션과 예제(코드 조각도 포함)는 *nix
에서 GNU/GCC 컴파일러 및 GNUmake를 사용하여 구축할 수 있습니다. *nix
의 GNU/GCC 크로스 컴파일러와 GNUmake는 표준 get-install 관행 이후와 같이 표준 실행 파일 경로에서 사용 가능한 것으로 가정됩니다.
Win*
용으로 이식된 일부 GNU/GCC 크로스 컴파일러는 도구 체인 저장소인 real-time-cpp-toolchains에서 사용할 수 있습니다. 이는 Microsoft(R) VisualStudio(R) 내에서 개발/구축할 때 참조 애플리케이션의 마이크로 컨트롤러 솔루션 구성과 함께 사용할 수 있습니다. GNUmake, SED 등과 같은 다양한 기타 GNU 도구가 포팅되어 있으며 여기에서 찾을 수 있습니다. 이는 Win*
에서 ref_app
과 같은 크로스 임베디드 프로젝트를 빌드할 때 Makefile에 사용됩니다.
Win*
의 참조 응용 프로그램에서 Makefile은 해당 도구 및 GNU/GCC 도구 체인에 대해 자체 정의된 기본 위치를 사용합니다. Win*
의 도구 체인 기본 위치는 ./ref_app/tools/Util/msys64/usr/local
입니다. 이 특정 툴체인 위치는 msys2
/ mingw64
시스템에서 영감을 받았습니다.
Win*
에서 크로스 MSVC/GCC 빌드를 위한 도구 체인이 여기에 있어야 합니다. 이러한 도구 체인은 이 저장소의 일부가 아니며 CMD Batch와 함께 VisualStudio(R) 프로젝트를 선택적으로 사용할 때 지원되는 Win*
빌드를 사용할 때 이러한 도구 체인을 별도로 가져와야 합니다.
Win*
에서 크로스 MSVC/GCC 빌드용 도구 체인을 가져오고 사용하는 방법에 대한 자세한 지침은 real-time-cpp-toolchains 저장소에서 확인할 수 있습니다. 이러한 지침은 참조 응용 프로그램을 구축하기 위해 Microsoft(R) VisualStudio(R) 프로젝트(위에서 설명한 일반적인 MSVC/ Win*
방식을 통해)를 선택할 때 이러한 도구 체인을 사용하는 방법에 대한 지침을 제공합니다.
참조를 구축하려면 GCC 5~13(일반적으로 높을수록 더 유리함) 또는 MSVC 14.2 이상과 같이 높은 수준의 C++14(또는 그 이상) 인식 및 준수를 갖춘 GNU/GCC 포트(또는 기타 컴파일러)가 필요합니다. 애플리케이션(및 예제와 코드 조각)
일부 코드 조각은 C++14뿐만 아니라 C++17, 20, 23 이상의 언어 요소를 보여줍니다. 따라서 C++17을 지원하거나 C++20, 23을 지원하는 컴파일러(예: GCC 13, clang 15, MSVC 14.3 이상)가 모든 코드 조각의 성공에 도움이 될 수 있습니다.
<chrono>
, <ratio>
및 일부 내부 특성 헤더와 같은 자체 작성 STL의 작은 부분은 GNU General Public License 버전 3 이상에 따라 라이센스가 부여됩니다.