mirror of
https://github.com/vivier/EMILE.git
synced 2025-01-08 16:33:04 +00:00
Try to allocate memory to not have a bloc across two banks, correct management of top memory, and low memory
This commit is contained in:
parent
35639aff0c
commit
1c384cf5c8
@ -49,15 +49,27 @@ static int memory_find_area_by_addr(unsigned long start)
|
|||||||
static int memory_find_area_by_size(unsigned long size)
|
static int memory_find_area_by_size(unsigned long size)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int first_choice = -1;
|
||||||
|
unsigned long phys_start, phys_end;
|
||||||
|
|
||||||
for (i = 0; i < pool->area_number; i++)
|
for (i = 0; i < pool->area_number; i++)
|
||||||
{
|
{
|
||||||
if (size <= pool->area[i].size)
|
if (size <= pool->area[i].size)
|
||||||
{
|
{
|
||||||
return i;
|
if (first_choice == -1)
|
||||||
|
first_choice = i;
|
||||||
|
|
||||||
|
/* try to take all bloc in same memory bank */
|
||||||
|
|
||||||
|
logical2physical(pool->area[i].address, &phys_start);
|
||||||
|
logical2physical(pool->area[i].address + size - 1,
|
||||||
|
&phys_end);
|
||||||
|
|
||||||
|
if (phys_start + size - 1 == phys_end)
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return first_choice;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void memory_remove(unsigned long start, unsigned long end)
|
static void memory_remove(unsigned long start, unsigned long end)
|
||||||
@ -183,7 +195,7 @@ void memory_init()
|
|||||||
|
|
||||||
/* add all memory to pool */
|
/* add all memory to pool */
|
||||||
|
|
||||||
memory_add(0, MemTop);
|
memory_add(0, bank_mem_avail());
|
||||||
|
|
||||||
/* remove the pool array */
|
/* remove the pool array */
|
||||||
|
|
||||||
@ -195,9 +207,9 @@ void memory_init()
|
|||||||
memory_remove( (unsigned long)&__bootloader_start,
|
memory_remove( (unsigned long)&__bootloader_start,
|
||||||
(unsigned long)&__bootloader_end);
|
(unsigned long)&__bootloader_end);
|
||||||
|
|
||||||
/* remove the final address of the kernel */
|
/* system */
|
||||||
|
|
||||||
memory_remove(0x0000, 0x180000); /* FIXME: why 0x180000 ? */
|
memory_remove(0x0000, 0x8000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *malloc(size_t size)
|
void *malloc(size_t size)
|
||||||
|
Loading…
Reference in New Issue
Block a user