¿Cuál es el propósito de la referencia débil utilizada en Keil MDK ARM?

Se complicó un poco con una función definida en dos archivos y uno con un símbolo __débil. Llamé a la siguiente función para cargar la configuración de UART1 en STM32L476RG desde mi archivo principal

 if(HAL_UART_Init(&UartHandle) != HAL_OK) and this function is defined at 
  {
    Error_Handler();
  }

Descubrí que esta función llama a otra función llamada HAL_UART_MspInit(huart);Esto se define en dos lugares,

 1. in stm32l4xx_hal_msp.c as void HAL_UART_MspInit(UART_HandleTypeDef
    *huart)
 2. in stm32l4xx_hal_uart.c as __weak void HAL_UART_MspInit(UART_HandleTypeDef *huart)

Mi problema es que cada vez que cargo la configuración de UART, se llama a la función __weak. Lo hice refiriendo un ejemplo, UART_WakeUpFromStop dado en la [página del producto STM32F476RG] . donde en el ejemplo se llama a la función en nstm32l4xx_hal_msp.c , void HAL_UART_MspInit(UART_HandleTypeDef *huart). ¿Qué está fallando en mi código? ¿Cuál es la influencia del símbolo __débil?

STM32L476RG Manual de referencia

Las funciones __débiles suelen ser marcadores de posición o valores predeterminados y puede anularlos con otra función simplemente declarándola con el mismo nombre. ¿ Está seguro de que su función 'real' no débil realmente se está compilando y vinculando?

Respuestas (1)

Entonces, la definición y la implementación se pueden anular con un tipo no débil, también conocido como uno definido por el usuario.

Consulta el manual del traje de abeja..

pero ¿por qué va a un tipo débil en mi código?