/ / malloc nie zawodzi w Keil C - c, keil, 8051

malloc nie zawodzi w Keil C - c, keil, 8051

Jak mogę sprawdzić, czy malloc () nie zadziałał w Keil C?

unsigned char xdata malloc_mempool [0x100];
void display()
{
unsigned char xdata *ptr;
int a;
init_mempool (&malloc_mempool, sizeof(malloc_mempool));

ptr = malloc(9000000);
if(ptr != 0)
{
a = 7;
free(ptr);
} else {
a = 9;
}
}

Jak stwierdzono w http://www.keil.com/support/man/docs/c51/c51_malloc.htm malloc zwróci wskaźnik zerowy, jeśli nie ma wystarczającej ilości pamięci, aby spełnić żądanie alokacji. Oczywiście nie jest to tak dużo pamięci w 8051. Ale wynik jest zawsze 7.

Odpowiedzi:

2 dla odpowiedzi № 1

Od Zrozumienie organizacji pamięci mikrokontrolera 8051 8051 ma maksymalnie 64 KB pamięci.

Więc będzie używać 2 bajtów dla wskaźników. 9000000 dziesiętny to 0x895440 w heksie, czyli 3 bajty.

Bardzo prawdopodobne, że funkcja malloc () po prostu zignoruje bity, których nie może użyć, więc w rzeczywistości wywołanie, które robisz, jest

ptr = malloc(0x5440);

który jest

ptr = malloc(21568);