Hard fault in __free_r

Trampas Stern trampas@gmail.com
Sat Dec 2 14:20:00 GMT 2017


So I was trying to be cleaver, which I should not do....

I have an embedded design where I was creating driver classes.  For low
power I wanted the drivers to get turned off when not in use.  Therefore I
was looking at using smart pointers, and having destructor turn off the
driver.

Note smart pointers as implemented call new and malloc memory on the heap,
but I could write a new template/class that would not.  However I ran into
another problem.

I create some memory for my driver, say UART like so:

uint8_t UartStorage[sizeof(UART)]  __attribute__ ((aligned (8)));

Then I allocate my UART like:

Uart *ptrUart=new(UartStorage) UART(....);

However I have found that sometimes when I call delete on the pointer the
processor will get a hard fault in __free_r.  I could not find the source
for __free_r to see if the static allocation in new was causing a problem
or not, but thought I would post and see if others have seen this?
Also this hard fault was not consistent. That is after allocating and
deleting object a random amount of times from the same static storage
address it would fail.

I took this as a sign I was pushing the bleeding edge a bit too much and
went back to good old static allocation (no new) and just doing an
acquire() and release().

Thanks,
Trampas



More information about the Newlib mailing list