cmsis-rtos v2 - printf not working inside threads

Hello,

I am working with STM32WB55RG platform. I have successfully use printf function with uart. However when I try to use this same function inside cmsis-rtos v2 threads it's not working. Basically thread hangs.

My code implementing printf:

#ifdef __GNUC__
  /* With GCC, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;
}

Code starting thread:

// ...
osKernelInitialize();

const osThreadAttr_t main_attributes = {
    .name = "main",
    .priority = (osPriority_t) osPriorityNormal,
    .stack_size = 1024
  };
  mainHandle = osThreadNew(mainFunction, NULL, &main_attributes);
  
osKernelStart();

// ...

void mainFunction(void *argument)
{
    uint8_t message[40] = "Hello World! This is mine.\n\r";
    for(;;)
    {
    printf("Hello this is printf!\n");
    //HAL_UART_Transmit(&huart1,message,sizeof(message),10);
    vTaskDelay(1000/portTICK_RATE_MS);
    }
}

If I remove printf HAL_UART_Transmit works properly. Any thoughts?

Best regards,

zurek

More questions in this forum