Skip to content

Commit 3e7efff

Browse files
committed
Updated tools for managing the ESP32 toolchains
1 parent 2d59769 commit 3e7efff

File tree

4 files changed

+84
-3
lines changed

4 files changed

+84
-3
lines changed

generators/esp32/PeripheralRegisterParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public static HardwareRegisterSet[] ParsePeripheralRegisters(string socDir)
141141

142142
Regex rgiTimesNumber = new Regex(@"^[ (\t]*i[ \t)]*\*[ \t]*[ \t(]*0x([0-9a-fA-F]+)[ \t)]*$");
143143

144-
foreach (var match in File.ReadAllLines(Path.Combine(socDir, $@"include\soc\soc.h")).Select(line => rgBaseDefinition.Match(line)).Where(m => m.Success))
144+
foreach (var match in File.ReadAllLines(Path.Combine(socDir, $@"include\soc\reg_base.h")).Select(line => rgBaseDefinition.Match(line)).Where(m => m.Success))
145145
registerSets[match.Groups[1].Value] = new ConstructedRegisterSet
146146
{
147147
Name = match.Groups[1].Value,

tools/ESP32ToolchainUpdater/ESP32ToolchainUpdater.csproj

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<FileAlignment>512</FileAlignment>
1313
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
1414
<Deterministic>true</Deterministic>
15+
<LangVersion>8.0</LangVersion>
1516
</PropertyGroup>
1617
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
1718
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -43,6 +44,7 @@
4344
<Reference Include="System.Xml" />
4445
</ItemGroup>
4546
<ItemGroup>
47+
<Compile Include="MemoryMapUpdater.cs" />
4648
<Compile Include="Program.cs" />
4749
<Compile Include="Properties\AssemblyInfo.cs" />
4850
</ItemGroup>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
using BSPEngine;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Globalization;
5+
using System.IO;
6+
using System.Linq;
7+
using System.Runtime.CompilerServices;
8+
using System.Text;
9+
using System.Text.RegularExpressions;
10+
using System.Threading.Tasks;
11+
12+
namespace ESP32ToolchainUpdater
13+
{
14+
internal class MemoryMapUpdater
15+
{
16+
struct MemoryExtents
17+
{
18+
public uint Start, Length;
19+
public uint End => Start + Length;
20+
21+
public override string ToString() => $"{Start:x8}..{End:x8}";
22+
}
23+
24+
static string MapMemoryName(string nameFromBSP) => nameFromBSP switch
25+
{
26+
"DATA_FLASH" => "drom0_0_seg",
27+
"INSTR_FLASH" => "iram0_2_seg",
28+
"INSTR_RAM" => "iram0_0_seg",
29+
"DATA_RAM" => "dram0_0_seg",
30+
31+
"FLASH" => "irom_seg",
32+
"RAM" => "iram0_0_seg",
33+
"LPRAM" => "lp_reserved_seg",
34+
};
35+
36+
public static void UpdateMemoryMap(string bspXML, string deviceName, string mapFile)
37+
{
38+
Dictionary<string, MemoryExtents> memories = null;
39+
var rgMem = new Regex("([id]r[ao]m[^ \t]+|lp_reserved_seg)[ \t]+0x([0-9a-f]+)[ \t]+0x([0-9a-f]+)(.*)$");
40+
foreach(var line in File.ReadAllLines(mapFile))
41+
{
42+
if (line == "Memory Configuration")
43+
memories = new Dictionary<string, MemoryExtents>();
44+
else if (line == "Linker script and memory map")
45+
break;
46+
else if (memories != null)
47+
{
48+
var m = rgMem.Match(line);
49+
if (m.Success)
50+
{
51+
var extents = new MemoryExtents { Start = uint.Parse(m.Groups[2].Value, NumberStyles.HexNumber), Length = uint.Parse(m.Groups[3].Value, NumberStyles.HexNumber) };
52+
uint padding = extents.Start & 0xFFFFU;
53+
54+
extents.Start -= padding;
55+
extents.Length += padding;
56+
57+
memories[m.Groups[1].Value] = extents;
58+
}
59+
}
60+
}
61+
62+
var bsp = XmlTools.LoadObject<BoardSupportPackage>(bspXML);
63+
var dev = bsp.SupportedMCUs.FirstOrDefault(m => m.ID == deviceName) ?? throw new Exception("Unknown MCU:" + deviceName);
64+
foreach(var mem in dev.MemoryMap.Memories)
65+
{
66+
var extents = memories[MapMemoryName(mem.Name)];
67+
mem.Address = extents.Start;
68+
mem.Size = extents.Length;
69+
}
70+
71+
XmlTools.SaveObject(bsp, bspXML);
72+
}
73+
}
74+
}

tools/ESP32ToolchainUpdater/Program.cs

+7-2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ static void Main(string[] args)
4747
throw new Exception("Usage: ESP32ToolchainUpdater <old toolchain dir> <new toolchain dir>");
4848

4949
string oldDir = Path.GetFullPath(args[0]), newDir = Path.GetFullPath(args[1]);
50+
var bspXML = Path.Combine(newDir, @"esp32-bsp\BSP.xml");
51+
52+
//MemoryMapUpdater.UpdateMemoryMap(bspXML, "ESP32C6", @"E:\projects\temp\EmbeddedProject7\build\VisualGDB\Debug\blink.map");
53+
//MemoryMapUpdater.UpdateMemoryMap(bspXML, "ESP32C3", @"E:\projects\temp\EmbeddedProject5\build\VisualGDB\Debug\blink.map");
54+
return;
5055

5156
var oldToolchain = XmlTools.LoadObject<Toolchain>(Path.Combine(oldDir, "toolchain.xml"));
5257
var newToolchain = XmlTools.LoadObject<Toolchain>(Path.Combine(newDir, "toolchain.xml"));
@@ -94,12 +99,12 @@ static void Main(string[] args)
9499
newToolchain.BinaryDirectory = Path.GetDirectoryName(newToolchainExesByName["xtensa-esp32-elf-gcc.exe"][0]);
95100

96101
newToolchain.GCCVersion = QueryToolVersion(Path.Combine(newDir, newToolchain.BinaryDirectory, "xtensa-esp32-elf-gcc.exe"));
97-
newToolchain.GDBVersion = QueryToolVersion(Path.Combine(newDir, newToolchain.BinaryDirectory, "xtensa-esp32-elf-gdb.exe"));
102+
newToolchain.GDBVersion = QueryToolVersion(Path.Combine(newDir, newToolchainExesByName["xtensa-esp32-elf-gdb.exe"].First()));
98103
newToolchain.BinutilsVersion = QueryToolVersion(Path.Combine(newDir, newToolchain.BinaryDirectory, "xtensa-esp32-elf-as.exe"));
99104

100105
XmlTools.SaveObject(newToolchain, Path.Combine(newDir, "toolchain.xml"));
101106

102-
var bsp = XmlTools.LoadObject<BoardSupportPackage>(Path.Combine(newDir, @"esp32-bsp\BSP.xml"));
107+
var bsp = XmlTools.LoadObject<BoardSupportPackage>(bspXML);
103108
foreach (var mcu in bsp.SupportedMCUs)
104109
{
105110
var v = mcu.AdditionalSystemVars.FirstOrDefault(kv => kv.Key == "com.sysprogs.visualgdb.gdb_override");

0 commit comments

Comments
 (0)