Fejlesztői környezetnek Eclipse CDT -t javaslom (https://www.eclipse.org/cdt/). Érdemes ezt a plugin -t is feltenni: https://sourceforge.net/projects/embsysregview/?source=directory
Debuggolás: Eclipse alatt GDB -megy, azaz kell egy PC -n futó GDB szerver ami beszél a debug interfészeddel, az pedig SWD -n vagy JTAG -en a hardverrel. Erre régebben a már emlitett OPENOCD volt ingyenes megoldás (http://openocd.org/). Az egyik fizetős verzió pedig: https://www.segger.com/products/debug-probes/j-link/tools/j-link-gdb-se…
Debug interfésznek sok minden szóba jöhet:
- Egy csómó kártyán van beépitett debug interfész. CMSIS DAP, STLINK, stb... Ha ilyen a kártyád van, nézd meg támodjta e, illetve hogyan az OPENOCD, illetve hogy van e hozzá valami gyártó specifikus cucc.
- Ha különálló debug interfészt szeretnél, akkor vagy veszel valami FT2232 alapú olcsó cuccot (pl: https://www.banggood.com/CJMCU-2232-FT2232HL-USB-TURN-UARTFIFOSPII2CJTA…), vagy egy JLINK klónt (https://www.banggood.com/The-J-link-OB-ARM-Emulator-Debugger-Programmer…), de akár használhatsz fejlesztői kártyát is erre a célre (https://geekilyinteresting.wordpress.com/2014/05/04/using-your-stm32f4-…). Nekem egy ilyenem van: https://www.olimex.com/Products/ARM/JTAG/ARM-USB-TINY/
- Fizetős JTAG interfészek. Csak felsorolás szintjén: Lauterbach, Segger J-Link, Keil uLink, Jlint, stlink, etc... Némelyikből lehet kapni olcsósított verziót egyetemistáknak/hobbistáknak. Ezekhez vannak egyéb eszközök, pl FLASH programozók.
Flash programozás:
A debug interfész csak hozzáférést ad a hardwerhez, azaz megoldja a kommunikációt. Az Eclipse+DBG szerver (openocd) megoldja a debuggolást (regiszterek olvasása/írása, break pointok, stb...), viszont nem tud FLASH -t programozni. A fizetősz IDE -k (IAR, Keil, etc...) rendelkeznek FLASH programozásra valamilyen megoldással. Letöltenek JTAG -en keresztül RAM -ba valamilyen FLASH programozó programot, majd JTAG -en letöltik RAM pufferbe a programod darabjait, és JTAG -en vezérelve a programozó alkalmazást felprogramozzák a FLASH -t. No erre pár éve még nem volt FLOSS megoldás.
Sok MCU rendelkezik pl soros boot-loader -rel, azaz soros porton fel lehet programozni. Ehhez kell a PC -dbe egy sorosport (USB Serial manapság), meg egy programocska ami elküldi sorosporton a programodat. (pl https://sourceforge.net/projects/stm32flash/). A letöltendő programot általában vagy raw-bináris formátumba vagy s-record formátumba kell konvertálni letöltés előtt. Ha GCC -t használsz objcopy a barátod.
Compiler:
Ha ingyenes kell, akkor GCC: https://developer.arm.com/open-source/gnu-toolchain/gnu-rm
Mivel a GCC FLOSS, bárki fordíthat binárist a meglévő forrásokból, így több bináris terjesztés is létezik ARM támogatással. Jelenleg az ARM port hivatalos karbantartója az ARM (link fent).
A C környezet nélkülözhetetlen része a standard library. A fizetős fordítóknak ez szerves része, ám a GCC -nek nem. ARM körökben legtöbbször newlib -et adnak hozzá. Sajnos ez elég nagy méretű, érdemes lehet a későbbiekben alternatívát keresni.
Egyebek:
Az ARM Cortex MCU -khoz ad könyvtárat ami a core perifériákat támogatja. Ez CMSIS néven fut. Github -on fent van.
A legtöbb gyártó ad ingyenes driver könyvtárat a chip -jeihez (timer, UART, SPI, DMA, etc...). Ezek legtöbbször tartalmazzák a CMSIS -t. Működnek, de elég limitáltak, és a verziók közötti kompatibilitás is problémás. Arra valók, hogy gyorsan össze lehessen prototípusokat kalapálni belőlük, bár (sajnos) sok termékbe is bekerülnek.
ARM -on érdemes elgondolkozni egy RTOS használatán is. Ezekben e körökben az OS jelentheti az ütemezőt illetve a hozzá tartozó szinkronizációs eszközöket (event, mutex, etc...), de akár "Linux" szerű, sok szolgáltatás adó környezetet is (TCP/IP, file-system, etc...). Itt érdemes megnézni a FreeRTOS -t (nemrég volt hír, hogy támogatja az Amazon felhő szolgáltatása), a ChibiOS -t, illetve az mbed -et.
Ha nagyobb MCU -d van (órajel > 100MHz, van >100K RAM -od), illetve az alkalmazás egyszerű érdemes eljátszani valamilyen szkript nyelvvel. Pl:https://micropython.org/, http://jerryscript.net/, http://www.eluaproject.net/. Ezek portolása sok tapasztalatot adó kihívás, az eredmény pedig egy nagyon flexibilis kütyü. Egyszerű feladatokra illetve protontipizálásra ideális.