В настоящее время я работаю над встроенным проектом (STM32F103RB, CooCox CoIDE v.1.7.6 с arm-none-eabi-gcc 4.8 2013q4), и я пытаюсь понять, как malloc()
ведет себя на простой C
когда ОЗУ заполнено.
Мой STM32 имеет 20kB = 0x5000Bytes ОЗУ, 0x200 используются для стека.
#include <stdlib.h>
#include "stm32f10x.h"
struct list_el {
char weight[1024];
};
typedef struct list_el item;
int main(void)
{
item * curr;
// allocate until RAM is full
do {
curr = (item *)malloc(sizeof(item));
} while (curr != NULL);
// I know, free() is missing. Program is supposed to crash
return 0;
}
Я бы ожидал, что malloc()
вернет NULL
, как только куча будет слишком мала для выделения:
0x5000
(ОЗУ) - 0x83C
(bss) - 0x200
(стек) = 0x45C4
(куча)
Итак, при выполнении malloc()
в 18-й раз. Один элемент: 1024 = 0x400
Байты большие.
Но вместо этого uC вызывает HardFault_Handler(void)
после 18-го раза (даже не MemManager_Handler(void)
)
Есть ли у кого-нибудь совет, как прогнозировать сбой malloc()
, так как ожидание возврата NULL
не работает.
Спасибо.