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] [January 2017 Threads]
mpuwrappers.h seems to be missing #define statements for several of the MPU wrapper functions which are defined in mpuwrappers.c. The most notable of these are MPUpvPortMalloc and MPUvPortFree.
The net effect of this is that MPUpvPortMalloc and MPUvPortFree are defined but no prototype is available to MPU-enabled code -- calling pvPortMalloc() results in the "privileged" pvPortMalloc() being called. If this is called from a "normal" task, there will be a memory protection error. I was expecting that the MPU shim in mpu_wrappers.c would be called, until I noticed the define was missing.
Long and short of it: you can't allocate and free memory from MPU-enabled code.
Adding these calls to mpu_wrappers.h is fairly simple -- is there any adverse implication of doing so which I may have overlooked?
Thanks,
Phil.
mpuwrappers.h seems to be missing #define statements for several of the
MPU wrapper functions which are defined in mpuwrappers.c. The most
notable of these are MPUpvPortMalloc and MPUvPortFree.
Probably deliberate with the rationale that unprivileged tasks should
not be allowed to dynamically allocate memory (directly).
The net effect of this is that MPUpvPortMalloc and MPUvPortFree are
defined but no prototype is available to MPU-enabled code -- calling
pvPortMalloc() results in the "privileged" pvPortMalloc() being called.
If this is called from a "normal" task, there will be a memory
protection error. I was expecting that the MPU shim in mpu_wrappers.c
would be called, until I noticed the define was missing.
This sounds confused. Either an MPU_...() function have both a
implementation in a C file and and entry in the header file, or it
should not be in either. Possibly it was removed from one (for the
reason above) but not the other. Either way it doesn't sound right and
needs to be straightened.
I'm not sure how calling pvPortMalloc() could result in
MPUpvPortMalloc() being called if the function is not in mpuwrappers.h
- I would expect it to result in the normal pvPortMalloc() being called
a there is nothing mapping it anywhere else.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.