Initial Commit
This commit is contained in:
84
README.md
Normal file
84
README.md
Normal file
@@ -0,0 +1,84 @@
|
||||
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...
|
||||
Reference in New Issue
Block a user