This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

When I setup memory pool beginning with 0x0000, malloc doesn't work.

When:

init_mempool(0x0000, 1024);
p = malloc(10);
malloc always returns NULL.
But when:
init_mempool(0x2000, 1024);
p = malloc(10);
p gets a valid address.
Why does this happen?
Thanks.

Parents Reply Children
  • stay away from the allocs the '51 is NOT a PC

    Erik

  • "stay away from the allocs the '51 is NOT a PC"

    Very true.

    Perhaps you should just take a step back and ask youself why you want to use dynamic memory allocation on a small embedded controller like the 8051?


  • "Perhaps you should just take a step back and ask youself why you want to use dynamic memory allocation on a small embedded controller like the 8051? "

    I'm designing GUI components which will be displayed on a LCD panel. Each component is a small rectangular window on the display. To paint the component, I first get a canvas from the component, then draw shapes and strings on it, finally paint the canvas onto the display. The canvas is essentially a block of memory, whose size is different from component to component. Yes I can pre-define a global (or static) canvas which is big enough to hold any individual components. And there is nearly no more benefit to use the dynamic memory allocation than the fixed memory allocation in terms of the usage of memory. But the former seems more elegant, I think.
    Anyway, I appreciate your advice, and perhaps I will take your advice some day.


  • "As it says in the Manual,"
    "..."
    "Why don't you just have a look? "

    I did have a look at the source code. But at the first glance, the code is so complicated that I wasn't patient enough to read it through. Now I know this was not the case. Maybe the macro and typedef make things that. But it seems that there is no need to read it any more -- I think I've known where the question lies. Thanks anyway.

    d.curie