mem_module.c 2.58 KiB
#include "mem_module.h"
extern unsigned char mem_in_window(unsigned short int mem_start_address,unsigned short int mem_length,unsigned short int start_address,unsigned short int length);
void mem_module_init(TMemModule *module)
{
unsigned char i;
module->num_ram_segments=0;
module->num_eeprom_segments=0;
for(i=0;i<MAX_NUM_SEGMENTS;i++)
{
module->ram_segments[i].start_address=0x0000;
module->ram_segments[i].length=0x0000;
module->eeprom_segments[i].start_address=0x0000;
module->eeprom_segments[i].length=0x0000;
}
module->write_cmd=0x00000000;
module->read_cmd=0x00000000;
}
unsigned char mem_module_add_ram_segment(TMemModule *module,unsigned short int start_address, unsigned short int length)
{
TMemSegment *current_segment;
unsigned char current_seg;
if(module->num_ram_segments<MAX_NUM_SEGMENTS-1)
{
for(current_seg=0;current_seg<module->num_ram_segments;current_seg++)
{
current_segment=&module->ram_segments[current_seg];
if(mem_in_window(current_segment->start_address,current_segment->length,start_address,length))
return 0x00;
}
for(current_seg=0;current_seg<module->num_eeprom_segments;current_seg++)
{
current_segment=&module->eeprom_segments[current_seg];
if(mem_in_window(current_segment->start_address,current_segment->length,start_address,length))
return 0x00;
}
module->ram_segments[module->num_ram_segments].start_address=start_address;
module->ram_segments[module->num_ram_segments].length=length;
module->num_ram_segments++;
return 0x01;
}
else
return 0x00;
}
unsigned char mem_module_add_eeprom_segment(TMemModule *module,unsigned short int start_address, unsigned short int length)
{
TMemSegment *current_segment;
unsigned char current_seg;
if(module->num_eeprom_segments<MAX_NUM_SEGMENTS-1)
{
for(current_seg=0;current_seg<module->num_ram_segments;current_seg++)
{
current_segment=&module->ram_segments[current_seg];
if(mem_in_window(current_segment->start_address,current_segment->length,start_address,length))
return 0x00;
}
for(current_seg=0;current_seg<module->num_eeprom_segments;current_seg++)
{
current_segment=&module->eeprom_segments[current_seg];
if(mem_in_window(current_segment->start_address,current_segment->length,start_address,length))
return 0x00;
}
module->eeprom_segments[module->num_eeprom_segments].start_address=start_address;
module->eeprom_segments[module->num_eeprom_segments].length=length;
module->num_eeprom_segments++;
return 0x01;
}
else
return 0x00;
}