FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [May 2017 Threads]
~~~
In queue.c,
typedef struct QueueDefinition
#if ( configUSETRACEFACILITY == 1 )
UBaseTypet uxQueueNumber;
uint8t ucQueueType; //<-- Line 162
#endif
} xQUEUE;
In xQueueGenericReceive(), line 1279
#if ( configUSEMUTEXES == 1 )
{
if( pxQueue->uxQueueType == queueQUEUEIS_MUTEX )
{
In my FreeRTOSConfig.h:
define configUSE_MUTEXES ( 1 )
define configUSETRACEFACILITY ( 0 )
~~~
I'm not sure how this even compiles, but it does with GNU ARM 4.9.3. The result is that illegal memory is written with unpredictable consequences.
cheers
Knut
Please have a look at the large comment around line 97, and these defines :
~~~
define pxMutexHolder pcTail
define uxQueueType pcHead
~~~
In case a queue object is in fact a mutex, the two fields are not used in their normal way (head, tail). These are pointers, not characters. uxQueueType
will be set to NULL (queueQUEUE_IS_MUTEX
).
It may look a bit confusing, but it is entirely local to tasks.c
. I'm sure it was done to save a few bytes of RAM.
In another C project a union
could be used for this, but union
's are not supported by all compilers that are used to compile the FreeRTOS kernel.
The member used when tracing: ucQueueType
is indeed an 8-bit field that holds a copy of 'ucQueueType' that was used during creation.
In short: there is nothing wrong with it.
but it is entirely local to tasks.c
Sorry, not task.c
but queue.c
of course.
Cheers.
wow. Missed that. Thanks. The good news is that FreeRTOS works, the bad news is that something else is messing up my stack...
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.