Files
stm8stest/README.md

85 lines
3.4 KiB
Markdown

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:
```bash
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...