Skip to content
Snippets Groups Projects
Commit d4f0db50 authored by Ludovic Apvrille's avatar Ludovic Apvrille
Browse files

Merge branch 'master' of gitlab.enst.fr:mbe-tools/TTool

parents 8bfbb027 9a198935
No related branches found
No related tags found
No related merge requests found
Showing
with 355 additions and 122 deletions
......@@ -97,9 +97,6 @@ public class History extends Command {
return "Invalid argument. Must provide an int";
}
}
public void fillSubCommands() {
......
......@@ -68,7 +68,7 @@ public class Terminal {
private int maxbufferSize = MAX_BUFFER_SIZE;
private TerminalProviderInterface terminalProvider;
private int cpt;
private String sequence;
private char[] sequence;
private String os;
......@@ -78,6 +78,7 @@ public class Terminal {
os = System.getProperty("os.name").toLowerCase();
System.out.println("Detected OS:" + os);
os = os.split(" ")[0];
bufferPointer = 0;
}
public void setTerminalProvider(TerminalProviderInterface tp) {
......@@ -89,13 +90,12 @@ public class Terminal {
char x;
int val = 0;
cursorPosition = 0;
bufferPointer = 0;
printPrompt(cpt);
String currentBuf = "";
sequence = null;
int seqNb = 0;
long timeSeq = 0;
......@@ -109,7 +109,8 @@ public class Terminal {
// Special sequence?
if (sequence == null) {
if (val == ESC) {
sequence = "";
sequence = new char[256];
seqNb = 0;
timeSeq = System.currentTimeMillis();
}
} else {
......@@ -118,20 +119,23 @@ public class Terminal {
if (now - timeSeq > 10) {
sequence = null;
} else {
sequence += x;
sequence[seqNb] = x;
seqNb ++;
}
}
/*if (sequence != null) {
TraceManager.addDev("Sequence=" + sequence);
printSequence(sequence);
}*/
if (sequence != null) {
//TraceManager.addDev("Sequence=" + sequence + "length=" + sequence.length());
//printSequence(sequence);
}
if ((sequence != null) && (sequence.length() == 2)) {
//UP?
if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 65)) {
if ((sequence != null) && (seqNb == 2)) {
//UP?
if ((sequence[0] == 91) && (sequence[1] == 65)) {
//TraceManager.addDev("UP");
//System.out.println("UP buffersize=" + buffer.size() + " bufferpointer=" + bufferPointer);
if (buffer.size() > 0) {
delCurrent(currentBuf);
bufferPointer = (bufferPointer > 0) ? bufferPointer - 1 : bufferPointer;
......@@ -148,7 +152,8 @@ public class Terminal {
// DOWN
} else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 66)) {
} else if ((sequence[0] == 91) && (sequence[1] == 66)) {
//System.out.println("DOWN buffersize=" + buffer.size());
if (buffer.size() > 0) {
//System.out.println("DOWN");
delCurrent(currentBuf);
......@@ -166,17 +171,16 @@ public class Terminal {
// BACKWARD
} else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 68)) {
} else if ((sequence[0] == 91) && (sequence[1] == 68)) {
//System.out.println("DOWN");
//System.out.println("BACKWARD");
backward();
sequence = null;
val = -1;
// FORWARD
} else if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 67)) {
} else if ((sequence[0] == 91) && (sequence[1] == 67)) {
//System.out.println("DOWN");
forward(currentBuf);
sequence = null;
val = -1;
......@@ -185,11 +189,13 @@ public class Terminal {
}
}
if ((sequence != null) && (sequence.length() == 3)) {
if ((sequence != null) && (seqNb == 3)) {
// DEL
if ((sequence.charAt(0) == 91) && (sequence.charAt(1) == 51) &&
(sequence.charAt(2) == 126)) {
if ((sequence[0] == 91) && (sequence[1] == 51) &&
(sequence[2] == 126)) {
//TraceManager.addDev("DEL");
currentBuf = del(currentBuf);
//cursorPosition--;
......@@ -273,9 +279,7 @@ public class Terminal {
private void addToBuffer(String newBuf) {
// Add at bufferPointer
// Therefore remove all elements after bufferPointer
for (int i = buffer.size() - 1; i >= bufferPointer; i--) {
buffer.removeElementAt(i);
}
buffer.add(newBuf);
......@@ -284,7 +288,11 @@ public class Terminal {
}
bufferPointer = buffer.size();
//System.out.println("new BufferPointer=" + bufferPointer + " size buffer=" + buffer.size());
/*for(int j=0; j<buffer.size(); j++) {
System.out.println("Buffer at" + j + " = " + buffer.get(j));
}*/
}
......@@ -358,5 +366,9 @@ public class Terminal {
cursorPosition++;
}
/*private void printSequence(String seq) {
}*/
}
......@@ -42,7 +42,10 @@
package ui.window;
import cli.Action;
import help.HelpEntry;
import help.HelpManager;
import myutil.GraphicLib;
import myutil.TraceManager;
import tmltranslator.modelcompiler.ArchUnitMEC;
import ui.ColorManager;
import ui.util.IconManager;
......@@ -78,6 +81,7 @@ public class JDialogCPUNode extends JDialogBase implements ActionListener {
// private static int selectedTracemode = 0;
// Panel1
protected JTextField nodeName;
private JFrameHelp jFrameHelp = null;
// Panel2
protected JTextField sliceTime, nbOfCores, byteDataSize, pipelineSize, goIdleTime, maxConsecutiveIdleCycles,
......@@ -93,8 +97,8 @@ public class JDialogCPUNode extends JDialogBase implements ActionListener {
private java.util.List<SimulationTransaction> transactions;
//issue 183
List<JTextArea> instructionHelpList;
List<JButton> buttons;
List<JButton> buttons = new ArrayList<>();
List<HelpEntry> helpEntries;
/* Creates new form */
public JDialogCPUNode(Frame _frame, String _title, TMLArchiCPUNode _node, ArchUnitMEC _MECType, java.util.List<SimulationTransaction> _transactions) {
......@@ -121,114 +125,101 @@ public class JDialogCPUNode extends JDialogBase implements ActionListener {
}
//issue 183
private void buttonClick(JButton but, JTextArea jta) {
JPopupMenu helpPopup = new JPopupMenu();
helpPopup.add(jta);
but.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (!helpPopup.isVisible()) {
helpPopup.show(but,20,20);
} else {
helpPopup.setVisible(false);
}
}
});
helpPopup.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "closeJTextArea");
helpPopup.getActionMap().put("closeJTextArea", new AbstractAction() {
private void buttonClick(JButton but, HelpEntry he, HelpManager hm) {
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
helpPopup.setVisible(false);
setModalityType(ModalityType.MODELESS);
if(jFrameHelp == null ) {
jFrameHelp = new JFrameHelp("help", hm, he);
jFrameHelp.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
jFrameHelp.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close");
jFrameHelp.getRootPane().getActionMap().put("close", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if(!jFrameHelp.isVisible())
dispose();
jFrameHelp.setVisible(false);
}
});
}else{
if(!jFrameHelp.isVisible()) {
jFrameHelp = new JFrameHelp("help", hm, he);
jFrameHelp.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
setModalityType(ModalityType.MODELESS);
jFrameHelp.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close");
jFrameHelp.getRootPane().getActionMap().put("close", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if(!jFrameHelp.isVisible())
dispose();
jFrameHelp.setVisible(false);
}
});
}else{
jFrameHelp.setVisible(false);
jFrameHelp = null;
}
}
}
});
}
//issue 183
private void hardwareHelp(){
instructionHelpList = new ArrayList<>();
buttons = new ArrayList<>();
JTextArea jft1 = new JTextArea();
jft1.setText("CPU name");
instructionHelpList.add(jft1);
JTextArea jft2 = new JTextArea();
jft2.setText("The arbitration policy used by OS to schedule mapped tasks");
instructionHelpList.add(jft2);
JTextArea jft3 = new JTextArea("Slice time : The maximum time allocated by the OS " +
"scheduler to execute a task");
instructionHelpList.add(jft3);
JTextArea jft4 = new JTextArea("Nb of Cores : The number of cores of the CPU");
instructionHelpList.add(jft4);
JTextArea jft5 = new JTextArea("Data size : The size of an EXECI/EXECC operation, in " +
"number of bytes");
instructionHelpList.add(jft5);
JTextArea jft6 = new JTextArea("Pipeline size : The number of stages of the pipeline");
instructionHelpList.add(jft6);
JTextArea jft7 = new JTextArea("Task switching : The time taken by the OS for a context switch");
instructionHelpList.add(jft7);
JTextArea jft8 = new JTextArea("Mis-branching prediction: The miss percentage of the CPU branch " +
"prediction scheme");
instructionHelpList.add(jft8);
JTextArea jft9 = new JTextArea("cahe-miss : The percentage of cache misses");
instructionHelpList.add(jft9);
JTextArea jft10 = new JTextArea("Go idle time (cycles) : The time taken by the OS and the CPU " +
"hardware to go idle");
instructionHelpList.add(jft10);
JTextArea jft11 = new JTextArea("Max consecutive cycles before idle (cycles) : Number of consecutive cycles of NOPs before the " +
"CPU goes idle");
instructionHelpList.add(jft11);
JTextArea jft12 = new JTextArea("EXECI execution : The number of clock cycles corresponding to an " +
"integer operation");
instructionHelpList.add(jft12);
JTextArea jft13 = new JTextArea("EXECC execution : The number of clock cycles corresponding to an " +
"operation on complex numbers");
instructionHelpList.add(jft13);
JTextArea jft14 = new JTextArea("Clock divider : This number defines the operating clock frequency of the CPU \n" +
"It is expressed via a number that is used to divide the global design\n" +
"frequency, whose default value is 200 MHz. Thus a clock divider equal to 4 means that the CPU\n" +
"operates at 200/4 = 50 MHz");
instructionHelpList.add(jft14);
JTextArea jft15 = new JTextArea("Encryption");
instructionHelpList.add(jft15);
JTextArea jft16 = new JTextArea("CPU Extension Construct");
instructionHelpList.add(jft16);
JTextArea jft17 = new JTextArea("Operation");
instructionHelpList.add(jft17);
HelpManager helpManager = new HelpManager();
if(helpManager.loadEntries()) {
helpEntries = new ArrayList<>();
HelpEntry he0 = helpManager.getHelpEntryWithHTMLFile("cpuname.html");
helpEntries.add(he0);
HelpEntry he1 = helpManager.getHelpEntryWithHTMLFile("schedulingpolicy.html");
helpEntries.add(he1);
HelpEntry he2 = helpManager.getHelpEntryWithHTMLFile("slicetime.html");
helpEntries.add(he2);
HelpEntry he3 = helpManager.getHelpEntryWithHTMLFile("numbercores.html");
helpEntries.add(he3);
HelpEntry he4 = helpManager.getHelpEntryWithHTMLFile("datasize.html");
helpEntries.add(he4);
HelpEntry he5 = helpManager.getHelpEntryWithHTMLFile("pipelinesize.html");
helpEntries.add(he5);
HelpEntry he6 = helpManager.getHelpEntryWithHTMLFile("taskswitchingtime.html");
helpEntries.add(he6);
HelpEntry he7 = helpManager.getHelpEntryWithHTMLFile("misbrandingprediction.html");
helpEntries.add(he7);
HelpEntry he8 = helpManager.getHelpEntryWithHTMLFile("cachemiss.html");
helpEntries.add(he8);
HelpEntry he9 = helpManager.getHelpEntryWithHTMLFile("goidletime.html");
helpEntries.add(he9);
HelpEntry he10 = helpManager.getHelpEntryWithHTMLFile("maxconsecutivecycles.html");
helpEntries.add(he10);
HelpEntry he11 = helpManager.getHelpEntryWithHTMLFile("execi.html");
helpEntries.add(he11);
HelpEntry he12 = helpManager.getHelpEntryWithHTMLFile("execc.html");
helpEntries.add(he12);
HelpEntry he13 = helpManager.getHelpEntryWithHTMLFile("clockdivider.html");
helpEntries.add(he13);
HelpEntry he14 = helpManager.getHelpEntryWithHTMLFile("encryption.html");
helpEntries.add(he14);
HelpEntry he15 = helpManager.getHelpEntryWithHTMLFile("cpuextension.html");
helpEntries.add(he15);
HelpEntry he16 = helpManager.getHelpEntryWithHTMLFile("operation.html");
helpEntries.add(he16);
}
for(int i = 0; i < instructionHelpList.size(); i++) {
for(int i = 0; i < 17; i++) {
Icon myIcon = IconManager.imgic32;
JButton but = new JButton(myIcon);
setButton(but);
buttonClick(but,helpEntries.get(i),helpManager);
buttons.add(but);
instructionHelpList.get(i).setEditable(false);
}
for (int i = 0; i < instructionHelpList.size(); i++) {
buttonClick(buttons.get(i),instructionHelpList.get(i));
}
}
private void initComponents() {
hardwareHelp();
Container c = getContentPane();
GridBagLayout gridbag0 = new GridBagLayout();
GridBagLayout gridbag2 = new GridBagLayout();
......@@ -237,12 +228,12 @@ public class JDialogCPUNode extends JDialogBase implements ActionListener {
//GridBagConstraints c1 = new GridBagConstraints();
GridBagConstraints c2 = new GridBagConstraints();
GridBagConstraints c4 = new GridBagConstraints();
hardwareHelp();
setFont(new Font("Helvetica", Font.PLAIN, 14));
c.setLayout(gridbag0);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setModalityType(ModalityType.APPLICATION_MODAL);
panel2 = new JPanel();
......@@ -290,7 +281,7 @@ public class JDialogCPUNode extends JDialogBase implements ActionListener {
c2.weighty = 0.5;
c2.weightx = 0.5;
c2.gridwidth = GridBagConstraints.REMAINDER;
panel2.add(buttons.get(1),c2);
panel2.add(buttons.get(1),c2);
c2.gridwidth = 1;
//issue 183
......@@ -567,8 +558,8 @@ public class JDialogCPUNode extends JDialogBase implements ActionListener {
c0.weightx = 1.0;
c0.gridwidth = GridBagConstraints.REMAINDER; //end row
c0.fill = GridBagConstraints.BOTH;
/*c.add(panel2, c0);
c.add(panel4, c0);*/
/* c.add(panel2, c0);
c.add(panel4, c0);*/
c.add( tabbedPane, c0 );
c0.gridwidth = 1;
......
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>TTool help</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h2 id="cahe-miss-in">Cahe-miss (in %)</h2>
<p>The percentage of cache misses</p>
</body>
</html>
## Cahe-miss (in %)
The percentage of cache misses
\ No newline at end of file
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>TTool help</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h2 id="cpu-extension-construct">CPU Extension Construct</h2>
<p>The CPU Extension Construct :</p>
<ul>
<li>CPU</li>
<li>FEP (Front End Processor)</li>
<li>INTL (Interleaver)</li>
<li>MAPP (Mapper)</li>
<li>ADAIF (Analog to Digital-Digital to Analog Interface)</li>
</ul>
</body>
</html>
## CPU Extension Construct
The CPU Extension Construct :
- CPU
- FEP (Front End Processor)
- INTL (Interleaver)
- MAPP (Mapper)
- ADAIF (Analog to Digital-Digital to Analog Interface)
\ No newline at end of file
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>TTool help</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h2 id="cpu-name">CPU name</h2>
<p>The CPU node name</p>
</body>
</html>
## CPU name
The CPU node name
\ No newline at end of file
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>TTool help</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h2 id="data-size">Data size</h2>
<p>The size of an EXECI/EXECC operation, in number of bytes</p>
</body>
</html>
## Data size
The size of an EXECI/EXECC operation, in number of bytes
\ No newline at end of file
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>TTool help</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h2 id="encryption">Encryption</h2>
<p>The encryption :</p>
<ul>
<li>None</li>
<li>Software Encryption</li>
<li>Hardware Security Module</li>
</ul>
</body>
</html>
## Encryption
The encryption :
- None
- Software Encryption
- Hardware Security Module
\ No newline at end of file
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>TTool help</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h2 id="execc-execution-time-in-cycle">EXECC execution time (in cycle)</h2>
<p>The number of clock cycles corresponding to an operation on complex numbers</p>
</body>
</html>
## EXECC execution time (in cycle)
The number of clock cycles corresponding to an operation on complex numbers
\ No newline at end of file
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>TTool help</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h2 id="execi-execution-time-in-cycle">EXECI execution time (in cycle)</h2>
<p>The number of clock cycles corresponding to an integer operation</p>
</body>
</html>
## EXECI execution time (in cycle)
The number of clock cycles corresponding to an integer operation
\ No newline at end of file
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>TTool help</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h2 id="go-idle-time-in-cycle">Go idle time (in cycle)</h2>
<p>The time taken by the OS and the CPU hardware to go idle</p>
</body>
</html>
## Go idle time (in cycle)
The time taken by the OS and the CPU hardware to go idle
\ No newline at end of file
......@@ -3,8 +3,26 @@
- diplodocus diplodocus hardware software partitioning dse design space exploration
-- architecture architecture hardware os operating system
--- cpu cpu processor cpu os
----cpuname cpu_name cpu name
----schedulingpolicy scheduling_policy scheduling policy cpu
----slicetime slice_time slice time cpu
----numbercores number_of_core number core cpu
----datasize data_size data size cpu
----pipelinesize pipeline_size pipeline size cpu
----taskswitchingtime task_switching_time task switching time cpu
----misbrandingprediction mis-branding_prediction mis branding prediction cpu
----cachemiss cache_miss cache miss cpu
----goidletime go_idle_time go idle time cpu
----maxconsecutivecycles max_consecutive_cycles_before_idle max consecutive cycles before idle cpu
----execi execi_execution_time execi execution time cpu
----execc execc_execution_time execc execution time cpu
----clockdivider clock_divider clock divider cpu
-- mapping mapping tasks communication mapping
----encryption encryption encryption cpu
----operation operation operation cpu
----cpuextension cpu_extension_construct cpu extension construct
-- mapping mapping tasks communication mapping
---taskmapping taskmapping tasks mapping
---communicationmapping communicationmapping communication mapping
- avatar avatar software embedded systems safety security
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment