Closed pat1 closed 7 months ago
Ho trovato queste note:
******************************* NOTE VARIE STIMA V4 MASTER ********************************
1) Modificare STM32Duino attribute __weak prima di USART2_IRQHandler
La Libreria è gestita da Cyclone che istanzia IRQ_Handler (Com2 in questo caso)
Arduino prenderebbe possesso di tutte le seriali (anche non utilizzate) senza lasciare possibilità
di gestione esterna di alcun genere.
Modulo uart.c in libraries\srcWrapper\src\stm32\uart.c Line 950
#if defined(USART2_BASE)
__weak void USART2_IRQHandler(void)
{
__weak void Consente una redifinizione esterna o mantiene quella esistente se non necessaria la redifinizione
2) Raddoppio del Buffer RX UsbSerial x trasmissione a pacchetti 64Byte in polling per modalità CDC STM32
Modulo cdc_queue.h in libraries\srcWrapper\src\stm32\usb\cdc\cdc_queue.h Line 57
#define CDC_RECEIVE_QUEUE_BUFFER_SIZE ((uint16_t)(CDC_QUEUE_MAX_PACKET_SIZE * 6)) // (Originale = *3)
seguendo le istruzioni a : https://github.com/stm32duino/Arduino_Core_STM32/wiki/HAL-configuration aggiungendo il file hal_conf_extra.h in include con:
#define HAL_UART_MODULE_ONLY
si ottiene:
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: .pio/build/stimav4_master/src/debug.cpp.o: in function `HardwareSerial::begin(unsigned long)':
/home/pat1/.platformio/packages/framework-arduinoststm32/cores/arduino/HardwareSerial.h:120: undefined reference to `Serial4'
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: /home/pat1/.platformio/packages/framework-arduinoststm32/cores/arduino/HardwareSerial.h:120: undefined reference to `HardwareSerial::begin(unsigned long, unsigned char)'
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: .pio/build/stimav4_master/src/debug.cpp.o: in function `print_debug_F(__FlashStringHelper const*, ...)':
/home/pat1/git/rmap/platformio/stima_v4/master/src/debug.cpp:72: undefined reference to `HardwareSerial::flush()'
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: /home/pat1/git/rmap/platformio/stima_v4/master/src/debug.cpp:74: undefined reference to `Serial4'
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: .pio/build/stimav4_master/src/debug.cpp.o: in function `HardwareSerial::write(int)':
/home/pat1/.platformio/packages/framework-arduinoststm32/cores/arduino/HardwareSerial.h:144: undefined reference to `HardwareSerial::write(unsigned char)'
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: .pio/build/stimav4_master/src/debug.cpp.o: in function `fputc':
/home/pat1/git/rmap/platformio/stima_v4/master/src/debug.cpp:47: undefined reference to `Serial4'
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: .pio/build/stimav4_master/src/drivers/freeRTOS_callback.cpp.o: in function `vApplicationStackOverflowHook':
/home/pat1/git/rmap/platformio/stima_v4/master/src/drivers/freeRTOS_callback.cpp:134: undefined reference to `HardwareSerial::flush()'
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: /home/pat1/git/rmap/platformio/stima_v4/master/src/drivers/freeRTOS_callback.cpp:138: undefined reference to `Serial4'
/home/pat1/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld: .pio/build/stimav4_master/src/main.cpp.o: in function `setup':
/home/pat1/git/rmap/platformio/stima_v4/master/src/main.cpp:191: undefined reference to `Serial4'
il che fa desumere che almeno una seriale di Arduino (Serial4) sia utilizzata e che quindi sovrascrivere le sue ISR non sia indolore ?
Il secondo punto delle note è affrontato qui: https://github.com/stm32duino/Arduino_Core_STM32/issues/1929 la redifinizione delle macro per gcc è affrontata qui: https://gcc.gnu.org/onlinedocs/cpp/Undefining-and-Redefining-Macros.html e qui: https://stackoverflow.com/questions/18483166/override-macro-from-the-command-line#18488707
quindi rimane di provare ad usare build_opt.h prima di fare un fork di stm32duino
il primo punto per il momento è stato risolto disabilitando l'uso della Serial di arduino attivata con la macro DISABLE_SERIAL in platform.ini
il secondo punto è stato risolto creando un fork di st32duino e creando un branch dalla versione 2.5 e creando una patch per abilitare la definizione da macro del numero di pacchetti usati per il buffer CDC tramite macro CDC_RECEIVE_QUEUE_BUFFER_PACKET_NUMBER=6
Questo il commit di riferimento: 255d950a490ccbd25f41e14a39468ab756a86f56
ora il firmware compila con successo nella continous integration
Il bug rimane aperto per risolvere l'utilizzo della Serial
The cyphal definition in dsdl are not all uppercase. Those are patch to get correct include:
but at the end I get: