50 lines
1.0 KiB
C
50 lines
1.0 KiB
C
|
|
#include "types.h"
|
|
#include "util.h"
|
|
#include "mm_space.h"
|
|
#include "mpu.h"
|
|
void mm_space_init(mm_space_t *mm_space)
|
|
{
|
|
for (int i = 0; i < REGION_NUM; i++)
|
|
{
|
|
mm_space->pt_regions[i].region_inx = -1;
|
|
}
|
|
}
|
|
region_info_t *mm_space_alloc_pt_region(mm_space_t *m_space)
|
|
{
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
/*TODO:原子操作*/
|
|
if (m_space->pt_regions[i].region_inx < 0)
|
|
{
|
|
m_space->pt_regions[i].region_inx = (int16_t)i;
|
|
return &m_space->pt_regions[i];
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
void mm_space_free_pt_region(mm_space_t *m_space, region_info_t *ri)
|
|
{
|
|
ri->region_inx = -1;
|
|
}
|
|
|
|
bool_t mm_space_add(mm_space_t *m_space,
|
|
umword_t addr,
|
|
umword_t size,
|
|
uint8_t attrs
|
|
)
|
|
{
|
|
region_info_t *ri = mm_space_alloc_pt_region(m_space);
|
|
|
|
if (!ri)
|
|
{
|
|
return FALSE;
|
|
}
|
|
mpu_calc_regs(ri, addr, ffs(size), attrs, 0);
|
|
return TRUE;
|
|
}
|
|
void mm_space_del(mm_space_t *m_space)
|
|
{
|
|
/*TODO:*/
|
|
}
|