Startup
Модуль StartUp є фундаментальним компонентом вбудованої системи, який забезпечує коректну ініціалізацію мікроконтролера одразу після скидання або подачі живлення. Цей модуль готує апаратне середовище та пам'ять, перш ніж передати керування користувацькій функції main().
Призначення
Модуль StartUp відповідає за налаштування базового середовища, необхідного для правильної роботи застосунку. Він тісно пов'язаний з архітектурою мікроконтролера і зазвичай виконується безпосередньо після спрацювання вектора скидання.
Можливості
-
Ініціалізація вказівника стека та таблиці векторів
Встановлює початкове значення вказівника стека та налаштовує таблицю векторів переривань для коректної обробки винятків і переривань. -
Ініціалізація секцій пам'яті
Копіює ініціалізовані дані з flash до RAM і обнуляє секцію.bss, щоб неініціалізовані змінні мали нульове значення. -
Виконання конструкторів
Автоматично викликає статичні конструктори (наприклад, глобальні об'єкти C++) перед викликомmain(), забезпечуючи правильне налаштування середовища виконання. -
Ініціалізація RCC (Reset and Clock Control)
Налаштовує системні тактові сигнали (HSE, PLL тощо), щоб мікроконтролер і периферія працювали на потрібних частотах. -
Запуск головного застосунку
Передає керування функціїAppMain(), яка містить логіку користувацького застосунку.
Подробиці реалізації
- Модуль зазвичай містить assembly-файл
startup_<device>.sта файли вихідного коду C для низькорівневої ініціалізації. - Стандартні оброблювані секції пам'яті:
.data– копіюється з flash до RAM.bss– обнуляється в RAM
- Для налаштування тактування або підготовки периферії можуть бути надані власні функції ініціалізації.
Залежності
- CMSIS (підтримка ядра ARM Cortex-M)
- MCAL (для конфігурації RCC і NVIC)
- Linker script (визначає області пам'яті та символи запуску)
Використання
Підключайте цей модуль на самому початку вашого вбудованого застосунку. Переконайтеся, що символи таблиці векторів і reset handler визначені в linker script, а startup assembly є точкою входу у вашому проєкті.
Ліцензія
Цей проєкт ліцензовано за Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0).
Ви вільні використовувати, змінювати та поширювати цю роботу в некомерційних цілях за умови належного зазначення авторства.
Повні умови дивіться у LICENSE.md або на creativecommons.org/licenses/by-nc/4.0.
Автори
- Mr.Nobody — embedbits.com
Внески вітаються! Будь ласка, відкрийте pull request.