85 lines
3.4 KiB
Markdown
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...
|