Implemented Stack over and underflow information

This commit is contained in:
Meruemon
2022-04-21 15:02:51 +02:00
parent 8187ea4f57
commit 0d5a447d36
9 changed files with 63 additions and 13 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,10 @@
package Control;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import Model.Microcontroller.PIC;
import View.MyView;
@@ -12,10 +16,12 @@ public class MyControlView {
MyView oMyView;
PIC oPIC;
ConcurrentLinkedQueue<Integer> qCommandsToModel;
public MyControlView(PIC oPIC, MyView view) {
public MyControlView(PIC oPIC, MyView view, ConcurrentLinkedQueue<Integer> qCommands) {
oMyView = view;
this.oPIC = oPIC;
qCommandsToModel = qCommands;
updateView();
}
@@ -29,6 +35,7 @@ public class MyControlView {
setTestFileTable();
setMCMenu();
showStackPrompt();
showTimer0InterruptPrompt();
}
/**
@@ -198,11 +205,50 @@ public class MyControlView {
}
}
public void showTimer0InterruptPrompt() {
if (oPIC.getRam().get_GIE() && oPIC.getRam().get_T0IE() && oPIC.getRam().get_T0IF()) {
Object[] options = {"Ok"};
int n = JOptionPane.showOptionDialog(new JFrame(),"Information Timer 0 Interrupt\nISR will be executed", "Timer 0 Interrupt Acknowledged", JOptionPane.YES_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[1]);
}
}
public void showStackPrompt() {
if (oPIC.getStack().getStackOverflow()) {
//TODO
oPIC.getStack().resetStackOverflow();
Object[] options = {"Continue", "Reset"};
int n = JOptionPane.showOptionDialog(new JFrame(),"Warning! A stack overflow has occured!", "Stack Overflow", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]);
qCommandsToModel.add(5);
switch (n) {
case (0): {
//Start program
qCommandsToModel.add(1);
}break;
case (1): {
//Reset program
qCommandsToModel.add(3);
}break;
case (-1): {
//Nothing happens / pause
}break;
}
} else if (oPIC.getStack().getStackUnderflow()) {
//TODO
oPIC.getStack().resetStackUnderflow();
Object[] options = {"Continue", "Reset"};
int n = JOptionPane.showOptionDialog(new JFrame(),"Warning! A stack underflow has occured!", "Stack Underflow", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
qCommandsToModel.add(6);
switch (n) {
case (0): {
//Start program
qCommandsToModel.add(1);
}break;
case (1): {
//Reset program
qCommandsToModel.add(3);
}break;
case (-1): {
//Nothing happens / pause
}break;
}
}
}

View File

@@ -65,6 +65,7 @@ public class MyModel extends Thread {
if (abBreakpoints != null) {
//Check if stack overflowed or underflowed
if (oPIC.getStack().getStackOverflow() || oPIC.getStack().getStackUnderflow()) {
iProgState = 2;
qDataToView.add(oPIC);
//If stack did not over or underflow
} else {
@@ -93,7 +94,11 @@ public class MyModel extends Thread {
}break;
//Program paused
case (2): {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}break;
//Reset program
case (3): {
@@ -115,6 +120,12 @@ public class MyModel extends Thread {
System.out.println("Please load file!");
}
}break;
case (5): {
oPIC.getStack().resetStackOverflow();
}break;
case (6): {
oPIC.getStack().resetStackUnderflow();
}break;
}
}

View File

@@ -23,7 +23,7 @@ public class Main {
MyView oView = new MyView();
MyControlView oControlView = new MyControlView(oPIC, oView);
MyControlView oControlView = new MyControlView(oPIC, oView, qCommandsToModel);
new MyControlModel(oView, qCommandsToModel, qDataToModel);

View File

@@ -115,7 +115,7 @@ public class GUIMainFrame extends JFrame {
oPanel3.add(oMyView.getGUIStack(), oConstraints);
oConstraints.insets = new Insets(0,40,0,0);
oConstraints.gridx = 1;
oPanel3.add(oMyView.getGUITime(), oConstraints);
oPanel3.add(oMyView.getGUITime(), oConstraints);
//Build MainPanel
oConstraints.gridx = 0;

View File

@@ -1,7 +0,0 @@
package View;
import javax.swing.JPanel;
public class GUIStackButtons extends JPanel {
}