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 № 1Od 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);