دیدن محل متغیرها در حافظه

هدف این پروژه پیدا کردن آدرس واقعی متغیرها در خروجی ساخت و آماده‌سازی بافرهای CCM است. به برد GB100ST V2.0، پروگرامر SWD و تغذیهٔ مناسب نیاز دارید. پروژه با مدل STM32F303CBT6 ساخته شده است.

از فایل‌ها شروع کنید

lesson-31-projects.zip پروژهٔ کامل و IOC را دارد. lesson-31-build-artifacts.zip شامل ELF و MAP همان ساخت است. ابتدا فایل MAP و elf-placement.json را مقایسه کنید: ccm_initialized در 0x10000000 و ccm_zeroed در 0x10000100 قرار دارد. هر بافر 256 بایت است. main_buffer در SRAM اصلی است و lookup_table در Flash می‌ماند.

مقداردهی را بررسی کنید

Startup تولیدشده فقط .data را کپی و .bss را صفر می‌کند. تابع CCM_Initialize اولین اقدام main است؛ تصویر .ccmram را از Flash کپی و .ccm_bss را صفر می‌کند. در این نمونه هیچ سازنده یا وقفه‌ای پیش از آن از CCM استفاده نمی‌کند. جای این تابع را با کد Startup یکی ندانید.

در برنامهٔ اشکال‌زدایی، پس از Memory_Check توقف کنید. پیش‌بینی initialization_ok=1 و observed_sum=100 است؛ PB6 در این حالت High می‌شود. جدول bench-worksheet.csv را فقط با مشاهدهٔ واقعی پر کنید. اجرای برد و دیباگر در تهیهٔ این بسته انجام نشده است.

محدودیت‌ها

DMA تراشهٔ F303 به CCM دسترسی ندارد. فایل MAP جای حافظه را ثابت می‌کند، نه سرعت اجرا یا اوج مصرف پشته را. حداقل‌های Heap=512 و Stack=1024 و 4 بایت هم‌ترازی رزرو شده‌اند. مجموع ناحیهٔ SRAM اصلی 1856 بایت و CCM برابر 512 بایت است؛ این دو ناحیه پیوسته نیستند. Silicon revision را بخوانید؛ ES0204 برای Revision Z محدودیت ویژهٔ دسترسی SRAM دارد. پروژه تنظیمات حفاظت CCM و Option Bytes را تغییر نمی‌دهد.

بازتولید محاسبات و ساخت

برای کنترل فایل‌ها و محاسبات، Python 3 را روی verify_model.py اجرا کنید؛ به کتابخانهٔ اضافه نیاز نیست و inspect_elf.py باید کنار آن باشد. این کنترل‌ها اجرای firmware را شبیه‌سازی نمی‌کنند. نتایج و آدرس‌ها در model-results.json و elf-placement.json ذخیره می‌شوند.

برای ساخت از پروژهٔ استخراج‌شده CMake preset Debug استفاده کنید: cmake --preset Debug سپس cmake --build --preset Debug --clean-first. GCC ARM و CMake و Ninja باید نصب باشند. اگر از CubeMX کد را دوباره تولید کردید، تغییر دستی لینکِر و سیاست -Wall -Werror را با نسخهٔ همراه تطبیق دهید. این بسته پروژهٔ CMake است؛ ورود یا ساخت GUI در CubeIDE آزمایش نشده است.

وضعیت و منشأ

تولید واقعی CubeMX و کامپایل پاک بدون هشدار انجام شده است؛ اجرای برد، پروگرام، GUI و اندازه‌گیری فیزیکی انجام نشده است. CubeMX 6.14.0/DB6.0.140، CubeF3 V1.11.6 و GCC 13.2.1 با -O0 -g3 -Wall -Werror به کار رفته‌اند. شناسه‌های دقیق منابع، دستور کامپایل، هش‌ها و گزارش ساخت در toolchain-and-validation.json و build-report.txt هستند. مجوزهای ST و CMSIS در ZIP پروژه حفظ شده‌اند.