diff --git a/se/sics/mspsim/cli/AbstractWindowDataHandler.java b/se/sics/mspsim/cli/AbstractWindowDataHandler.java index 046dff2..15a799c 100644 --- a/se/sics/mspsim/cli/AbstractWindowDataHandler.java +++ b/se/sics/mspsim/cli/AbstractWindowDataHandler.java @@ -60,7 +60,7 @@ public abstract class AbstractWindowDataHandler implements WindowDataHandler { public abstract void setProperty(int index, String param, String[] args); - public int atoi(String data, int defaultValue) { + public static int atoi(String data, int defaultValue) { try { return Integer.parseInt(data); } catch (NumberFormatException e) { @@ -68,4 +68,11 @@ public abstract class AbstractWindowDataHandler implements WindowDataHandler { } } + public static double atod(String data, double defaultValue) { + try { + return Double.parseDouble(data); + } catch (NumberFormatException e) { + return defaultValue; + } + } } diff --git a/se/sics/mspsim/core/Timer.java b/se/sics/mspsim/core/Timer.java index 43fec59..f33660a 100644 --- a/se/sics/mspsim/core/Timer.java +++ b/se/sics/mspsim/core/Timer.java @@ -610,9 +610,6 @@ public class Timer extends IOUnit { } } -// System.out.println("UpdateCounter: C1: " + counter + " C2:" + ctr); - - if (DEBUG) { System.out.println(getName() + ": Updating counter cycctr: " + cycctr + " divider: " + divider + " mode:" + mode + " => " + counter); } diff --git a/se/sics/mspsim/extutil/jfreechart/LineChart.java b/se/sics/mspsim/extutil/jfreechart/LineChart.java index 019f322..5dce52e 100644 --- a/se/sics/mspsim/extutil/jfreechart/LineChart.java +++ b/se/sics/mspsim/extutil/jfreechart/LineChart.java @@ -126,7 +126,7 @@ public class LineChart extends JFreeWindowDataHandler { addSeries(); } for (int i = 0; i < parts.length; i++) { - dataset.getSeries(i).add(point, atoi(parts[i], 0)); + dataset.getSeries(i).add(point, atod(parts[i], 0)); } point++; panel.repaint(); diff --git a/se/sics/mspsim/extutil/jfreechart/LineSampleChart.java b/se/sics/mspsim/extutil/jfreechart/LineSampleChart.java index 02b09d0..f5fc241 100644 --- a/se/sics/mspsim/extutil/jfreechart/LineSampleChart.java +++ b/se/sics/mspsim/extutil/jfreechart/LineSampleChart.java @@ -64,7 +64,7 @@ public class LineSampleChart extends JFreeWindowDataHandler { String parts[] = line.trim().split(" "); dataSeries.clear(); for (int i = 0; i < parts.length; i++) { - dataSeries.add(i, atoi(parts[i], 0)); + dataSeries.add(i, atod(parts[i], 0)); } panel.repaint(); } diff --git a/se/sics/mspsim/platform/GenericNode.java b/se/sics/mspsim/platform/GenericNode.java index 87ba36d..8b28ae2 100644 --- a/se/sics/mspsim/platform/GenericNode.java +++ b/se/sics/mspsim/platform/GenericNode.java @@ -103,13 +103,7 @@ public abstract class GenericNode extends Chip implements Runnable { IHexReader reader = new IHexReader(); reader.readFile(memory, firmwareFile = args[0]); } else { - elf = ELF.readELF(firmwareFile = args[0]); - elf.loadPrograms(memory); - MapTable map = elf.getMap(); - cpu.getDisAsm().setMap(map); - cpu.setMap(map); - registry.registerComponent("elf", elf); - registry.registerComponent("mapTable", map); + loadFirmware(args[0], memory); } cpu.reset(); @@ -160,6 +154,17 @@ public abstract class GenericNode extends Chip implements Runnable { } } + public void loadFirmware(String name, int[] memory) throws IOException { + stop(); + elf = ELF.readELF(firmwareFile = name); + elf.loadPrograms(memory); + MapTable map = elf.getMap(); + cpu.getDisAsm().setMap(map); + cpu.setMap(map); + registry.registerComponent("elf", elf); + registry.registerComponent("mapTable", map); + } + // A step that will break out of breakpoints! public void step(int nr) { if (!cpu.isRunning()) { diff --git a/se/sics/mspsim/util/DataSource.java b/se/sics/mspsim/util/DataSource.java index 5028241..a3743a2 100644 --- a/se/sics/mspsim/util/DataSource.java +++ b/se/sics/mspsim/util/DataSource.java @@ -39,5 +39,6 @@ package se.sics.mspsim.util; public interface DataSource { + public double getDoubleValue(); public int getValue(); } diff --git a/se/sics/mspsim/util/MultiDataSource.java b/se/sics/mspsim/util/MultiDataSource.java index a7cfaef..e623471 100644 --- a/se/sics/mspsim/util/MultiDataSource.java +++ b/se/sics/mspsim/util/MultiDataSource.java @@ -44,6 +44,7 @@ public interface MultiDataSource { public int getModeMax(); + public double getDoubleValue(int mode); public int getValue(int mode); } diff --git a/se/sics/mspsim/util/OperatingModeStatistics.java b/se/sics/mspsim/util/OperatingModeStatistics.java index cf1fcab..1f252ff 100644 --- a/se/sics/mspsim/util/OperatingModeStatistics.java +++ b/se/sics/mspsim/util/OperatingModeStatistics.java @@ -137,7 +137,7 @@ public class OperatingModeStatistics { } // returns percentage since last call... - public int getValue() { + public double getDoubleValue() { long diff = cpu.cycles - lastCycles; if (diff == 0) return 0; long val = entry.getValue(mode, cpu.cycles); @@ -147,7 +147,11 @@ public class OperatingModeStatistics { if (operation == OP_INVERT) { return (int) (100 - 100 * valDiff / diff); } - return (int) (100 * valDiff / diff); + return (100.0 * valDiff / diff); + } + + public int getValue() { + return (int) getDoubleValue(); } } @@ -171,6 +175,10 @@ public class OperatingModeStatistics { // returns percentage since last call... public int getValue(int mode) { + return (int) getDoubleValue(mode); + } + + public double getDoubleValue(int mode) { long diff = cpu.cycles - lastCycles[mode]; if (diff == 0) return 0; @@ -178,7 +186,7 @@ public class OperatingModeStatistics { long valDiff = (val - lastValue[mode]); lastValue[mode] = val; lastCycles[mode] = cpu.cycles; - return (int) (100 * valDiff / diff); + return (100.0 * valDiff / diff); } } diff --git a/se/sics/mspsim/util/StackMonitor.java b/se/sics/mspsim/util/StackMonitor.java index f49b7ee..91229e8 100644 --- a/se/sics/mspsim/util/StackMonitor.java +++ b/se/sics/mspsim/util/StackMonitor.java @@ -20,6 +20,9 @@ public class StackMonitor implements CPUMonitor { stackMax = stack; return tmp; } + public double getDoubleValue() { + return getValue(); + } }; private DataSource minDataSource = new DataSource() { @@ -28,12 +31,18 @@ public class StackMonitor implements CPUMonitor { stackMin = stack; return tmp; } + public double getDoubleValue() { + return getValue(); + } }; private DataSource dataSource = new DataSource() { public int getValue() { return stack; } + public double getDoubleValue() { + return getValue(); + } }; public StackMonitor(MSP430 cpu) { diff --git a/se/sics/mspsim/util/StatCommands.java b/se/sics/mspsim/util/StatCommands.java index 6a1baaa..05c83b2 100644 --- a/se/sics/mspsim/util/StatCommands.java +++ b/se/sics/mspsim/util/StatCommands.java @@ -139,10 +139,10 @@ public class StatCommands implements CommandBundle { MultiDataSource ds = (MultiDataSource) s; for (int k = 0, m = ds.getModeMax(); k <= m; k++) { if (k > 0) out.print(' '); - out.print(ds.getValue(k)); + out.print(((int) (ds.getDoubleValue(k) * 100)) / 100.0); } } else { - out.print(((DataSource)s).getValue()); + out.print(((int)((DataSource)s).getDoubleValue() * 100) / 100.0); } } out.println();