Type conflicts of xQueueHandle

evilbarry wrote on Thursday, March 12, 2009:

Hi all,
Having a few probs with Queues at the moment, silly ones now doubt.

I’m running IAR version 4 with Sam7x256.
The problem i’m having is the compiler doesnt know what xQueueHandle is, theres two in the queue.c/.h.

one is "typedef xQUEUE * xQueueHandle;"
the other is "typedef void * xQueueHandle;"

and i get the following, plus others

Warning[w6]: Type conflict for external/entry "xQueueCreate", in module CanControl against external/entry in module queue; function return types are different; different basic types

Anyone got any ideas?

Many thanks

Barry

rtel wrote on Thursday, March 12, 2009:

This is deliberate data hiding.  The IAR compiler is just very pedantic.  Turn the warning off.

Regards.

rickpike wrote on Wednesday, March 18, 2009:

You can modify queue.c to eliminate the warning AND preserve the data hiding.

Change queue.c so that it #includes queue.h. Now all the queue functions use the same typedef that your client code does (xQueueHandle is void*).

Change the typedef in queue.c to something like:
typedef xQUEUE xRealQueueHandle;

Now change all of the functions in queue.c that take an xQueueHandle parameter or return an xQueueHandle and cast the void pointer to xRealQueueHandle.

-rp