Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Buggy firmware when compiling with GCC-ARM version 12 #70

Open
Ho-Ro opened this issue Jul 1, 2023 · 3 comments
Open

Buggy firmware when compiling with GCC-ARM version 12 #70

Ho-Ro opened this issue Jul 1, 2023 · 3 comments

Comments

@Ho-Ro
Copy link

Ho-Ro commented Jul 1, 2023

Compiling the source code with debian stable gcc version 12.2.1 20221205 (15:12.2.rel1-1) gives a buggy firmware - latest tinySA version as well as older versions:
buggy_version
error_4 error_all

This is what I see with the input terminated with 50 Ohm and with the 30 MHz calibration signal:
error_in_none error_in_30MHz

During compile it gives a lot of warnings:

make 
Makefile:305: warning: overriding recipe for target 'clean'
ChibiOS/os/common/startup/ARMCMx/compilers/GCC/rules.mk:301: warning: ignoring old recipe for target 'clean'
Compiling crt0_v6m.s
Compiling chcoreasm_v6m.s
Compiling crt1.c
Compiling vectors.c
Compiling chsys.c
Compiling chdebug.c
Compiling chtrace.c
Compiling chvt.c
Compiling chschd.c
Compiling chthreads.c
Compiling chregistry.c
Compiling chcore.c
Compiling chcore_v6m.c
In file included from ChibiOS/os/common/ext/CMSIS/ST/STM32F0xx/stm32f072xb.h:132,
                 from ChibiOS/os/common/ext/CMSIS/ST/STM32F0xx/stm32f0xx.h:157,
                 from ChibiOS/os/common/startup/ARMCMx/devices/STM32F0xx/cmparams.h:72,
                 from ChibiOS/os/common/ports/ARMCMx/chcore.h:70,
                 from ChibiOS/os/rt/include/ch.h:81,
                 from ChibiOS/os/common/ports/ARMCMx/chcore_v6m.c:28:
In function '__set_PSP',
    inlined from 'NMI_Handler' at ChibiOS/os/common/ports/ARMCMx/chcore_v6m.c:72:3:
ChibiOS/os/common/ext/CMSIS/include/core_cm0.h:85:28: warning: listing the stack pointer register 'sp' in a clobber list is deprecated [-Wdeprecated]
   85 |   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
      |                            ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cmFunc.h:443:3: note: in expansion of macro '__ASM'
  443 |   __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp");
      |   ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cm0.h:85:28: note: the value of the stack pointer after an 'asm' statement must be the same as it was before the statement
   85 |   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
      |                            ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cmFunc.h:443:3: note: in expansion of macro '__ASM'
  443 |   __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp");
      |   ^~~~~
In function '__set_PSP',
    inlined from '_port_irq_epilogue' at ChibiOS/os/common/ports/ARMCMx/chcore_v6m.c:125:5:
ChibiOS/os/common/ext/CMSIS/include/core_cm0.h:85:28: warning: listing the stack pointer register 'sp' in a clobber list is deprecated [-Wdeprecated]
   85 |   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
      |                            ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cmFunc.h:443:3: note: in expansion of macro '__ASM'
  443 |   __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp");
      |   ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cm0.h:85:28: note: the value of the stack pointer after an 'asm' statement must be the same as it was before the statement
   85 |   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
      |                            ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cmFunc.h:443:3: note: in expansion of macro '__ASM'
  443 |   __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp");
      |   ^~~~~
Compiling osal.c
Compiling hal.c
Compiling hal_st.c
Compiling hal_buffers.c
Compiling hal_queues.c
Compiling hal_mmcsd.c
Compiling hal_adc.c
Compiling hal_ext.c
Compiling hal_gpt.c
Compiling hal_pal.c
Compiling hal_pwm.c
Compiling hal_serial.c
Compiling hal_serial_usb.c
Compiling hal_usb.c
Compiling nvic.c
Compiling hal_lld.c
Compiling stm32_dma.c
Compiling hal_st_lld.c
Compiling hal_adc_lld.c
Compiling hal_ext_lld.c
Compiling hal_ext_lld_isr.c
Compiling hal_pal_lld.c
Compiling hal_gpt_lld.c
Compiling hal_pwm_lld.c
Compiling hal_serial_lld.c
Compiling hal_usb_lld.c
Compiling board.c
In file included from ChibiOS/os/common/ext/CMSIS/ST/STM32F0xx/stm32f072xb.h:132,
                 from ChibiOS/os/common/ext/CMSIS/ST/STM32F0xx/stm32f0xx.h:157,
                 from ChibiOS/os/common/startup/ARMCMx/devices/STM32F0xx/cmparams.h:72,
                 from ChibiOS/os/common/ports/ARMCMx/chcore.h:70,
                 from ChibiOS/os/rt/include/ch.h:81,
                 from ChibiOS/os/hal/osal/rt/osal.h:32,
                 from ChibiOS/os/hal/include/hal.h:28,
                 from ./NANOVNA_STM32_F072/board.c:17:
In function '__set_MSP',
    inlined from '__early_init' at ./NANOVNA_STM32_F072/board.c:101:5:
