Commands to initialize:
To run every time you create a new file to update the compile_commands.json: pio run -t compiledb
Command to generate/override a .clangd and write the symlink in the toolchain folder pio run -t clangd
Command to build the firmware without uploading pio run -t buildprog
Command to build the firmware and upload it pio run -t upload
If in the buildprog/upload you use the verbose like: pio run -t upload -v The system will tell you the exact size of the ELF sections.
Commadn to open the serial monitor pio device monitor
Command extremely powerful to obtain the size of every symbol inside a firmware.elf:
objdump -t .pio/build/stm8sblue/firmware.elf | sort | uniq | awk '
/^[0-9a-f]+ / {
if (prev_addr != "") {
sizes[prev_symbol] = strtonum("0x"$1) - prev_addr;
}
prev_addr = strtonum("0x"$1);
prev_symbol = $NF;
addresses[NR] = prev_addr;
symbols[NR] = prev_symbol;
count++;
}
END {
for (i = 1; i <= count; i++) {
if (i == count) {
sizes[symbols[i]] = 0; # Size of the last symbol is unknown, set to 0
}
printf "Address: 0x%08x Symbol: %s Size: %d\n", addresses[i], symbols[i], sizes[symbols[i]];
}
}'
Acconsenti al caricamento del .gdbinit in GDB mettendo nel tuo ~/.gdbinit:
add-auto-load-safe-path /PROJECT_DIR_ABSOLUTE_PATH/.gdbinit
Librerie richieste da stm8-gdb paru -S python2-bin sudo ln -s /usr/lib/libmpfr.so /usr/lib/libmpfr.so.4
Per lanciare il debugger: Assicurati di avere un firmware compilato con i debug symbols. Per crearlo fai: pio debug Apri poi un terminale e fai pio pkg exec openocd -- -f interface/stlink-dap.cfg -f target/stm8s103.cfg -c "init" -c "reset halt" Poi in un altro pio pkg exec stm8-gdb -- .pio/build/stm8sblue/firmware.elf
Note: Nel caso serva flashare a mano: ~/git/stm8flash/stm8flash -c stlinkv3 -p stm8s103f3 -s flash -w .pio/build/stm8sblue/firmware.hex
Risulta che nonostante la parte di sviluppo sia compensabile easy con Platformio, esistono dei problemi che sono difficili da sistemare. I problemi sono:
- Su Windows stm8flash e' troppo vecchio e non funziona correttamente
- Durante il Debug, OpenOCD non si apre propriamente in background, non ho idea di come deubggare la cosa...
- L'OpenOCD shippato potrebbe essere troppo vecchio per STLink-V3
- stm8gdb shippato e' buildato senza il supporto alla TUI rendendo il debugging estremamente macchinoso senza VSCode
- VSCode e' impossibile da configurare propriamente per ignorare le peculiarita di SDCC toolchain, dato che non ho trovato modo di aggiungere build flag al solo c/cpp json config senza che esse venissero usate effettivamente per il build. L'approccio su VSCode richiede env separati per sviluppo e compilazione nel platformio.ini, cosa estremamente scomoda e prona a errori
Attualmente l'assetto con Clangd e vim sembra ottimo, quindi VSCode non e' un opzione. L'unica alternativa che ho in mente e' utilizzare una versione aggiornata di:
- stm8flash (su Windows)
- openocd (per STLink-V3)
- stm8binutils (per avere TUI GDB!) Gli altri possiamo lasciarli cosi come sono... per ora. Qual e' il modo migliore? Generalmente openocd (e sdcc) sono comuni sulle repo dei sistemi operativi, gli unici magagni sono stm8flash e stm8binutils che van sicuramente compilati. Su Linux per un environment base l'unica necessita e' avere stm8binutils compilato con le flag giuste.
stm8binutils sembra INCOMPILABILE...