Похоже, что Malloc требует слишком много памяти
У меня есть приложение STM32F0, использующее компилятор yagarto GCC. Я реализовал _sbrk newlib_stubs.c. Проблема, с которой я сталкиваюсь, заключается в том, что я вызываю malloc(256) в свою очередь malloc при вызове _sbrk и запросе 4K памяти. В моей системе всего 8K, так что, очевидно, это проблема. Я отслеживал вызовы _sbrk, и, кажется, до этого он делал несколько вызовов, выделяя меньшие объемы памяти.
Прямо сейчас я обхожу это, держа мой нос, чтобы избежать зловония и делая что-то вроде:
if(requested > 512)
requested = 512;
в _sbrk, прежде чем я переместить кучу.
Хотя система кажется надежной, я вполне уверен, что она вернется и будет преследовать меня, когда я меньше всего этого ожидаю.
1 ответ
С тонкими намеками, предоставленными в комментариях о неиспользовании malloc, я просто создал что-то, чтобы распределить свою собственную память. Мне никогда не нужно выпускать это, чтобы сделать это простым. Единственное, что меня поразило около часа, - это поддерживать 32-битное выравнивание.
Вот моя реализация pm_ выступает за бедняков.
#define HEAPSIZE 0x800 //2K
uint16_t __heapPtr = 0;
uint8_t __customHeap[HEAPSIZE];
void *pm_malloc(uint16_t size){
while(__heapPtr % 4 != 0)
__heapPtr++;
void *block = &__customHeap[__heapPtr];
if(size + __heapPtr > HEAPSIZE)
return 0;
__heapPtr += size;
return block;
}
Последние 15 лет моя жизнь была на C#, Java и Objective-C, поэтому любая обратная связь приветствуется.