นี่คือโค้ดที่แสดงร่วมสำหรับหนังสือ CM Kormanyos, Real-Time C++: Efficient Object-Oriented and Template Microcontroller Programming, Fourth Edition (Springer, Heidelberg, 2021) ISBN 9783662629956
พื้นที่เก็บข้อมูลนี้มีหลายส่วนหลัก
ref_app
อยู่ใน ref_app รวมถึงเกณฑ์มาตรฐานด้วย คอมไพเลอร์ข้าม GNU/GCC และเครื่องมือเพิ่มเติมต่างๆ ที่ทำงานบน Win*
ซึ่งเป็นทางเลือกที่จำเป็นสำหรับบิวด์บางตัวตามที่อธิบายไว้ด้านล่าง สามารถพบได้ในที่เก็บ ckormanyos/real-time-cpp-toolchains ที่เกี่ยวข้อง
แอปพลิเคชันอ้างอิงบูทด้วยโค้ดเริ่มต้นขนาดเล็ก จากนั้นเริ่มต้น microcontroller abstraction layer (MCAL) แบบผอมในเวลาต่อมา จากนั้นการควบคุมจะถูกส่งไปยังตัวกำหนดเวลามัลติทาสก์แบบง่ายๆ ที่จัดการแอปพลิเคชัน LED เรียกงานการวัดประสิทธิภาพแบบวนรอบ และบริการเฝ้าระวัง
แอปพลิเคชั่น LED สลับ LED ของผู้ใช้ด้วยความถี่
แอปพลิเคชันอ้างอิงเข้ากันได้กับ C++14, 17, 20, 23 และสูงกว่านั้น
แอปพลิเคชันซอฟต์แวร์ถูกนำไปใช้เพียงครั้งเดียวและใช้งานอย่างเท่าเทียมกันกับแต่ละเป้าหมายที่รองรับใน ref_app ความแตกต่างระหว่างแต่ละเป้าหมายเกิดขึ้นเฉพาะในเลเยอร์ซอฟต์แวร์ระดับล่างที่เกี่ยวข้องกับรายละเอียดการเริ่มต้น/MCAL เฉพาะชิปและบอร์ดโดยเฉพาะ
ด้วยวิธีนี้โครงการจึงแสดงให้เห็นถึงความสามารถในการพกพาในระดับสูง
แอปพลิเคชันอ้างอิงรองรับเป้าหมายต่อไปนี้:
ชื่อเป้าหมาย (ตามที่ใช้ในคำสั่ง build) | คำอธิบายเป้าหมาย | *(เขียงหั่นขนม) |
---|---|---|
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 | |
bcm2835_raspi_b | RaspberryPi(R) ศูนย์พร้อม ARM1176-JZFS(TM) | |
Debug / Release | พีซีบน Win* ผ่านทาง Debug / Release สคอมไพเลอร์ MSVC x64 | |
host | PC/เวิร์กสเตชันบน Win* / mingw64 / *nix ผ่านโฮสต์คอมไพเลอร์ | |
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 | RaspberryPi(R) Pico RP2040 พร้อมด้วย ARM(R) Cortex(R)-M0+ แบบคู่ | เอ็กซ์ |
rpi_pico2_rp2350 | RaspberryPi(R) Pico2 RP2350 พร้อมด้วย ARM(R) Cortex(R)-M33 แบบคู่ | เอ็กซ์ |
rx63n | เรเนซาส(R) RX630/RX631 | |
stm32f100 | STไมโครอิเล็กทรอนิกส์(R) STM32F100 ARM(R) Cortex(R)-M3 | เอ็กซ์ |
stm32f407 | STไมโครอิเล็กทรอนิกส์(R) STM32F407 ARM(R) Cortex(R)-M4F | |
stm32f429 | STไมโครอิเล็กทรอนิกส์(R) STM32F429 ARM(R) Cortex(R)-M4F | |
stm32f446 | STไมโครอิเล็กทรอนิกส์(R) STM32F446 ARM(R) Cortex(R)-M4F | |
stm32h7a3 | STไมโครอิเล็กทรอนิกส์(R) STM32H7A3 ARM(R) Cortex(R)-M7 | |
stm32l100c | STไมโครอิเล็กทรอนิกส์(R) STM32L100 ARM(R) Cortex(R)-M3 | เอ็กซ์ |
stm32l152 | STไมโครอิเล็กทรอนิกส์(R) STM32L152 ARM(R) Cortex(R)-M3 | |
stm32l432 | STไมโครอิเล็กทรอนิกส์(R) STM32L432 ARM(R) Cortex(R)-M4F | เอ็กซ์ |
v850es_fx2 | Renesas(R) อิเล็กทรอนิกส์ V850es/Fx2 upd703231 | |
wch_ch32v307 | WCH CH32v307 บอร์ด RISC-V | |
wch_ch32v307_llvm | บอร์ด WCH CH32v307 RISC-V (แต่ใช้ toolchain LLVM) | |
x86_64-w64-mingw32 | พีซีบน Win* / mingw64 ผ่านคอมไพเลอร์ GNU/GCC x86_x64 | |
xtensa32 | เอสเพรสซิฟ (XTENSA) NodeMCU ESP32 | เอ็กซ์ |
ในตารางนี้ *(เขียงหั่นขนม) หมายความว่าบอร์ด (หรือบางเวอร์ชันของบอร์ด) สามารถนำไปใช้กับเขียงหั่นขนมทั่วไปได้อย่างง่ายดาย อาจต้องมีการบัดกรี/ติดตั้งหมุดส่วนหัวด้วยตนเองที่ตรงไปตรงมามาก
วิธีที่ง่ายที่สุดในการเริ่มต้นใช้งานแอปพลิเคชันอ้างอิงโดยใช้หนึ่งในบอร์ดที่รองรับ เช่น avr
(ARDUINO) หรือ bcm2835_raspi_b
(RaspberryPi ZERO) หรือ am335x
(BeagleBoneBlack) เป็นต้น แอปพลิเคชันอ้างอิงสามารถพบได้ในไดเรกทอรี ref_app และไดเรกทอรีย่อย .
แอปพลิเคชันอ้างอิงใช้ระบบการพัฒนาข้ามสายและการสร้างได้รับการสนับสนุนบน:
*nix
สร้างเครื่องมือร่วมกับ Bash/GNUmake (สคริปต์ทุบตี) บน LINUX/MacOS*nix
-like สร้างเครื่องมือบน Win*
ร่วมกับสคริปต์แบตช์หรือ Microsoft(R) Visual Studio(R) ผ่าน Makefile ภายนอกWin*
เมื่อสร้างเสร็จเรียบร้อยแล้ว อาร์ติแฟกต์ผลลัพธ์ซึ่งรวมถึงไฟล์ HEX (เช่น ref_app.hex
) ไฟล์แมป รายงานขนาด ฯลฯ จะพร้อมใช้งานในไดเร็กทอรี bin
เพื่อเริ่มต้นใช้งานแอปพลิเคชันอ้างอิงบน *nix
target avr
) ที่คุณต้องการสร้างbuild.sh
ด้วยคำสั่ง: ./target/build/build.sh avr rebuild
avr rebuild
ซึ่งต่อมาจะสร้างโซลูชันทั้งหมดใหม่สำหรับ target avr
*nix
ให้รัน sudo apt install gcc-avr avr-libc
*nix
สำหรับ target avr
ตอนนี้เราจะยกตัวอย่างวิธีการสร้างแอปพลิเคชันอ้างอิงบนเชลล์คำสั่งใน *nix
สำหรับ target avr
ระบบเป้าหมายนี้ประกอบด้วย บอร์ด ที่รองรับ 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
*nix
สำหรับ target stm32f446
ตอนนี้เราจะยกตัวอย่างวิธีการสร้างแอปพลิเคชันอ้างอิงบนเชลล์คำสั่งใน *nix
สำหรับเป้าหมาย ARM(R) ตัวอย่างเช่น พิจารณา target stm32f446
สามารถใช้บอร์ด NUCLEO-F446RE จาก STMicroelectronics(R) ได้อย่างสะดวก
ติดตั้ง 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) ตัวอย่างเช่น พิจารณา target stm32f446
สามารถใช้บอร์ด NUCLEO-F446RE จาก STMicroelectronics(R) ได้อย่างสะดวก
โคลนหรือรับพื้นที่เก็บข้อมูล ckormanyos/real-time-cpp
GNUmake เวอร์ชันเริ่มต้น 3.81 บน MacOS สามารถใช้งานได้ (ตอนนี้) แล้ว ไฟล์ make ที่ใช้ในที่เก็บนี้ได้รับการทำให้เข้ากันได้กับมัน สำหรับข้อมูลความเป็นมา โปรดดูฉบับที่ 273 ด้วย
สร้างเป้าหมายด้วยการเรียกด้วยตนเองโดยตรงเพื่อ make
.
cd real-time-cpp
cd ref_app
make -f target/app/make/app_make.gmk rebuild TGT=stm32f446
หากจำเป็นต้องใช้ toolchain จะต้องติดตั้งหรือดึงข้อมูลก่อนที่จะสร้างเป้าหมายของแอปพลิเคชันอ้างอิง
คุณสามารถขอรับผ่าน wget
(หรือติดตั้งเพิ่มเติม) ห่วงโซ่เครื่องมือ gcc-arm-none-eabi
หากจำเป็น ในกรณีนี้ ฉันพบว่ามันสะดวกที่จะใช้ gcc-arm-none-eabi
ที่ทันสมัยสำหรับ MacOS ซึ่งสามารถพบได้ที่การดาวน์โหลด Arm GNU Toolchain
สามารถดึง toolchain 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: ดึงข้อมูล tarball ของ toolchain ด้วย wget
แกะมันออกและเพิ่ม bin
-directory ของคอมไพเลอร์ลงในพาธที่เรียกทำงานได้ของเชลล์
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: เลือก echo
PATH
เพื่อตรวจสอบเส้นทางอย่างรวดเร็ว นอกจากนี้ยังอาจเป็นประโยชน์ในการสืบค้นเวอร์ชันของ arm-non-eabi-g++
สิ่งนี้คาดว่าจะตรวจสอบว่า toolchain ถูกเพิ่มไปยัง 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*
ดังที่อธิบายไว้ในรายละเอียดสองสามย่อหน้าด้านล่างref_app.sln
ในไดเร็กทอรี ref_app บิลด์ ref_app
ใน Microsoft(R) VisualStudio(R) ใช้งานการพัฒนาข้ามสายอย่างหนักโดยใช้เวิร์กสเปซโปรเจ็กต์ประเภท External Makefile GNUmake ถูกเรียกใช้ผ่านแบตช์ไฟล์ในกระบวนการสร้าง ต่อมาจะทำงานร่วมกับ Makefiles หลายตัว
หากต้องการสร้างเป้าหมาย ref_app
ใดๆ นอกเหนือจาก Debug
หรือ Release
สำหรับ Win32 จำเป็นต้องใช้ cross-compiler (GNU/GCC cross-compiler) ดูข้อความด้านล่างสำหรับรายละเอียดเพิ่มเติม
คอมไพเลอร์ข้าม GNU/GCC ที่ทำงานบน Win*
สำหรับแอปพลิเคชันอ้างอิงบน VisualStudio(R) สามารถพบได้ในที่เก็บ toolchains , ckormanyos/real-time-cpp-toolchains พื้นที่เก็บข้อมูล toolchains มีคำแนะนำโดยละเอียดเกี่ยวกับการติดตั้ง การย้าย และการใช้คอมไพเลอร์ GNU/GCC ที่พอร์ตเหล่านี้
หมายเหตุเกี่ยวกับ GNUmake สำหรับ Win*
: GNUmake ที่สามารถใช้กับ Win*
สามารถพบได้ในที่เก็บ ckormanyos/make-4.2.1-msvc-build หากต้องการ ให้โคลนหรือรับโค้ดของที่เก็บนี้ สร้าง make-4.2.1
ในการกำหนดค่า x64
Release
ด้วย MSVC (เช่น VC 14.2 หรือใหม่กว่า Community Edition ก็ใช้ได้)
CMake ข้ามสภาพแวดล้อมสามารถสร้างแอปพลิเคชันอ้างอิงได้ เพื่อจุดประสงค์นี้ ไฟล์ CMake ได้ถูกสร้างขึ้นสำหรับแต่ละเป้าหมายที่รองรับ
ตัวอย่างเช่น พิจารณาสร้างแอปพลิเคชันอ้างอิงสำหรับเป้าหมาย avr
ด้วย CMake รูปแบบดังแสดงด้านล่าง
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
ในตอนนี้ เราจะพิจารณา เช่น การสร้างแอปพลิเคชันอ้างอิงสำหรับหนึ่งในเป้าหมาย ARM(R) ที่รองรับด้วย CMake รูปแบบดังแสดงด้านล่าง ในกรณีนี้ เราจำเป็นต้องระบุตัวเลือกการสร้างดังต่อไปนี้:
-DTRIPLE=avr -DTARGET=avr
สลับตัวเลือกเหล่านี้เป็นตัวเลือกสำหรับเป้าหมายที่ใช้ stm32f446
ARM(R) ที่กำลังสร้าง
-DTRIPLE=arm-none-eabi -DTARGET=stm32f446
มาอธิบายคำสั่งทั้งหมดให้ชัดเจนเพื่อรันบิลด์ CMake สำหรับ stm32f446
(เช่น ST Microelectronics(R) STM32F446 ARM(R) ที่มี Cortex(R)-M4F)
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
มาตรฐานเพื่อสร้าง การสร้างด้วย CMake สำหรับ x86_64-w64-mingw32
หรือ host
จาก MSYS, Cygwin หรือเชลล์หรือคอนโซล *nix
ที่คล้ายกันก็ควรใช้งานได้เช่นกัน
ลำดับคำสั่งต่อไปนี้จะสร้างสำหรับ host
ดั้งเดิมบนเชลล์หรือคอนโซลที่มีลักษณะคล้าย *nix
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 และไดเร็กทอรีย่อย มีไดเร็กทอรีย่อยแต่ละไดเร็กทอรีสำหรับระบบไมโครคอนโทรลเลอร์เป้าหมายที่รองรับแต่ละระบบ
การกำหนดค่า MICROCHIP(R) [อดีต ATMEL(R)] AVR(R) ที่เรียกว่า target avr
ทำงานบนบอร์ดที่เข้ากันได้กับ ARDUINO(R) แบบคลาสสิก โปรแกรมสลับไฟ LED สีเหลืองบน portb.5
การกำหนดค่า MICROCHIP(R) [เดิมคือ ATMEL(R)] ATmega4809 ที่เรียกว่า target atmega4809
ทำงานบนบอร์ด ARDUINO(R) ทุกตัวที่เข้ากันได้ซึ่งมีการโอเวอร์คล็อกด้วยตัวสะท้อนเสียงภายในที่ porte.2
(เช่น D5
)
การใช้งาน Espressif (XTENSA) NodeMCU ESP32 ใช้ชุดย่อยของ Espressif SDK เพื่อรันแอปพลิเคชันอ้างอิงด้วยงาน OS เดียวบน 1 คอร์โดยเฉพาะ
การกำหนดค่า ARM(R) Cortex(R)-M0+ ของบอร์ด NXP(R) OM13093 LPC11C24 ที่เรียกว่า "target lpc11c24" จะสลับ LED บน port0.8
การกำหนดค่า ARM(R) Cortex(R)-M3 (เรียกว่า target stm32f100
) ทำงานบนบอร์ด STM32VL-DISCOVERY ที่มีจำหน่ายทั่วไปจาก ST Microelectronics(R) โปรแกรมสลับไฟ LED สีฟ้าบน portc.8
การกำหนดค่า ARM(R) Cortex(R)-M3 ครั้งที่สอง (เรียกว่า target stm32l100c
) ทำงานบนบอร์ด STM32L100-DISCOVERY ที่มีจำหน่ายทั่วไปจาก ST Microelectronics(R) โปรแกรมสลับไฟ LED สีฟ้าบน portc.8
การกำหนดค่า ARM(R) Cortex(R)-M3 ตัวที่สาม (เรียกว่า target stm32l152
) ทำงานบนบอร์ด STM32L152C-DISCOVERY ที่มีจำหน่ายทั่วไปจาก ST Microelectronics(R) โปรแกรมสลับไฟ LED สีฟ้าบน portb.6
การกำหนดค่า ARM(R) Cortex(R)-M4F แรก (เรียกว่า target stm32f407
) ทำงานบนบอร์ด STM32F4-DISCOVERY ที่มีจำหน่ายทั่วไปจาก ST Microelectronics(R) โปรแกรมสลับไฟ LED สีฟ้าบน portd.15
การกำหนดค่า ARM(R) Cortex(R)-M4F อีกรูปแบบหนึ่ง (เรียกว่า target stm32f446
) ทำงานบนบอร์ด STM32F446-NUCLEO-64 ที่มีจำหน่ายทั่วไปจาก ST Microelectronics(R) โปรแกรมสลับไฟ LED สีเขียวบน porta.5
มีไฟล์ตรวจแก้จุดบกพร่องโอโซนให้กับระบบนี้สำหรับผู้ที่สนใจ
การกำหนดค่า ARM(R) Cortex(R)-M7 ครั้งแรก (เรียกว่า target stm32h7a3
) ทำงานบนบอร์ด STM32H7A3-NUCLEO-144 ที่มีจำหน่ายทั่วไปจาก ST Microelectronics(R) โปรแกรมสลับไฟ LED สีเขียวบน portb.0
การกำหนดค่า ARM(R) A8 (เรียกว่า target am335x
) ทำงานบนบอร์ด BeagleBone (รุ่นสีดำ) สำหรับรุ่นสีขาวนาฬิกา CPU จะต้องลดลงจาก *nix
distro ใดๆ บนบอร์ด โปรแกรมของเราได้รับการออกแบบให้บูต BeagleBone จากไฟล์ไบนารีดิบที่เรียกว่า MLO ที่จัดเก็บไว้ในไมโครการ์ด FAT32 SDHC ไฟล์ไบนารี่มีส่วนหัวการบูตพิเศษที่ประกอบด้วยจำนวนเต็ม 32 บิตสองตัว โปรแกรมถูกโหลดจากการ์ด SD ลงในหน่วยความจำ RAM และดำเนินการในภายหลัง เมื่อเปิด BeagleBone black จะต้องกดปุ่มบูต (S2) ขณะเปิดเครื่องบอร์ด โปรแกรมจะสลับ LED ของผู้ใช้คนแรก (LED1 บน port1.21
)
การกำหนดค่า ARM(R) 1176-JZF-S (เรียกว่า target bcm2835_raspi_b
) ทำงานบนตัวควบคุมแกนเดียว RaspberryPi(R) Zero (PiZero) โปรเจ็กต์นี้สร้างโปรแกรม Bare Metal สำหรับ PiZero โปรแกรมนี้ทำงานโดยอิสระจาก *nix
distro ใดๆ บนบอร์ด โปรแกรมของเราได้รับการออกแบบให้บูต PiZero จากไฟล์ไบนารีดิบ ไฟล์ไบนารีดิบเรียกว่า kernel.img และจัดเก็บไว้ในไมโครการ์ด FAT32 SDHC โปรแกรม objcopy สามารถใช้เพื่อแยกไบนารีดิบจากไฟล์ ELF โดยใช้แฟล็กเอาต์พุต -O binary
ไฟล์ kernel.img จะถูกจัดเก็บไว้ในการ์ด SD พร้อมกับไฟล์อื่นๆ อีกสามไฟล์: bootcode.bin, start.elf และ (ตัวเลือกเสริม) config.txt ซึ่งทั้งหมดนี้อธิบายไว้บนอินเทอร์เน็ต ชุดเนื้อหาการบูต PiZero ที่สมบูรณ์สำหรับการ์ด SD ที่ใช้งานแอปพลิเคชันอ้างอิง Bare Metal จะรวมอยู่ในที่เก็บนี้ โปรแกรมสลับไฟ LED แสดงสถานะ GPIO ที่ดัชนี GPIO 0x47
การกำหนดค่าเป้าหมาย rpi_pico_rp2040
ใช้ RaspberryPi(R) Pico RP2040 พร้อมด้วย ARM(R) Cortex(R)-M0+ แบบดูอัลคอร์ที่โอเวอร์คล็อกที่ Blinky_Pico_dual_core_nosdk
การกำหนดค่าเป้าหมาย rpi_pico2_rp2350
ใช้ RaspberryPi(R) Pico2 RP2350 พร้อมด้วย ARM(R) Cortex(R)-M33 แบบดูอัลคอร์ที่โอเวอร์คล็อกที่ 2040
ในทำนองเดียวกันการเริ่มต้นใช้งานแบบ dual-core ได้รับการบุกเบิกโดยความพยายามที่เปิดเผยใน repo Blinky_Pico2_dual_core_nosdk
ที่ทันสมัย
Target v850es_fx2
ใช้คอร์ Renesas(R) V850es/Fx2 แบบคลาสสิก ใช้อนุพันธ์ของไมโครคอนโทรลเลอร์ upd703231 บนชุดเริ่มต้น F-Line Drive It
เป้าหมาย riscvfe310
ใช้ SiFive RISC-V FE310 SoC บนบอร์ด Red Thing Plus ที่มีจำหน่ายในท้องตลาดของ Spark Fun ไฟ LED สีฟ้าบนพอร์ต GPIO0.5
ถูกสลับ
การดัดแปลงสำหรับ wch_ch32v307
ทำงานบนบอร์ด WCH CH32v307 ใช้ไมโครคอนโทรลเลอร์ RISC-V CH32v307 จาก Nanjing Qinheng Microelectronics Co., Ltd. LED1 สีน้ำเงินที่เชื่อมต่อด้วยตนเองกับพอร์ต GPIOC.0
ผ่านการเชื่อมต่อแบบใช้สายช่วยให้สลับการกะพริบได้ การดัดแปลงที่คล้ายกัน wch_ch32v307_llvm
นั้นโดยพื้นฐานแล้วจะเหมือนกันยกเว้นว่าจะใช้ toolchain LLVM RISC-V แทน GCC RISC-V
เป้าหมาย nxp_imxrt1062
ทำงานบนบอร์ด Teensy 4.0 จาก Spark Fun ไฟ LED ผู้ใช้สีส้มถูกสลับ
สำหรับบอร์ดอื่นๆ ที่เข้ากันได้ โปรดติดต่อฉันโดยตรงหรือส่งปัญหาเพื่อขอรับการสนับสนุนสำหรับระบบเป้าหมายที่คุณต้องการ
เกณฑ์มาตรฐานเป็นเครื่องมือแบบพกพาที่ปรับขนาดได้สำหรับการระบุประสิทธิภาพและระดับประสิทธิภาพของไมโครคอนโทรลเลอร์ สำหรับข้อมูลเพิ่มเติม โปรดดูข้อมูลโดยละเอียดในหน้าการวัดประสิทธิภาพ
โปรเจ็กต์ใน Repo นี้ได้รับการตั้งโปรแกรม OS-less ในโหมดเปลือยเปล่าแบบ Bare-Metal โดยใช้โค้ดเริ่มต้นที่เขียนเอง ไม่มีการใช้ไลบรารีภายนอกนอกเหนือจาก C++ ดั้งเดิมและไลบรารีมาตรฐานของตัวเอง
ตัวอย่างเช่น พิจารณา BeagleBone Black Edition (BBB หรือที่รู้จักในชื่อ target am335x
) ซึ่งเป็นหนึ่งในระบบเป้าหมายยอดนิยมหลายระบบที่รองรับในพื้นที่เก็บข้อมูลนี้ โปรเจ็กต์บนบอร์ดนี้บู๊ตจากไฟล์อิมเมจไบนารี MLO บนการ์ด SD เช่นเดียวกับโปรเจ็กต์อื่นๆ ทั้งหมดในที่เก็บนี้ โปรเจ็กต์ BBB ดำเนินการการกำหนดค่าเริ่มต้นแบบคงที่และการเตรียมใช้งานชิปของตัวเอง (กล่าวคือ ในกรณีนี้ การกำหนดค่าเริ่มต้นชิปของโปรเซสเซอร์ ARM(R) 8 AM335x) หลังจากการกำหนดค่าเริ่มต้น โปรเจ็กต์ BBB จะข้ามไปที่ main()
ซึ่งจะเตรียมข้อมูลเบื้องต้นให้กับ am335x
MCAL และเริ่มตัวกำหนดตารางเวลามัลติทาสกิ้งที่เราเขียนเอง
ภาพด้านล่างแสดงให้เห็นการทำงานของ BeagleBone Black Edition แบบ Bare Metal ในโหมดการทำงานแบบ Bare-Metal นี้ ไม่มีการรัน *nix
OS บน BBB, ไม่มีแป้นพิมพ์, ไม่มีเมาส์, ไม่มีจอภาพ, ไม่มีอินเทอร์เฟซการแก้ไขข้อบกพร่อง และไม่มีตัวจำลอง
ไมโครคอนโทรลเลอร์บนบอร์ดกำลังดำเนินการตามเกณฑ์มาตรฐานข้อใดข้อหนึ่งที่กล่าวถึงข้างต้น LED สำหรับผู้ใช้ตัวแรกจะเปิดใช้งานอยู่ที่ port1.21
ในการทำงานหลายอย่างพร้อมกัน และออสซิลโลสโคปจะบันทึกการวัดแบบเรียลไทม์ของสัญญาณเวลาของเกณฑ์มาตรฐานบนพอร์ต I/O ดิจิทัล port1.15
พินส่วนหัว P8.15
ของ BBB
ป้ายสถานะการ build แสดงถึงสถานะของการสร้างและการทดสอบ CI ทุกคืน
avr-gcc
ที่ทันสมัย repo ckormanyos/avr-gcc-build สร้าง avr-gcc
toolchains ที่ทันสมัยสำหรับ x86_64-linux-gnu
และ x86_64-w64-mingw32
สคริปต์ Shell และ YAML สร้าง avr-gcc
โดยตรงจากแหล่งที่มาบน GHA runner นอกจากนี้ GitHub-releases เป็นครั้งคราวยังมี avr-gcc
toolchains ที่สร้างไว้ล่วงหน้าสำหรับ x86_64-linux-gnu
และ x86_64-w64-mingw32
repo นี้เป็นสถานที่ที่ดีเยี่ยมในการเรียนรู้วิธีสร้าง toolchain avr-gcc
ของคุณเองจากแหล่งที่มา เชลล์และสคริปต์ YAML ที่ตรงไปตรงมาและอธิบายได้ดีนั้นง่ายต่อการเข้าใจ ใช้งาน หรือปรับเปลี่ยน
ตามที่กล่าวไว้ข้างต้น ขอบเขตของ toolchains แบบฝังที่ละเอียดและกว้างกว่านั้นมีการอธิบายไว้ใน ckormanyos/real-time-cpp-toolchains ซึ่งรวมถึง toolchain avr-gcc
ที่กล่าวถึงข้างต้น และอื่นๆ (บางอันหาได้ยากจากที่อื่น)
แอปพลิเคชันอ้างอิงและตัวอย่าง (รวมถึงตัวอย่างโค้ด) สามารถสร้างได้ด้วยคอมไพเลอร์ GNU/GCC และ GNUmake บน *nix
คอมไพเลอร์ข้าม GNU/GCC และ GNUmake บน *nix
ถือว่าพร้อมใช้งานในพาธปฏิบัติการมาตรฐาน เช่น หลังจากแนวทางปฏิบัติการติดตั้ง get-install มาตรฐาน
คอมไพเลอร์ข้าม GNU/GCC ที่พอร์ตบางส่วนสำหรับ Win*
มีอยู่ในที่เก็บ toolchains , real-time-cpp-toolchains สามารถใช้กับการกำหนดค่าโซลูชันไมโครคอนโทรลเลอร์ในแอปพลิเคชันอ้างอิงเมื่อพัฒนา/สร้างภายใน Microsoft(R) VisualStudio(R) เครื่องมือ GNU อื่นๆ เช่น GNUmake, SED ฯลฯ ได้รับการย้ายและสามารถพบได้ที่นั่น สิ่งเหล่านี้ใช้ใน Makefiles เมื่อสร้างโปรเจ็กต์แบบฝังข้าม เช่น ref_app
บน Win*
ในแอปพลิเคชันอ้างอิงบน Win*
Makefiles จะใช้ตำแหน่งเริ่มต้นที่กำหนดด้วยตนเองสำหรับเครื่องมือที่เกี่ยวข้องและกลุ่มเครื่องมือ GNU/GCC ตำแหน่งเริ่มต้นของ toolchain บน Win*
คือ . ./ref_app/tools/Util/msys64/usr/local
Util/msys64/usr/local ตำแหน่ง Toolchain นี้ได้รับแรงบันดาลใจจากระบบ msys2
/ mingw64
Toolchains ที่มีไว้สำหรับ cross MSVC/GCC builds บน Win*
ควรอยู่ที่นั่น Toolchains เหล่านี้ไม่ได้เป็นส่วนหนึ่งของพื้นที่เก็บข้อมูลนี้ และจำเป็นต้องได้รับ Toolchains เหล่านี้แยกต่างหากเมื่อใช้ Win*
builds ที่รองรับ เมื่อเลือกใช้ VisualStudio(R) Projects กับ CMD Batch
คำแนะนำโดยละเอียดเกี่ยวกับการรับและการใช้ toolchains สำหรับ cross MSVC/GCC builds บน Win*
มีอยู่ในที่เก็บข้อมูล real-time-cpp-toolchains คำแนะนำเหล่านี้ให้คำแนะนำเกี่ยวกับการใช้ toolchains เหล่านี้เมื่อเลือกโครงการ Microsoft(R) VisualStudio(R) (ผ่านทาง MSVC/ Win*
ปกติที่อธิบายไว้ข้างต้น -way) เพื่อสร้างแอปพลิเคชันอ้างอิง
พอร์ต GNU/GCC (หรือคอมไพเลอร์อื่นๆ) ที่มีการรับรู้และการยึดถือในระดับสูงของ C++ 14 (หรือสูงกว่า) เช่น GCC 5 ถึง 13 (โดยทั่วไปแล้วจะมีข้อได้เปรียบมากกว่า) หรือ MSVC 14.2 หรือสูงกว่านั้นเป็นสิ่งจำเป็นสำหรับการสร้างข้อมูลอ้างอิง แอปพลิเคชัน (และตัวอย่างและข้อมูลโค้ด)
ตัวอย่างโค้ดบางส่วนสาธิตองค์ประกอบภาษาไม่เพียงแต่จาก C++14 เท่านั้น แต่ยังรวมถึงจาก C++17, 20, 23 และอื่นๆ ด้วย คอมไพเลอร์ที่รองรับ C++17 หรือแม้กระทั่งรองรับ C++20, 23 (เช่น GCC 13, clang 15, MSVC 14.3 หรือสูงกว่า) จึงสามารถเป็นประโยชน์ต่อความสำเร็จกับตัวอย่างโค้ด ทั้งหมด ได้
<chrono>
, <ratio>
และลักษณะภายในบางส่วน-ส่วนหัวได้รับอนุญาตภายใต้ GNU General Public License เวอร์ชัน 3 หรือสูงกว่า