Using Events in FreeRTOS

sanchitgoel17 wrote on Tuesday, May 17, 2016:

Hi,

I’m porting my application that’s written on ST10 micro-controller to STM32F407 using STCubeMX tool based on FreeRTOS in Keil IDE. I want to use 50 events in a particular task but FreeRTOS doesn’t allow me to use more than 32 events that is based on bit field. So, any help on how to define/use more than 32 events would be highly appreciated.

davedoors wrote on Tuesday, May 17, 2016:

Use 2 event groups instead of 1.

sanchitgoel17 wrote on Tuesday, May 17, 2016:

Dave, how can I use 2 event groups for a single task? And I’m using CMSIS OS as wrapper on top of FreeRTOS. I would like to use osSignalSet() function that is provided by CMSIS OS.

rtel wrote on Tuesday, May 17, 2016:

Use 2 event groups instead of 1.

…and allocate a bit in the first event group to indicate if a bit in
the second event group is set or not - that way you only need to block
on one not both.

sanchitgoel17 wrote on Tuesday, May 17, 2016:

In CMSIS OS,

Can I have these options:

  1. Instead of passing eSetBits as the 3rd argument to function xTaskNotify() I want to pass eSetValueWithoutOverwrite.
  2. I want to change type of ulNotifiedValue from “volatile uint32_t” to “volatile long long” in case I pass the third parameter as eSetBits.

If you confirm this can be implemented, then I will request ST to fix this up in the CMSIS RTOS.

rtel wrote on Tuesday, May 17, 2016:

I’m not familiar with the CMSIS OS API, so can’t comment on that, but in
FreeRTOS the notification value must be 32-bits.

rajeevcrc wrote on Tuesday, May 17, 2016:

Hi,

I want to confirm following with respect to FreeRTOS

  1. Can we use /call atomic instruction (available with ARM cortex M4 processor) and use it before manipulation ulNotifiedValue of type “long long”
  2. If I go with current impelementation available with FreeRTOS, I believe, I can pass the 3rd argument to function xTaskNotify() as eSetValueWithoutOverwrite. However, I will have to check the return value to confirm whether the signal will be sent.

Rajeev

rtel wrote on Tuesday, May 17, 2016:

I want to confirm following with respect to FreeRTOS

  1. Can we use /call atomic instruction (available with ARM cortex M4
    processor) and use it before manipulation ulNotifiedValue of type “long
    long”

I don’t understand the question, but as per my reply a few moments ago,
the notification value must be 32-bits.

  1. If I go with current impelementation available with FreeRTOS, I
    believe, I can pass the 3rd argument to function xTaskNotify() as
    eSetValueWithoutOverwrite. However, I will have to check the return
    value to confirm whether the sinal will be sent.

That is correct. xTaskNotify() RTOS task notification API documentation

Regards.