Better error message if pull up and pull down are connected to the same net.

This commit is contained in:
hneemann 2017-03-20 16:32:51 +01:00
parent d9c9118e2e
commit c6130a0a12
4 changed files with 23 additions and 13 deletions

View File

@ -1,7 +1,5 @@
package de.neemann.digital.core; package de.neemann.digital.core;
import de.neemann.digital.lang.Lang;
import java.util.List; import java.util.List;
/** /**
@ -14,9 +12,12 @@ public class BurnException extends RuntimeException {
/** /**
* Creates a new instance * Creates a new instance
*
* @param message the message
* @param values the values connected to the net
*/ */
public BurnException(List<ObservableValue> values) { public BurnException(String message, List<ObservableValue> values) {
super(Lang.get("err_burnError")); super(message);
this.values = values; this.values = values;
} }

View File

@ -3,6 +3,7 @@ package de.neemann.digital.core.wiring.bus;
import de.neemann.digital.core.BurnException; import de.neemann.digital.core.BurnException;
import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.ObservableValue;
import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.core.element.PinDescription;
import de.neemann.digital.lang.Lang;
import java.util.List; import java.util.List;
@ -15,7 +16,9 @@ import java.util.List;
public abstract class AbstractBusHandler { public abstract class AbstractBusHandler {
private final BusModelStateObserver obs; private final BusModelStateObserver obs;
private boolean burn;
private enum State {ok, burn, both}
private State burn;
private int addedVersion = -1; private int addedVersion = -1;
/** /**
@ -53,9 +56,9 @@ public abstract class AbstractBusHandler {
*/ */
public void recalculate() { public void recalculate() {
long value = 0; long value = 0;
burn = false; burn = State.ok;
if (getResistor().equals(PinDescription.PullResistor.both)) { if (getResistor().equals(PinDescription.PullResistor.both)) {
burn = true; burn = State.both;
set(0, true); set(0, true);
} else { } else {
boolean highz = true; boolean highz = true;
@ -66,7 +69,7 @@ public abstract class AbstractBusHandler {
value = input.getValue(); value = input.getValue();
} else { } else {
if (value != input.getValue()) if (value != input.getValue())
burn = true; burn = State.burn;
} }
} }
} }
@ -86,7 +89,7 @@ public abstract class AbstractBusHandler {
} }
// if burn condition and not yet added for post step check add for post step check // if burn condition and not yet added for post step check add for post step check
if (burn && (obs.getVersion() != addedVersion)) { if (burn != State.ok && (obs.getVersion() != addedVersion)) {
addedVersion = obs.getVersion(); addedVersion = obs.getVersion();
obs.addCheck(this); obs.addCheck(this);
} }
@ -99,8 +102,12 @@ public abstract class AbstractBusHandler {
* an exception is thrown. * an exception is thrown.
*/ */
public void checkBurn() { public void checkBurn() {
if (burn) switch (burn) {
throw new BurnException(getInputs()); case burn:
throw new BurnException(Lang.get("err_burnError"), getInputs());
case both:
throw new BurnException(Lang.get("err_pullUpAndDown"), getInputs());
}
} }
} }

View File

@ -379,7 +379,8 @@ Die gesammte Speichergröße beträgt damit damit dx*dy*2 Speicherworte.</string
<string name="err_breakTimeOut">Nach {0} Zyklen ist kein Break aufgetreten</string> <string name="err_breakTimeOut">Nach {0} Zyklen ist kein Break aufgetreten</string>
<string name="err_builder_exprNotSupported">Ausdruck {0} wird nicht unterstützt.</string> <string name="err_builder_exprNotSupported">Ausdruck {0} wird nicht unterstützt.</string>
<string name="err_builder_operationNotSupported">Operation {0} wird nicht unterstützt.</string> <string name="err_builder_operationNotSupported">Operation {0} wird nicht unterstützt.</string>
<string name="err_burnError">Es sind mehrere zusammengeschaltete Ausgänge gleichzeitig aktiv</string> <string name="err_burnError">Es sind mehrere zusammengeschaltete Ausgänge gleichzeitig aktiv und haben einen Kurzschluss erzeugt.</string>
<string name="err_pullUpAndDown">Ein Pull-Up- und Pull-Down-Widerstand in einem Netz ist nicht erlaubt.</string>
<string name="err_cannotAnalyse_N">Element {0} kann nicht analysiert werden.</string> <string name="err_cannotAnalyse_N">Element {0} kann nicht analysiert werden.</string>
<string name="err_containsVarAndNotVar">Enthält [var] und [nicht var]</string> <string name="err_containsVarAndNotVar">Enthält [var] und [nicht var]</string>
<string name="err_duplicatePinLabel">Pin {0} in Element {1} exitiert mehrfach</string> <string name="err_duplicatePinLabel">Pin {0} in Element {1} exitiert mehrfach</string>

View File

@ -366,7 +366,8 @@
<string name="err_breakTimeOut">Break timeout after {0} cycles</string> <string name="err_breakTimeOut">Break timeout after {0} cycles</string>
<string name="err_builder_exprNotSupported">Expression {0} not supported</string> <string name="err_builder_exprNotSupported">Expression {0} not supported</string>
<string name="err_builder_operationNotSupported">Operation {0} not supported</string> <string name="err_builder_operationNotSupported">Operation {0} not supported</string>
<string name="err_burnError">More then one output is active on a wire</string> <string name="err_burnError">More then one output is active on a wire, causing a short circuit.</string>
<string name="err_pullUpAndDown">It is not allowed to connect a pull-up and pull-down resistor to the same net.</string>
<string name="err_cannotAnalyse_N">Cannot analyse Node {0}</string> <string name="err_cannotAnalyse_N">Cannot analyse Node {0}</string>
<string name="err_containsVarAndNotVar">Contains [var] and [not var]</string> <string name="err_containsVarAndNotVar">Contains [var] and [not var]</string>
<string name="err_duplicatePinLabel">Pin {0} in component {1} exists twice</string> <string name="err_duplicatePinLabel">Pin {0} in component {1} exists twice</string>