هذا هو الكود المصاحب لكتاب CM Kormanyos، Real-Time C++: Efficient Object-Oriented and Template Microcontroller Programming، الإصدار الرابع (Springer، Heidelberg، 2021) ISBN 9783662629956.
يحتوي هذا المستودع على عدة أجزاء رئيسية.
ref_app
موجود في ref_app. وهذا يشمل أيضا المعايير. يمكن العثور على المترجمين المشتركين لـ GNU/GCC والعديد من الأدوات الإضافية التي تعمل على Win*
، والمطلوبة اختياريًا لبعض الإصدارات كما هو موضح أدناه، في مستودع ckormanyos/real-time-cpp-toolchains ذي الصلة.
يقوم التطبيق المرجعي بالتمهيد باستخدام رمز بدء تشغيل صغير ثم يقوم بعد ذلك بتهيئة طبقة تجريد متحكم دقيق (MCAL). يتم بعد ذلك تمرير التحكم إلى برنامج جدولة متعدد المهام البسيط الذي يدير تطبيق LED، ويستدعي مهمة مرجعية دورية ويخدم هيئة المراقبة.
يقوم تطبيق LED بتبديل مؤشر LED الخاص بالمستخدم بتردد
التطبيق المرجعي متوافق مع C++ 14 و17 و20 و23 وما بعدها.
يتم تنفيذ البرنامج التطبيقي مرة واحدة واستخدامه بشكل موحد على كل هدف مدعوم في ref_app. تنشأ الاختلافات بين الأهداف الفردية فقط في طبقات البرامج السفلية المتعلقة بتفاصيل بدء التشغيل/MCAL الخاصة بالشريحة واللوحة الخاصة.
وبهذه الطريقة يعرض المشروع مستوى عال من قابلية النقل.
يدعم التطبيق المرجعي الأهداف التالية:
اسم الهدف (كما هو مستخدم في أمر البناء) | وصف الهدف | *(اللوح) |
---|---|---|
avr | رقاقة (R) [ATMEL(R) السابقة] AVR(R) ATmega328P | X |
atmega2560 | رقاقة (R) [ATMEL(R) السابقة] AVR(R) ATmega2560 | |
atmega4809 | رقاقة (R) [ATMEL(R) السابقة] AVR(R) ATmegax4809 | X |
am335x | بيجل بون مع تكساس إنسترومنتس (R) AM335x ARM(R) A8 | |
bcm2835_raspi_b | راسبيري باي (R) زيرو مع ARM1176-JZFS(TM) | |
Debug / Release | الكمبيوتر الشخصي على Win* عبر برنامج Debug / Release لبرنامج التحويل البرمجي MSVC x64 | |
host | الكمبيوتر الشخصي/محطة العمل على 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 | X |
riscvfe310 | SiFive RISC-V FE310 SoC | |
rl78 | رينيساس (R) RL78/G13 | |
rpi_pico_rp2040 | RaspberryPi(R) Pico RP2040 مع ذراع مزدوج (R) Cortex(R)-M0+ | X |
rpi_pico2_rp2350 | RaspberryPi(R) Pico2 RP2350 مع ذراع مزدوج (R) Cortex(R)-M33 | X |
rx63n | رينيساس (R) RX630/RX631 | |
stm32f100 | STMicroelectronics(R) STM32F100 ARM(R) اللحاء(R)-M3 | X |
stm32f407 | STMicroelectronics(R) STM32F407 ARM(R) اللحاء(R)-M4F | |
stm32f429 | STMicroelectronics(R) STM32F429 ARM(R) اللحاء(R)-M4F | |
stm32f446 | STMicroelectronics(R) STM32F446 ARM(R) اللحاء(R)-M4F | |
stm32h7a3 | ستميكروإلكترونيكس (R) STM32H7A3 الذراع (R) اللحاء (R) -M7 | |
stm32l100c | إس تي ميكروإلكترونيكس (R) STM32L100 ARM(R) اللحاء(R)-M3 | X |
stm32l152 | ستميكروإلكترونيكس(R) STM32L152 ARM(R) اللحاء(R)-M3 | |
stm32l432 | ستميكروإلكترونيكس (R) STM32L432 ARM (R) اللحاء (R) -M4F | X |
v850es_fx2 | رينيساس (R) للإلكترونيات V850es/Fx2 upd703231 | |
wch_ch32v307 | لوحة WCH CH32v307 RISC-V | |
wch_ch32v307_llvm | لوحة WCH CH32v307 RISC-V (ولكن باستخدام سلسلة أدوات LLVM) | |
x86_64-w64-mingw32 | جهاز كمبيوتر يعمل بنظام Win* / mingw64 عبر برنامج التحويل البرمجي GNU/GCC x86_x64 | |
xtensa32 | إسبريسيف (XTENSA) نوديمكو ESP32 | X |
في هذا الجدول، *(breadboard) تعني أن اللوحة (أو إصدارات معينة منها) يمكن استخدامها بسهولة مع لوحة تجارب مشتركة. قد يحتاج هذا إلى بعض اللحام/التركيب اليدوي المباشر للغاية لدبابيس الرأس.
من الأسهل البدء بالتطبيق المرجعي باستخدام إحدى اللوحات المدعومة، مثل avr
(ARDUINO) أو bcm2835_raspi_b
(RaspberryPi ZERO) أو am335x
(BeagleBoneBlack)، وما إلى ذلك. يمكن العثور على التطبيق المرجعي في الدليل ref_app وأدلته الفرعية .
يستخدم التطبيق المرجعي التطوير المتبادل ويتم دعم أنظمة البناء على:
*nix
يصنع الأدوات بالاشتراك مع Bash/GNUmake (bash script) على 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.
يمكن (الآن) استخدام الإصدار الافتراضي 3.81 من GNUmake على نظام MacOS. تم جعل ملفات الصنع المستخدمة في هذا المستودع متوافقة معه. وراجع لمزيد من المعلومات الخلفية العدد 273.
قم ببناء الهدف من خلال استدعاء يدوي مباشر make
.
cd real-time-cpp
cd ref_app
make -f target/app/make/app_make.gmk rebuild TGT=stm32f446
إذا كانت هناك حاجة إلى سلسلة الأدوات، فيجب تثبيتها أو استردادها قبل إنشاء هدف التطبيق المرجعي.
يمكنك الحصول على سلسلة أدوات gcc-arm-none-eabi
عبر wget
(أو تثبيتها بشكل اختياري) إذا لزم الأمر. في هذه الحالة، وجدت أنه من المناسب استخدام gcc-arm-none-eabi
الحديث لنظام التشغيل MacOS والذي يمكن العثور عليه في تنزيلات Arm GNU 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: قم بإحضار كرة القطران الخاصة بسلسلة الأدوات باستخدام wget
، وقم بفك ضغطها وإضافة دليل 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: echo
PATH
بشكل اختياري للتحقق السريع من المسار. قد يكون من المفيد أيضًا الاستعلام عن إصدار 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*
وقم بإعدادها (من مستودع ckormanyos/real-time-cpp-toolchains)، كما هو موضح بالتفصيل في بضع فقرات أدناه.ref_app.sln
في دليل ref_app. يستخدم إصدار ref_app
في Microsoft(R) VisualStudio(R) التطوير المتقاطع بكثافة باستخدام مساحة عمل مشروع من النوع External Makefile . يتم استدعاء GNUmake عبر ملف دفعي في عملية الإنشاء. يتم تشغيله لاحقًا مع العديد من ملفات Makefiles.
لإنشاء أي هدف ref_app
بخلاف Debug
أو Release
for Win32، يلزم وجود مترجم مشترك (GNU/GCC cross compiler). انظر النص أدناه للحصول على تفاصيل إضافية.
يمكن العثور على مترجمات GNU/GCC التي تعمل على Win*
والمخصصة للتطبيق المرجعي على VisualStudio(R) في مستودع سلاسل الأدوات ، ckormanyos/real-time-cpp-toolchains. يحتوي مستودع سلاسل الأدوات على تعليمات مفصلة حول تثبيت ونقل واستخدام مترجمات GNU/GCC المنقولة.
ملاحظة حول GNUmake for Win*
: يمكن العثور على GNUmake الذي يمكن استخدامه على Win*
في مستودع ckormanyos/make-4.2.1-msvc-build. إذا رغبت في ذلك، قم باستنساخ أو الحصول على رمز هذا المستودع. أنشئ make-4.2.1
في تكوين Release
x64
الخاص به باستخدام MSVC (على سبيل المثال، VC 14.2 أو إصدار أحدث، إصدار المجتمع موافق).
يمكن لـ Cross-Environment 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 لتشغيل التطبيق المرجعي بمهمة نظام تشغيل واحدة حصريًا على أحد مراكزه.
يقوم تكوين لوحة NXP(R) OM13093 LPC11C24 ARM(R) Cortex(R)-M0+ المسمى "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 (الإصدار الأسود). بالنسبة للإصدار الأبيض، يجب تقليل ساعة وحدة المعالجة المركزية من *nix
الموجودة على اللوحة. تم تصميم برنامجنا لتشغيل BeagleBone من ملف ثنائي خام يسمى MLO مخزن على بطاقة microcard FAT32 SDHC. يتضمن الملف الثنائي رأس تمهيد خاص يتكون من عددين صحيحين 32 بت. يتم تحميل البرنامج من بطاقة SD إلى ذاكرة الوصول العشوائي (RAM) ويتم تنفيذه لاحقًا. عند تشغيل BeagleBone باللون الأسود، يجب الضغط على زر التمهيد (S2) أثناء تشغيل اللوحة. يقوم البرنامج بتبديل مؤشر LED الخاص بالمستخدم الأول (LED1 على port1.21
).
يعمل تكوين ARM(R) 1176-JZF-S (يسمى target bcm2835_raspi_b
) على وحدة التحكم أحادية النواة RaspberryPi(R) Zero (PiZero). يقوم هذا المشروع بإنشاء برنامج معدني لـ PiZero. يعمل هذا البرنامج بشكل مستقل عن أي نوع من توزيعات *nix
الموجودة على اللوحة. تم تصميم برنامجنا لتشغيل PiZero من ملف ثنائي خام. يُسمى الملف الثنائي الخام kernel.img ويتم تخزينه على بطاقة microcard FAT32 SDHC. يمكن استخدام برنامج objcopy لاستخراج الملف الثنائي الخام من ملف ELF باستخدام إشارات الإخراج -O binary
. يتم تخزين ملف kernel.img على بطاقة SD مع ثلاثة ملفات أخرى: bootcode.bin، وstart.elf، وconfig.txt (اختياري)، وكلها موصوفة على الإنترنت. تم تضمين مجموعة كاملة من محتويات التمهيد PiZero لبطاقة SD التي تقوم بتشغيل التطبيق المرجعي المعدني في هذا الريبو. يقوم البرنامج بتبديل مؤشر LED الخاص بحالة GPIO عند مؤشر GPIO 0x47
.
يستخدم التكوين المستهدف rpi_pico_rp2040
RaspberryPi(R) Pico RP2040 مع ثنائي النواة ARM(R) Cortex(R)-M0+ مسجلاً في Blinky_Pico_dual_core_nosdk
repo.
يستخدم التكوين المستهدف rpi_pico2_rp2350
RaspberryPi(R) Pico2 RP2350 مع ثنائي النواة ARM(R) Cortex(R)-M33 مسجلاً في 2040
. وبالمثل، كانت الشركة الناشئة ثنائية النواة رائدة من خلال الجهود التي تم الكشف عنها في مستودع Blinky_Pico2_dual_core_nosdk
المحدث.
يستخدم الهدف 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
هو نفسه بشكل أساسي باستثناء أنه يستخدم سلسلة أدوات LLVM RISC-V بدلاً من مجلس التعاون الخليجي RISC-V.
يعمل الهدف nxp_imxrt1062
على لوحة Teensy 4.0 من Spark Fun. تم تبديل مؤشر LED الخاص بالمستخدم باللون البرتقالي.
بالنسبة للوحات الأخرى المتوافقة، لا تتردد في الاتصال بي مباشرة أو إرسال مشكلة تطلب الدعم للنظام المستهدف المطلوب.
توفر المعايير وسائل محمولة وقابلة للتطوير لتحديد الأداء وفئة أداء وحدة التحكم الدقيقة. لمزيد من المعلومات، راجع المعلومات التفصيلية في صفحات المعايير.
تمت برمجة المشاريع الموجودة في هذا الريبو بدون نظام تشغيل في الوضع العاري والمعدني باستخدام رمز بدء التشغيل المكتوب ذاتيًا. لا يتم استخدام أي مكتبات خارجية غير لغة C++ الأصلية والمكتبات القياسية الخاصة بها.
خذ بعين الاعتبار، على سبيل المثال، BeagleBone Black Edition (BBB، المعروف أيضًا باسم target am335x
) والذي يعد واحدًا من العديد من أنظمة الأهداف الشائعة المدعومة في هذا المستودع. يتم تشغيل المشاريع الموجودة على هذه اللوحة من ملف الصورة الثنائي MLO الموجود على بطاقة SD. مثل جميع المشاريع الأخرى في هذا المستودع، تقوم مشاريع BBB بإجراء التهيئة الثابتة الخاصة بها وتهيئة الرقاقة (أي، في هذه الحالة بالذات، تهيئة الرقاقة لمعالج ARM(R) 8 AM335x). مشاريع BBB، بعد التهيئة، تنتقل بعد ذلك إلى main()
الذي يقوم بتهيئة am335x
MCAL ويبدأ برنامج جدولة المهام المتعددة المكتوب ذاتيًا.
الصورة أدناه توضح إصدار BeagleBone Black Edition المعدني العاري أثناء العمل. في وضع التشغيل المعدني هذا، لا يوجد نظام تشغيل *nix
قيد التشغيل على BBB، ولا لوحة مفاتيح، ولا ماوس، ولا شاشة، ولا واجهة تصحيح، ولا محاكي.
يقوم المتحكم الدقيق الموجود على اللوحة بتنفيذ أحد المعايير المذكورة أعلاه بشكل دوري. يتم تبديل مؤشر LED الخاص بالمستخدم الأول على port1.21
في عملية تعدد المهام ويلتقط راسم الذبذبات قياسًا في الوقت الفعلي لإشارة الوقت المعيارية على port1.15
الإدخال/الإخراج الرقمي 1.15 ودبوس الرأس P8.15
لـ BBB.
تمثل شارات حالة البناء حالة عمليات إنشاء واختبار CI الليلية.
avr-gcc
الحديثة ينشئ repo ckormanyos/avr-gcc-build سلاسل أدوات avr-gcc
محدثة لـ x86_64-linux-gnu
و x86_64-w64-mingw32
. تقوم نصوص Shell وYAML بإنشاء avr-gcc
مباشرة من المصدر على مشغل (مشغلات) GHA. بالإضافة إلى ذلك، توفر إصدارات GitHub العرضية سلاسل أدوات avr-gcc
مُصممة مسبقًا لـ x86_64-linux-gnu
و x86_64-w64-mingw32
.
يعد هذا الريبو مكانًا رائعًا لتعلم كيفية إنشاء سلسلة أدوات avr-gcc
الخاصة بك من المصدر. من السهل فهم أو استخدام أو تكييف نصوص shell وYAML الواضحة والموصوفة جيدًا.
كما هو مذكور أعلاه، تم وصف نطاق أكثر تفصيلاً وأوسع لسلاسل الأدوات المضمنة في ckormanyos/real-time-cpp-toolchains. وتشمل هذه الأدوات سلسلة أدوات avr-gcc
المذكورة أعلاه بالإضافة إلى غيرها (بعضها يصعب العثور عليه في أي مكان آخر).
يمكن إنشاء التطبيق المرجعي والأمثلة (أيضًا مقتطفات التعليمات البرمجية) باستخدام مترجمي GNU/GCC وGNUmake على *nix
. من المفترض أن تكون المترجمات المتقاطعة لـ GNU/GCC وGNUmake on *nix
متاحة في المسار القابل للتنفيذ القياسي، كما هو الحال بعد ممارسات الحصول على التثبيت القياسية.
تتوفر بعض المترجمات المتقاطعة GNU/GCC المنقولة لـ Win*
في مستودع سلاسل الأدوات ، وسلاسل أدوات CPP في الوقت الحقيقي. يمكن استخدامها مع تكوينات حل وحدة التحكم الدقيقة في التطبيق المرجعي عند التطوير/الإنشاء داخل Microsoft(R) VisualStudio(R). تم نقل العديد من أدوات GNU الأخرى مثل GNUmake وSED وما إلى ذلك ويمكن العثور عليها هناك. يتم استخدامها في Makefiles عند إنشاء مشاريع مضمنة مثل ref_app
على Win*
.
في التطبيق المرجعي على Win*
، تستخدم ملفات Makefiles موقعًا افتراضيًا محددًا ذاتيًا للأدوات المعنية وسلاسل أدوات GNU/GCC. الموقع الافتراضي لسلسلة الأدوات على Win*
هو ./ref_app/tools/Util/msys64/usr/local
. موقع سلسلة الأدوات هذا مستوحى من نظام msys2
/ mingw64
.
يجب أن تكون سلاسل الأدوات المخصصة لأنظمة MSVC/GCC المبنية على Win*
موجودة هناك. سلاسل الأدوات هذه ليست جزءًا من هذا المستودع ومن الضروري الحصول على سلاسل الأدوات هذه بشكل منفصل عند استخدام إصدارات Win*
المدعومة عند استخدام مشاريع VisualStudio(R) مع CMD Batch بشكل اختياري.
تتوفر تعليمات تفصيلية حول الحصول على سلاسل الأدوات واستخدامها لأنظمة MSVC/GCC المبنية على Win*
في مستودع سلاسل الأدوات cpp-toolchains في الوقت الحقيقي. توفر هذه الإرشادات إرشادات حول استخدام سلاسل الأدوات هذه عند تحديد مشروع Microsoft(R) VisualStudio(R) (عبر الطريقة المعتادة MSVC/ Win*
-way) لإنشاء التطبيق المرجعي.
مطلوب منفذ GNU/GCC (أو مترجم آخر) بمستوى عالٍ من الوعي والالتزام بـ C++ 14 (أو أعلى) مثل مجلس التعاون الخليجي 5 إلى 13 (الأعلى بشكل عام أكثر فائدة) أو MSVC 14.2 أو أعلى لبناء المرجع التطبيق (والأمثلة ومقتطفات التعليمات البرمجية).
توضح بعض مقتطفات التعليمات البرمجية عناصر اللغة ليس فقط من C++ 14، ولكن أيضًا من C++ 17 و20 و23 وما بعده. يمكن أن يكون المترجم الذي يدعم C++ 17 أو حتى دعم C++ 20, 23 (مثلGC 13 أو clang 15 أو MSVC 14.3 أو أعلى) مفيدًا للنجاح مع جميع مقتطفات التعليمات البرمجية.
<chrono>
و <ratio>
وبعض رؤوس السمات الداخلية مرخصة بموجب رخصة GNU العامة الإصدار 3 أو أعلى.