FreeRTOS - STM32- Data in queue not processed fast enough

stevend wrote on Monday, January 14, 2019:


I’m new to FreeRTOS and I’ve been working on this for 2 days, that’s the reason i’m asking for your help.

I have three tasks running. One is used to communicate with a bluetooth device, and the 2 others are used for TX and RX over USB (UART). My app works fine when I send or receive data to my bluetooth device but when I command my bluetooth device to enter discover mode, there is so much data incoming that I can’t process everything. My queue used for bluetooth data management gets full and my app won’t respond to any command I send.

Priorities used in my app :

  • Task creation :
  • Interrupt priorities :


I can send a code sample if it helps understanding my problem.

If you have any tips that would be nice, thanks :slight_smile:

I’m using a STM32F4, FreeRTOS V9.0.0, and IAR

rtel wrote on Monday, January 14, 2019:

Can you please show how you are creating and using the queue. Thanks.

richarddamon wrote on Tuesday, January 15, 2019:

If you are using the queue as a simple character fifo, it is quite possible to overload your system, as is well described in the documentation and examples. There is a LOT of over head for each character. A stream buffer or message buffer might be more efficient, or some method where you build up a buffer of data for a message, and just send a buffer address through a queue.

You also may need a much larger queue to be big enough to hold the amount of data you need, and have some form of dealing with overrun.

stevend wrote on Tuesday, January 15, 2019:

Here is some code from my project. I hope this files are clear. Thanks in advance for your feedback and your help on my code. As i said, any help is appreciated :slight_smile:

rtel wrote on Tuesday, January 15, 2019:

Really I was hoping for just a cut down piece of code that showed how
the queue in question was being used. Looks like there are quite a lot
of queues in the code you posted.

stevend wrote on Tuesday, January 15, 2019:

yeah sorry about that :confused:
I tought it would be interesting for you guys to have it all, so you can see everything and tell me if i’m doing something really wrong…
I will post something shorter :slight_smile:

stevend wrote on Tuesday, January 22, 2019:

Hello again, it’s been a week and i’m still working on this, it’s kind of an annoying feeling… I found some minor mistakes in my code and I hope it would fixed the problem but it did not. After that I tried to implement a few things that did not worked ( stopping dma stream, changing task priorities, adding a mutex, …)

I also have been reading the practical guide to master FreeRtos.

but still a few quetions came to my mind :

is it possible that fast interrupt starve task from process time and if yes how can I handle this from happening ?

I also thought my problem could come from the fact that my ble driver wait on a queue that receive from interrupt and from a task in communciationManager.

Just so you guys know, this code has not been written by me. I made a few corrections but as someone with few experiences I find it hard to work on someone else (big) project …

Guess i’ll be working on this for a while so any help is welcome :slight_smile: