예제 #1
0
        private void OnBreakpointPause(object sender, BreakpointPauseEventArgs e)
        {
            items.Clear();
            FuncBlock fblock = BreakPointManager.GetFBlock(e.Address);
            void *    rbp    = SimulateDllModel.GetRBP();
            int       laddr  = (int)rbp + 0x4;
            int       paddr  = (int)rbp - 0x8;

            if (fblock != null)
            {
                IList <FuncBlock_Assignment> localvars  = fblock.LocalVars;
                IList <FuncBlock_Assignment> parameters = fblock.Parameters;
                LocalVarElement_ForFuncBlock lvelement  = null;
                foreach (FuncBlock_Assignment localvar in localvars)
                {
                    lvelement = new LocalVarElement_ForFuncBlock(localvar);
                    GetValue(lvelement, localvar, laddr);
                    items.Add(lvelement);
                    laddr -= localvar.Sizeof;
                }
                foreach (FuncBlock_Assignment parameter in parameters)
                {
                    lvelement = new LocalVarElement_ForFuncBlock(parameter);
                    GetValue(lvelement, parameter, paddr);
                    items.Add(lvelement);
                    paddr += parameter.Sizeof;
                }
            }
            PropertyChanged(this, new PropertyChangedEventArgs("Items"));
        }
예제 #2
0
 public override void Update(SimulateDllModel dllmodel)
 {
     foreach (SimulatePulseUnit value in values)
     {
         value.Update(dllmodel);
     }
 }
예제 #3
0
        public void Active(SimuBrpoElement ele)
        {
            int bpaddr = ele.BVModel.BPAddress;
            int bpmsg  = 0;
            int cpmsg  = 0;

            switch (ele.BPRect.Label)
            {
            case "": ele.Condition = "无"; bpmsg = 1; break;

            case "0": ele.Condition = "0"; cpmsg = 1; break;

            case "1": ele.Condition = "1"; cpmsg = 2; break;

            case "↑": ele.Condition = "上升沿"; cpmsg = 4; break;

            case "↓": ele.Condition = "下降沿"; cpmsg = 8; break;

            default: ele.Condition = "无"; break;
            }
            int count = 1;

            try
            {
                count = int.Parse(ele.BreakTime);
                SimulateDllModel.SetBPAddr(bpaddr, bpmsg);
                SimulateDllModel.SetCPAddr(bpaddr, cpmsg);
                SimulateDllModel.SetBPCount(bpaddr, count);
            }
            catch (Exception e)
            {
            }
        }
예제 #4
0
 public override void Update(SimulateDllModel dllmodel)
 {
     if (CanRead)
     {
         Prototype.Update(dllmodel);
     }
 }
예제 #5
0
 private void OnSimulateAbort(object sender, RoutedEventArgs e)
 {
     SimulateAbort(this, e);
     if (isdisposed)
     {
         dllmodel.SimulateAbort    -= OnSimulateAbort;
         dllmodel.SimulateStart    -= OnSimulateStart;
         dllmodel.SimulatePause    -= OnSimulatePause;
         dllmodel.SimulateProgress -= OnSimulateProgress;
         dllmodel = null;
         SimulateDllModel.FreeDll();
         return;
     }
     if (dllmodel.SimuMode == SimulateDllModel.SIMUMODE_CHART)
     {
         if (pbwin != null)
         {
             pbwin.Dispatcher.Invoke(new Utility.Delegates.Execute(
                                         () => { pbwin.Close(); }));
             pbwin = null;
         }
         MainChart.Dispatcher.Invoke(new Utility.Delegates.Execute(
                                         MainChart.Update));
     }
 }
예제 #6
0
        public override void Update(SimulateDllModel dllmodel)
        {
            double[] fvalues   = dllmodel.GetValue_Float(Name, 1);
            double   value_old = value;

            Value = fvalues[0];
        }
예제 #7
0
 public override void Set(SimulateDllModel dllmodel)
 {
     if (CanWrite)
     {
         Prototype.Set(dllmodel);
     }
 }
예제 #8
0
        public void Unactive(SimuBrpoElement ele)
        {
            int bpaddr = ele.BVModel.BPAddress;

            SimulateDllModel.SetBPAddr(bpaddr, 0);
            SimulateDllModel.SetCPAddr(bpaddr, 0);
        }
예제 #9
0
 public override void Update(SimulateDllModel dllmodel)
 {
     double[] fvalues = dllmodel.GetValue_Float(Name, size);
     for (int i = 0; i < size; i++)
     {
         this.values[i].Value = fvalues[i];
     }
 }
예제 #10
0
 public override void Update(SimulateDllModel dllmodel)
 {
     int[] ivalues = dllmodel.GetValue_Bit(Name, Size);
     for (int i = 0; i < size; i++)
     {
         this.values[i].Value = ivalues[i];
     }
 }
예제 #11
0
 public override void Set(SimulateDllModel dllmodel)
 {
     double[] fvalues = new double[size];
     for (int i = 0; i < size; i++)
     {
         fvalues[i] = (double)(this.values[i].Value);
     }
     dllmodel.SetValue_Float(Name, Size, fvalues);
 }
예제 #12
0
 public override void Update(SimulateDllModel dllmodel)
 {
     if (Islocked)
     {
         return;
     }
     double[] dvalues = dllmodel.GetValue_Double(Name, 1);
     Value = dvalues[0];
 }
예제 #13
0
 public override void Set(SimulateDllModel dllmodel)
 {
     int[] ivalues = new int[size];
     for (int i = 0; i < size; i++)
     {
         ivalues[i] = (int)(this.values[i].Value);
     }
     dllmodel.SetValue_Bit(Name, Size, ivalues);
 }
예제 #14
0
 public override void Update(SimulateDllModel dllmodel)
 {
     if (Islocked)
     {
         return;
     }
     Int32[] ivalues = dllmodel.GetValue_Bit(Name, 1);
     Value = ivalues[0];
 }
예제 #15
0
 public void Set(SimulateDllModel dllmodel, int time)
 {
     Move(time);
     if (CurrentSegment != null &&
         CurrentSegment.TimeStart <= time &&
         CurrentSegment.TimeEnd >= time)
     {
         SVUnit.Value = CurrentSegment.Value;
         SVUnit.Set(dllmodel);
     }
 }
예제 #16
0
 /// <summary>
 /// 初始化构造函数
 /// </summary>
 public SimulateModel()
 {
     smanager    = new SimulateManager();
     dllmodel    = smanager.DllModel;
     smvars      = new List <SimulateVariableUnit>();
     AllRoutine  = null;
     MainRoutine = null;
     SubRoutines = new List <SimuViewDiagramModel>();
     AllFuncs    = null;
     FuncBlocks  = new List <SimuViewFuncBlockModel>();
     SubCharts   = new List <SimuViewTabModel>();
 }
예제 #17
0
        private void OnBreakpointPause(object sender, BreakpointPauseEventArgs e)
        {
            BackTraceElement btele = null;
            int size = SimulateDllModel.GetBackTrace(data);

            items.Clear();
            for (int i = size / 2 - 1; i >= 0; i--)
            {
                btele = GetElement(data[i * 2]);
                if (btele != null)
                {
                    items.Add(btele);
                }
            }
            int bpaddr = SimulateDllModel.GetBPAddr();

            btele = GetElement(bpaddr);
            if (btele != null)
            {
                items.Add(btele);
            }
            PropertyChanged(this, new PropertyChangedEventArgs("Items"));
        }
예제 #18
0
 public override void Set(SimulateDllModel dllmodel)
 {
 }
예제 #19
0
 public override void Update(SimulateDllModel dllmodel)
 {
 }
예제 #20
0
 public override void Set(SimulateDllModel dllmodel)
 {
     Int32[] ivalues = { this.value };
     dllmodel.SetValue_Bit(Name, 1, ivalues);
 }
예제 #21
0
        public void Update(SimulateDllModel dllmodel, int time)
        {
            SVUnit.Update(dllmodel);
            Move(time);
            ValueSegment nseg = null;

            if (CurrentSegment != null)
            {
                nseg = CurrentSegment;
                if (time > nseg.TimeEnd)
                {
                    if (!SVUnit.Value.Equals(nseg.Value))
                    {
                        nseg           = nseg.Clone();
                        nseg.Value     = SVUnit.Value;
                        nseg.TimeStart = nseg.TimeEnd + 1;
                        nseg.TimeEnd   = time;
                        values.Insert(CurrentIndex + 1, nseg);
                    }
                    else
                    {
                        nseg.TimeEnd = time;
                    }
                }
                else if (time >= nseg.TimeStart && time <= nseg.TimeEnd)
                {
                    if (!SVUnit.Value.Equals(nseg.Value))
                    {
                        values.Remove(nseg);
                        ValueSegment lseg = nseg.Clone();
                        ValueSegment rseg = nseg.Clone();
                        nseg           = nseg.Clone();
                        lseg.TimeEnd   = time - 1;
                        rseg.TimeStart = time + 1;
                        nseg.TimeStart = nseg.TimeEnd = time;
                        nseg.Value     = SVUnit.Value;
                        if (rseg.TimeEnd >= rseg.TimeStart)
                        {
                            values.Insert(CurrentIndex, rseg);
                        }
                        values.Insert(CurrentIndex, nseg);
                        if (lseg.TimeEnd >= lseg.TimeStart)
                        {
                            values.Insert(CurrentIndex, lseg);
                        }
                    }
                }
                else
                {
                    throw new ArgumentException(String.Format("Cannot get value segment related to time {0:d}", time));
                }
            }
            else if (values.Count() == 0)
            {
                Init(time);
                CurrentIndex         = 0;
                CurrentSegment.Value = SVUnit.Value;
            }
            else if (CurrentIndex < 0)
            {
                nseg           = values.First().Clone();
                nseg.Value     = SVUnit.Value;
                nseg.TimeStart = nseg.TimeEnd = time;
                values.Insert(0, nseg);
            }
            else
            {
                throw new ArgumentException(String.Format("Cannot get value segment related to time {0:d}", time));
            }
        }
예제 #22
0
 public override void Set(SimulateDllModel dllmodel)
 {
     double[] dvalues = { this.value };
     dllmodel.SetValue_Double(Name, 1, dvalues);
 }
예제 #23
0
 abstract public void Update(SimulateDllModel dllmodel);
예제 #24
0
 public override void Set(SimulateDllModel dllmodel)
 {
     double[] fvalues = { this.value };
     dllmodel.SetValue_Float(Name, 1, fvalues);
 }
예제 #25
0
 abstract public void Set(SimulateDllModel dllmodel);
예제 #26
0
 public override void Update(SimulateDllModel dllmodel)
 {
     Value = dllmodel.GetFeq(Name);
 }