We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
When:
init_mempool(0x0000, 1024); p = malloc(10);
init_mempool(0x2000, 1024); p = malloc(10);
What version of the compiler do you use? What is the return value from init_mempool? Jon
What else in your program might use memory starting at address 0? Have you reserved that range of memory to use as your heap? I'd expect the heap to start near the top of memory (under any reentrant stack), unless you have no other xdata usage whatsoever.
"What version of the compiler do you use?" "What is the return value from init_mempool?" The version of the compiler is C51_6.23a. And I remember init_mempool returns nothing.
"What else in your program might use memory starting at address 0? Have you reserved that range of memory to use as your heap? I'd expect the heap to start near the top of memory (under any reentrant stack), unless you have no other xdata usage whatsoever. " Yes, this is the matter. An array should be declared to reserve the memory used by the heap. I'm thinking why init_mempool doesn't do that for me? Thanks a lot. d.curie
I'm thinking why init_mempool doesn't do that for me init_mempool() is just a C function. It can't do anything until the code is running on your hardware. Allocating variables to particular addresses, however, is done by the linker, before the code ever starts running. The addresses of variables are embedded into the code. You need to tell the linker where you plan to put the heap, so that it can be sure to keep other variables out of that address range.
Yes. When I try to modify the source code of init_mempool to provide the function reserving the memory heap, it's obvious that I can't accomplish that, just as what you've pointed out.