Watchdog-Checkbox

This commit is contained in:
2024-05-14 11:45:35 +02:00
parent b842d6eb05
commit 8f35f4f914
6 changed files with 78 additions and 210 deletions

View File

@ -45,11 +45,9 @@ public class Controller_Frontend {
@FXML
private TableView<Table.DataEntry> tableView;
@FXML
private ListView<String> lstContentListView;
@FXML
private Label pclLabel;
@ -77,20 +75,20 @@ public class Controller_Frontend {
@FXML
private Label totalExecutionTimeLabel;
private volatile boolean isAutoRunActive = true;
@FXML
private void stopAutoRun(ActionEvent event) {
private CheckBox wdtCheck;
private static volatile boolean isAutoRunActive = true;
public static void stopRunFromBackend(){
isAutoRunActive = false;
}
@FXML
private void stopAutoRun(ActionEvent event) {
isAutoRunActive = false;
}
@FXML
@ -123,8 +121,6 @@ public class Controller_Frontend {
}
@FXML
private void stepintoButton(ActionEvent event) throws IOException {
if (lstContentListView.getItems().isEmpty()) {
@ -204,37 +200,11 @@ public class Controller_Frontend {
}
@FXML
private void stepThroughFile(ActionEvent event) {
if (lstContentListView.getItems().isEmpty()) {
// Datei ist nicht geladen oder leer
return;
}
// Aktuelle Zeile abrufen
int currentIndex = lstContentListView.getSelectionModel().getSelectedIndex();
// if (currentIndex == )
// Wenn keine Zeile ausgewählt ist, starte von der ersten Zeile
if (currentIndex == -1) {
currentIndex = 1;
} else {
// Gehe zur nächsten Zeile
currentIndex++;
}
// Überprüfen, ob currentIndex innerhalb der Grenzen liegt
if (currentIndex >= lstContentListView.getItems().size()) {
// Wenn das Ende der Datei erreicht ist, zeige eine Meldung an
System.out.println("End of file reached.");
return;
}
// Zeile auswählen und anzeigen
lstContentListView.scrollTo(currentIndex);
lstContentListView.getSelectionModel().select(currentIndex + 1);
lstContentListView.scrollTo(currentIndex + 1);
public void toggleWatchdog(ActionEvent actionEvent) {
if (wdtCheck.isSelected())
WatchdogTimer.enable();
else
WatchdogTimer.disable();
}
@FXML
@ -248,12 +218,6 @@ public class Controller_Frontend {
@FXML
private ToggleButtonGroup bgTRISA4;
@FXML
private ToggleButtonGroup bgTRISA5;
@FXML
private ToggleButtonGroup bgTRISA6;
@FXML
private ToggleButtonGroup bgTRISA7;
@FXML
private ToggleButtonGroup bgTRISB0;
@FXML
private ToggleButtonGroup bgTRISB1;
@ -280,12 +244,6 @@ public class Controller_Frontend {
@FXML
private ToggleButtonGroup bgPORTA4;
@FXML
private ToggleButtonGroup bgPORTA5;
@FXML
private ToggleButtonGroup bgPORTA6;
@FXML
private ToggleButtonGroup bgPORTA7;
@FXML
private ToggleButtonGroup bgPORTB0;
@FXML
private ToggleButtonGroup bgPORTB1;
@ -306,9 +264,9 @@ public class Controller_Frontend {
private static ToggleButtonGroup[] allPORTbuttons;
public void initialize() {
ToggleButtonGroup [] allTRISButtons = {bgTRISA0, bgTRISA1, bgTRISA2, bgTRISA3, bgTRISA4, bgTRISA5, bgTRISA6, bgTRISA7, bgTRISB0, bgTRISB1, bgTRISB2, bgTRISB3, bgTRISB4, bgTRISB5, bgTRISB6, bgTRISB7};
ToggleButtonGroup [] allPORTButtons = {bgPORTA0, bgPORTA1, bgPORTA2, bgPORTA3, bgPORTA4, bgPORTA5, bgPORTA6, bgPORTA7, bgPORTB0, bgPORTB1, bgPORTB2, bgPORTB3, bgPORTB4, bgPORTB5, bgPORTB6, bgPORTB7};
for (int i = 0; i<16; i++) {
ToggleButtonGroup [] allTRISButtons = {bgTRISA0, bgTRISA1, bgTRISA2, bgTRISA3, bgTRISA4, bgTRISB0, bgTRISB1, bgTRISB2, bgTRISB3, bgTRISB4, bgTRISB5, bgTRISB6, bgTRISB7};
ToggleButtonGroup [] allPORTButtons = {bgPORTA0, bgPORTA1, bgPORTA2, bgPORTA3, bgPORTA4, bgPORTB0, bgPORTB1, bgPORTB2, bgPORTB3, bgPORTB4, bgPORTB5, bgPORTB6, bgPORTB7};
for (int i = 0; i<allPORTButtons.length; i++) {
ToggleButtonGroupExt.get().addAlwaysOneSelectedSupport(allTRISButtons[i]);
ToggleButtonGroupExt.get().addAlwaysOneSelectedSupport(allPORTButtons[i]);
}
@ -317,7 +275,6 @@ public class Controller_Frontend {
lstContentListView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
lstContentListView.getStylesheets().add(Objects.requireNonNull(getClass().getResource("styles.css")).toExternalForm());
autoRunGUI.setOnAction(this::autoRunGUI);
stopButton.setOnAction(this::stopAutoRun);
}
@ -339,6 +296,7 @@ public class Controller_Frontend {
public static ToggleButtonGroup [] getPORTbuttons() {
return allPORTbuttons;
}
}

View File

@ -11,6 +11,7 @@ import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.io.IOException;
import java.util.Objects;
public class CreateWindow extends Application {
@ -33,6 +34,7 @@ public class CreateWindow extends Application {
grid.relocate(0, 0);
grid.getStylesheets().add(Objects.requireNonNull(getClass().getResource("styles.css")).toExternalForm());
Scene scene = new Scene(grid, 1800, 800);
primaryStage.setScene(scene);
primaryStage.setTitle("Simulator");

View File

@ -53,7 +53,7 @@ public class IOPorts {
}
private static void refreshPorts() {
DataRegister.setDirectRegister(PORTA, ((~((~dataLatch[A])&0xFF | trisLatch[A])) | (trisLatch[A] & DataRegister.getDirectRegister(PORTA))) & 0xFF);
DataRegister.setDirectRegister(PORTA, ((~((~dataLatch[A])&0x1F | trisLatch[A])) | (trisLatch[A] & DataRegister.getDirectRegister(PORTA))) & 0xFF);
DataRegister.setDirectRegister(PORTB, ((~((~dataLatch[B])&0xFF | trisLatch[B])) | (trisLatch[B] & DataRegister.getDirectRegister(PORTB))) & 0xFF);
DataRegister.setDirectRegister(TRISA, trisLatch[A]);
DataRegister.setDirectRegister(TRISB, trisLatch[B]);

View File

@ -3,18 +3,20 @@ package fabrik.simulator.pic16f84;
public class WatchdogTimer {
private static long watchdogTime;
private static long lastReset = 0;
private static boolean enabled = false;
private static long getTimeFromRegister() {
return (PreScaler.isPrescalerOnTimer()) ? 18L : PreScaler.getFactor() * 18L;
}
public static void testAndTrigger () {
public static void testAndTrigger() {
watchdogTime = getTimeFromRegister() * 1000;
if (!PreScaler.isPrescalerOnTimer() && (Commands.getTotalExecutionTime() >= (watchdogTime + lastReset))){
if (enabled && (Commands.getTotalExecutionTime() >= (watchdogTime + lastReset - 1))){
DataRegister.resetPC();
System.err.println("Watchdog Timer triggered");
DataRegister.clearBit(3, 4);
lastReset = Commands.getTotalExecutionTime();
Controller_Frontend.stopRunFromBackend();
}
}
@ -24,4 +26,12 @@ public class WatchdogTimer {
DataRegister.setBit(3, 3);
DataRegister.setBit(3, 4);
}
public static void enable() {
enabled = true;
}
public static void disable() {
enabled = false;
}
}

View File

@ -1,5 +0,0 @@
.list-cell:selected {
-fx-background-color: yellow;
}

View File

@ -3,11 +3,13 @@
<?import com.gluonhq.charm.glisten.control.ToggleButtonGroup?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.SeparatorMenuItem?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.ToggleButton?>
<?import javafx.scene.effect.Blend?>
<?import javafx.scene.layout.AnchorPane?>
@ -19,21 +21,42 @@
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Label?>
<AnchorPane xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fabrik.simulator.pic16f84.Controller_Frontend" stylesheets="styles.css">
<AnchorPane stylesheets="@styles.css" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fabrik.simulator.pic16f84.Controller_Frontend">
<children>
<ListView fx:id="lstContentListView" prefHeight="400.0" prefWidth="600.0" />
<Button fx:id="stepintoButton" layoutX="42.0" layoutY="400.0" mnemonicParsing="false" onAction="#stepintoButton" text="Step IN" />
<ListView fx:id="lstContentListView" layoutY="31.0" prefHeight="645.0" prefWidth="600.0" />
<HBox layoutY="688.0" prefHeight="24.0" prefWidth="600.0">
<children>
<Button fx:id="stepintoButton" mnemonicParsing="false" onAction="#stepintoButton" text="Step IN">
<opaqueInsets>
<Insets right="50.0" />
</opaqueInsets>
<HBox.margin>
<Insets left="10.0" />
</HBox.margin>
</Button>
<!--RIchtiger AUtorun button für die Gui der funktioniert -->
<Button fx:id="autoRunGUI" layoutX="182.0" layoutY="400.0" text="Auto Run" onAction="#autoRunGUI"/>
<Button fx:id="stopButton" layoutX="302.0" layoutY="400.0" text="Stop" onAction="#stopAutoRun"/>
<Button fx:id="autoRunGUI" onAction="#autoRunGUI" text="Auto Run">
<HBox.margin>
<Insets left="50.0" right="50.0" />
</HBox.margin>
</Button>
<Button fx:id="stopButton" onAction="#stopAutoRun" text="Stop" />
</children>
</HBox>
<VBox layoutX="14.0" layoutY="727.0">
<children>
<Label fx:id="totalExecutionTimeLabel" text="Total Execution Time: " />
<CheckBox fx:id="wdtCheck" mnemonicParsing="false" onAction="#toggleWatchdog" text="Watchdog-Timer">
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</CheckBox>
</children>
</VBox>
<Label fx:id="totalExecutionTimeLabel" text="Total Execution Time: " layoutX="42.0" layoutY="450.0"/>
<HBox layoutX="807.0" layoutY="134.0" prefHeight="293.0" prefWidth="701.0">
<HBox layoutX="659.0" layoutY="53.0" prefHeight="293.0" prefWidth="701.0">
<children>
<GridPane alignment="CENTER" gridLinesVisible="true" prefHeight="273.0" prefWidth="687.0">
<columnConstraints>
@ -69,50 +92,7 @@
</Text>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="10.0" layoutY="10.0" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="3">
<children>
<Text nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" text="5">
<font>
<Font name="System Italic" size="20.0" />
</font>
</Text>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="132.0" layoutY="10.0" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1">
<children>
<Text nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" text="7">
<font>
<Font name="System Italic" size="20.0" />
</font>
</Text>
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="2">
<children>
<Text nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" text="6">
<font>
<Font name="System Italic" size="20.0" />
</font>
</Text>
</children>
</VBox>
<VBox alignment="CENTER" GridPane.columnIndex="3" GridPane.rowIndex="1">
<children>
<ToggleButtonGroup fx:id="bgTRISA5" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
<toggles>
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" selected="true" text="I" />
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" text="O">
<padding>
<Insets left="5.0" />
</padding>
</ToggleButton>
</toggles>
<padding>
<Insets left="5.0" />
</padding>
</ToggleButtonGroup>
</children>
</VBox>
<VBox alignment="CENTER" GridPane.columnIndex="3" GridPane.rowIndex="1" />
<VBox alignment="CENTER" layoutX="230.0" layoutY="10.0" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="4">
<children>
<Text nodeOrientation="LEFT_TO_RIGHT" strokeType="OUTSIDE" strokeWidth="0.0" text="4">
@ -176,40 +156,8 @@
</Text>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="217.0" layoutY="56.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<ToggleButtonGroup fx:id="bgTRISA7" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
<toggles>
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" selected="true" text="I" />
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" text="O">
<padding>
<Insets left="5.0" />
</padding>
</ToggleButton>
</toggles>
<padding>
<Insets left="5.0" />
</padding>
</ToggleButtonGroup>
</children>
</VBox>
<VBox alignment="CENTER" GridPane.columnIndex="2" GridPane.rowIndex="1">
<children>
<ToggleButtonGroup fx:id="bgTRISA6" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
<toggles>
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" selected="true" text="I" />
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" text="O">
<padding>
<Insets left="5.0" />
</padding>
</ToggleButton>
</toggles>
<padding>
<Insets left="5.0" />
</padding>
</ToggleButtonGroup>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="217.0" layoutY="56.0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<VBox alignment="CENTER" GridPane.columnIndex="2" GridPane.rowIndex="1" />
<VBox alignment="CENTER" GridPane.columnIndex="4" GridPane.rowIndex="1">
<children>
<ToggleButtonGroup fx:id="bgTRISA4" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
@ -530,23 +478,7 @@
</ToggleButtonGroup>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="57.0" layoutY="59.0" GridPane.columnIndex="1" GridPane.rowIndex="2">
<children>
<ToggleButtonGroup fx:id="bgPORTA7" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
<toggles>
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" selected="true" text="0" />
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" text="1">
<padding>
<Insets left="5.0" />
</padding>
</ToggleButton>
</toggles>
<padding>
<Insets left="5.0" />
</padding>
</ToggleButtonGroup>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="57.0" layoutY="59.0" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<VBox alignment="CENTER" layoutX="57.0" layoutY="108.0" GridPane.columnIndex="8" GridPane.rowIndex="2">
<children>
<ToggleButtonGroup fx:id="bgPORTA0" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
@ -632,40 +564,8 @@
</ToggleButtonGroup>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="10.0" layoutY="10.0" GridPane.columnIndex="3" GridPane.rowIndex="2">
<children>
<ToggleButtonGroup fx:id="bgPORTA5" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
<toggles>
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" selected="true" text="0" />
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" text="1">
<padding>
<Insets left="5.0" />
</padding>
</ToggleButton>
</toggles>
<padding>
<Insets left="5.0" />
</padding>
</ToggleButtonGroup>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="10.0" layoutY="10.0" GridPane.columnIndex="2" GridPane.rowIndex="2">
<children>
<ToggleButtonGroup fx:id="bgPORTA6" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
<toggles>
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" selected="true" text="0" />
<ToggleButton contentDisplay="CENTER" minWidth="30.0" prefHeight="30.0" prefWidth="30.0" text="1">
<padding>
<Insets left="5.0" />
</padding>
</ToggleButton>
</toggles>
<padding>
<Insets left="5.0" />
</padding>
</ToggleButtonGroup>
</children>
</VBox>
<VBox alignment="CENTER" layoutX="10.0" layoutY="10.0" GridPane.columnIndex="3" GridPane.rowIndex="2" />
<VBox alignment="CENTER" layoutX="10.0" layoutY="10.0" GridPane.columnIndex="2" GridPane.rowIndex="2" />
<VBox alignment="CENTER" layoutX="57.0" layoutY="108.0" GridPane.columnIndex="8" GridPane.rowIndex="6">
<children>
<ToggleButtonGroup fx:id="bgPORTB0" prefHeight="30.0" prefWidth="39.0" selectionType="SINGLE">
@ -806,7 +706,7 @@
</GridPane>
</children>
</HBox>
<MenuBar prefHeight="31.0" prefWidth="1522.0" AnchorPane.bottomAnchor="1465.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<MenuBar prefHeight="31.0" prefWidth="1400.0" AnchorPane.bottomAnchor="1400.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
@ -846,4 +746,7 @@
</menus>
</MenuBar>
</children>
<padding>
<Insets right="50.0" />
</padding>
</AnchorPane>