ChibiOS/os/common/ext/CMSIS/include/core_cm0.h:85:28: warning: listing the stack pointer register 'sp' in a clobber list is deprecated [-Wdeprecated]
   85 |   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
      |                            ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cmFunc.h:470:3: note: in expansion of macro '__ASM'
  470 |   __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp");
      |   ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cm0.h:85:28: note: the value of the stack pointer after an 'asm' statement must be the same as it was before the statement
   85 |   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
      |                            ^~~~~
ChibiOS/os/common/ext/CMSIS/include/core_cmFunc.h:470:3: note: in expansion of macro '__ASM'
  470 |   __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) : "sp");
      |   ^~~~~
Compiling chprintf.c
Compiling memstreams.c
Compiling nullstreams.c
Compiling usbcfg.c
Compiling adc.c
Compiling main.c
In file included from main.c:1132:
sa_core.c: In function 'interpolate_maximum':
sa_core.c:2855:35: warning: using floating-point absolute value function 'fabs' when argument is of integer type 'int32_t' {aka 'long int'} [-Wabsolute-value]
 2855 |     const INTER_TYPE d          = fabs(delta_Hz) * 0.5 * (y1 - y3) / ((y1 - (2 * y2) + y3) + 1e-12);
      |                                   ^~~~
Compiling plot.c
Compiling ui.c
ui.c:1539:26: warning: array 'menu_settings' assumed to have one element
 1539 | static const menuitem_t  menu_settings[];
      |                          ^~~~~~~~~~~~~
ui.c:1541:26: warning: array 'menu_lowoutput_settings' assumed to have one element
 1541 | static const menuitem_t  menu_lowoutput_settings[];
      |                          ^~~~~~~~~~~~~~~~~~~~~~~
ui.c:1541:26: warning: 'menu_lowoutput_settings' defined but not used [-Wunused-const-variable=]
ui.c:1539:26: warning: 'menu_settings' defined but not used [-Wunused-const-variable=]
 1539 | static const menuitem_t  menu_settings[];
      |                          ^~~~~~~~~~~~~
ui.c:1160:24: warning: 'keypads_plusmin_freq' defined but not used [-Wunused-const-variable=]
 1160 | static const keypads_t keypads_plusmin_freq[] = {
      |                        ^~~~~~~~~~~~~~~~~~~~
Compiling ili9341.c
Compiling numfont20x22.c
Compiling Font5x7.c
Compiling Font10x14.c
Compiling flash.c
Compiling si4432.c
Compiling Font7x13b.c
Linking build/tinySA.elf
Memory region         Used Size  Region Size  %age Used
          flash0:      111700 B       116 KB     94.04%
          flash1:          0 GB         0 GB
          flash2:          0 GB         0 GB
          flash3:          0 GB         0 GB
          flash4:          0 GB         0 GB
          flash5:          0 GB         0 GB
          flash6:          0 GB         0 GB
          flash7:          0 GB        12 KB      0.00%
            ram0:         16 KB        16 KB    100.00%
            ram1:          0 GB         0 GB
            ram2:          0 GB         0 GB
            ram3:          0 GB         0 GB
            ram4:          0 GB         0 GB
            ram5:          0 GB         0 GB
            ram6:          0 GB         0 GB
            ram7:          0 GB         0 GB
Creating build/tinySA.hex
Creating build/tinySA.bin
Creating build/tinySA.dmp

   text    data     bss     dec     hex filename
 110852     848   15728  127428   1f1c4 build/tinySA.elf
Creating build/tinySA.list

Done

(I see comparable warnings when compiling the NanoVNA firmware.)

After downgrade to the debian oldstable version gcc version 8.3.1 20190703 (release) [gcc-8-branch revision 273027] (15:8-2019-q3-1+b1) it compiles fine with only one warning (I must again remove the comments in nanovna.h to compile the tinySA3 version):

...
Compiling ui.c
ui.c:1160:24: warning: 'keypads_plusmin_freq' defined but not used [-Wunused-const-variable=]
 static const keypads_t keypads_plusmin_freq[] = {
...

ok_version selftest_ok

This is what I see with the input terminated with 50 Ohm and with the 30 MHz calibration signal:
ok_in_none ok_in_30MHz

@DiSlord
Copy link
Collaborator

DiSlord commented Jul 1, 2023

I think this related to gcc speed optimisation, TinySA code critical to execute timings and can depend from how compiler optimise code
Most of warnings related to ChibiOS low level code

@Ho-Ro
Copy link
Author

Ho-Ro commented Jul 1, 2023

Erik uses gcc version 7.2.1 (see below), I have gcc version 8.3.1. Is version 9 the latest "good" version for tinySA? I see that 12.x works well for NanoVNA.

Version: tinySA_v1.4-96-gc1fcd94
Build Time: May 11 2023 - 08:41:39
Kernel: 4.0.0
Compiler: GCC 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]

@DiSlord
Copy link
Collaborator

DiSlord commented Jul 2, 2023

Difficult to answer, as I test code generation for NanoVNA, gcc last v9 provide more compact code. After code size bigger but not chage size, up to v12

Also as I see v7 (code build by Eric) more bigger then my builded in v9. And need test how gcc v9 code work on Tiny (several wait delays hardcoded and depend from how fast code)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants