public MemoryLayout GetLayoutFromICF(string pFileNameICF,string pNameDev)
{
MemoryLayout layout = new MemoryLayout { DeviceName = pNameDev, Memories = new List<Memory>() };
int StartFlash = NO_DATA;
int SizeFlash = NO_DATA;
/*int StartRAM = NO_DATA;
int SizeRAM = NO_DATA;
int StartCCM = NO_DATA;
int SizeCCM = NO_DATA;
*/
foreach (var ln in File.ReadAllLines(pFileNameICF))
{
var m = Regex.Match(ln, @"define symbol __ICFEDIT_region_([\w\d]+)_start__[ ]*=[ ]*([x0-9A-Faf]+)[ ]*;");
if (m.Success)
{
StartFlash = (int)ParseHex(m.Groups[2].Value);
continue;
}
m = Regex.Match(ln, @"define symbol __ICFEDIT_region_([\w\d]+)_end__[ ]*=[ ]*([x0-9A-Faf]+)[ ]*;");
if (m.Success)
{
SizeFlash = (int)ParseHex(m.Groups[2].Value);
MemoryType aTypeData = MemoryType.RAM;
string aNameData = m.Groups[1].Value;
if (m.Groups[1].Value.Contains("ROM"))
aTypeData = MemoryType.FLASH;
if (m.Groups[1].Value == "ROM")
aNameData = "FLASH";
else if (m.Groups[1].Value == "RAM")
aNameData = "SRAM";
if (StartFlash != NO_DATA && SizeFlash != NO_DATA)
{
SizeFlash -= StartFlash;
if ((SizeFlash % 1024) != 0) SizeFlash += 1;
layout.Memories.Add(new Memory
{
Name = aNameData,
Access = MemoryAccess.Undefined,// Readable | MemoryAccess.Writable | MemoryAccess.Executable
Type = aTypeData,
Start = (uint)StartFlash,
Size = (uint)SizeFlash
});
}
else
throw new Exception("Error ld size flash");
StartFlash = NO_DATA;
continue;
}
}
return layout;
}