Skip to content
Snippets Groups Projects
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;
}