Mar anno jopar eve leszedtem innen-onnan a szukseges fileokat es ezeket hasznalom mindenhol. Igen, ugy latom en is hogy azota tenyleg egy kicsit atrendeztek, de azert relative konnyen osszeszedheto most is ha tudjuk mit kell keresni. Konkretan:
- Innen le tudod szedni ezt a STM32F0xx standard peripherals library nevu dolgot.
- Ebben a *.zip-ben a
- ./STM32F0xx_StdPeriph_Lib_V1.6.0/Libraries/CMSIS/Include alkonyvtarban vannak a CMSIS-es headerek, es a
- ./STM32F0xx_StdPeriph_Lib_V1.6.0/Libraries/CMSIS/Device/ST/STM32F0xx/Include konyvtarban vannak az ST32F0xx specifikus headerek
- A nagyon "bare metal" programozashoz a tobbi lenyegtelen.
- Ezt a ket konyvtarat masold be valahova (nekem omlesztve vannak egy konyvtarba), az legyen benne az -I... include search path-ba
- A forrasfileok-ba eleg csak az <stm32f0xx.h>-t behuznod, az maga utan rantja a tobbit (azaz CMSIS-es headereket, mint pl a core_m0.h meg az egyeb absztrakcios headereket mint a core_cmInstr.h meg ilyesmik, amikbe a rendszerszintu utasitasokhoz /barrier-ek, wait-for-interrupt, stb/ tartozo makrok vannak)
A "nagyon bare metal" az itten azt jelenti hogy a periferiakhoz tartozo definciokat (azaz a periferia-objektumokat illetve azok cimtartomanyait) megkapod - felteve ha a forditaskor definialod azt hogy milyen MCU-val dolgozol, esetedben a -DSTM32F051 kapcsolo az kell - de az fontos hogy ezeken felul semmi mast nem kapsz meg. Azaz ami itten hianyzik meg a teljes build folyamathoz, az a
- execution startup rutinok (crt0) es a
- linker script
En ezt a kettot mindig magamnak szoktam megirogatni meg modositgatni ha kell (marpedig kell, pl bootloader-ekhez meg ilyesmikhez), de kiindulasnak a bundle-ban levo fileok is jok. Azaz lasd:
- ./STM32F0xx_StdPeriph_Lib_V1.6.0/Libraries/CMSIS/Device/ST/STM32F0xx/Source/Templates/gcc_ride7/startup_stm32f051.s, illetve
- ./STM32F0xx_StdPeriph_Lib_V1.6.0/Projects/STM32F0xx_StdPeriph_Templates/TrueSTUDIO/STM32F051/STM32F051R8_FLASH.ld.
Sot, vsz alapszintu hasznalatre ezek jobbak is azert mint a full sajat :) De a sajat valtozatok is kb 50-50 sorosak (mind a crt0.c, mind a main.ld), szoval akar ide is be tudom masolni ha erdekel :] Ha sajat exectuion startup rutinokat hasznalsz, akkor a linkelest a -nostartfiles opcioval kell csinalnod, de azt leszamitva nincs (erdemi) kulonbseg a ket folyamat kozott.
Szerk: a gcc es/vagy libc (itt: newlib, picolibc) is tartalmazhat mindenfele implementaciokat execution startup-ra illetve linker scriptre, de jo kerdes hogy ezzel mennyire jarsz jol... szoval itt talan inkabb a gyarto es/vagy MCU-specifikus implementaciokat erdemes alapul venni, de ketsegtelen hogy bizonyos, jobban egyesegesitett architekturaknal (pl RISC-V) mar a libc specs-ben hivatkozott megoldasok is jok lehetnek. Tapasztalat az az hogy az ARM az sajnos nem ennyire egysegesitett.