This might be because, you might be allocating memory
dynamically from the heap. But care is not taken to
deallocate the same.
as a result, there are memory leaks and finally the os says
that there is no free memory
The problem is because of memory fragmentation..
Though 10KB of memory is available but it will be in
smaller chunks (less than 5KB).. when we request for 5KB
malloc returns NULL as it coudnt find a chunk of size 5KB...
RTOS might be having 10k memory, might not fragmentation
problem, and the largest hole available to user might be
lesser than 5k, this condition might be one of the reason
for NULL error.
I have a situation where the programme counter(PC) shows
that vxworks msgQreceive function has been called by task A
and Q is full, still I am not picking up the messages. There
is no other task registered to receive messages from this Q.
The sending task B, which is ISR in this case, is getting
timedout everytime it tries posting new message in it. A's
state is PEND which means I am waiting for some resource to
get free but PC shows I have called vxworks msgQReceive and
currently at qJobget+0x018 location. There seems to be two
causes now(identified by me): either vxworks qjobget task is
not able to do semTake or no messages in Q. But Q is full
and semTake failure seems unlikely(though I dont have a
mechanism to check so).
Besides explaining root cause for above, can anyone suggest
how to get my task in READY state again? I also tried
flushing the Q; on doing this, more messages get posted in Q
but A still doesnt pick up any :(