Loading...
 

SW4STM32 and SW4Linux fully supports the STM32MP1 asymmetric multicore Cortex/A7+M4 MPUs

   With System Workbench for Linux, Embedded Linux on the STM32MP1 family of MPUs from ST was never as simple to build and maintain, even for newcomers in the Linux world. And, if you install System Workbench for Linux in System Workbench for STM32 you can seamlessly develop and debug asymmetric applications running partly on Linux, partly on the Cortex-M4.
You can get more information from the ac6-tools website and download (registration required) various documents highlighting:

System Workbench for STM32


Contradictory Warnings.

My application has an automatic gain control that needs to be able to change the SDADC gain on the fly. Gain change can only be done when the SDADC is in init mode. To get the SDADC in init mode, and exit from it, there are these HAL functions:

SDADC_EnterInitMode()
SDADC_ExitInitMode()

Which are in file stm32f3xx_hal_sdadc.c. Unfortunately these are private functions so they are missing from file stm32f3xx_hal_sdadc.h. I cannot access them. So I copied these functions, and the macros they use, into a file I added to the project. I append the characters “_pub” to their names so they can be differentiated from the STM32CubeMX generated functions.

When I build this I get these seemingly contradictory warnings:

Description	Resource	Path	Location	Type
'SDADC_EnterInitMode_pub' declared 'static' but never defined [-Wunused-function]	stm32f3xx_hal_pub.h	/TEC Driver SW4STM32 Configuration/TEC/Inc	line 13	C/C++ Problem
'SDADC_EnterInitMode_pub' defined but not used [-Wunused-function]	stm32f3xx_hal_pub.c	/TEC Driver SW4STM32 Configuration/TEC/Src	line 35	C/C++ Problem
'SDADC_EnterInitMode_pub' used but never defined	stm32f3xx_hal_pub.h	/TEC Driver SW4STM32 Configuration/TEC/Inc	line 13	C/C++ Problem
'SDADC_ExitInitMode_pub' declared 'static' but never defined [-Wunused-function]	stm32f3xx_hal_pub.h	/TEC Driver SW4STM32 Configuration/TEC/Inc	line 14	C/C++ Problem
'SDADC_ExitInitMode_pub' defined but not used [-Wunused-function]	stm32f3xx_hal_pub.c	/TEC Driver SW4STM32 Configuration/TEC/Src	line 61	C/C++ Problem
'SDADC_ExitInitMode_pub' used but never defined	stm32f3xx_hal_pub.h	/TEC Driver SW4STM32 Configuration/TEC/Inc	line 14	C/C++ Problem

The first warning shows that SDADC_EnterInitMode_pub() is declared but never defined. But the next warning shows it is defined but not used. And finally the line after that shows it used but never defined. The lines that follow shows it to be all the same for SDADC_ExitInitMode_pub.

What could account for these contradictions? What has gone wrong here?

The processor is an STM32F373.

The files I created to add these functions to the project are attached.

France

Hi,

I think all your problems come from copy-pasting existing code without looking at what you are copying: you should suppress the static definitions in all the _pub declarations and definitions (in the .c and .h files you created) and it should work.

In fact the first warning says that you define SDADC_EnterInitMode_pub as a static function in stm32f3xx_hal_pub.h (that you obviously include in one of your code files); the second say that you define it, always as static, probably by including stm32f3xx_hal_pub.h, in stm32f3xx_hal_pub.c, but never use it in this file (quite normal indeed for an extern function, but not for a static function) and the third one says that, in some source file, you included stm32f3xx_hal_pub.h and try to use SDADC_EnterInitMode_pub, but as this file was not stm32f3xx_hal_pub.c it does not include any definition for this static function.

All this is due to overlooking the static keyword: when used for some global object, it restricts its visibility to the current compilation unit (the main .c file and the included files); this symbol will not be visible by other compile units.

Bernard (Ac6)