1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using System.Threading; 10 using Antmicro.Renode.Core; 11 12 namespace Antmicro.Renode.UnitTests.Mocks 13 { 14 public class ActivelyAskingCPU : EmptyCPU 15 { ActivelyAskingCPU(IMachine machine, ulong addressToAsk)16 public ActivelyAskingCPU(IMachine machine, ulong addressToAsk) : base(machine) 17 { 18 this.addressToAsk = addressToAsk; 19 tokenSource = new CancellationTokenSource(); 20 finished = new ManualResetEventSlim(); 21 } 22 OnResume()23 protected override void OnResume() 24 { 25 finished.Reset(); 26 new Thread(() => AskingThread(tokenSource.Token)) 27 { 28 IsBackground = true, 29 Name = "AskingThread" 30 }.Start(); 31 } 32 OnPause()33 protected override void OnPause() 34 { 35 tokenSource.Cancel(); 36 finished.Wait(); 37 } 38 AskingThread(CancellationToken token)39 private void AskingThread(CancellationToken token) 40 { 41 while(!token.IsCancellationRequested) 42 { 43 machine.SystemBus.ReadDoubleWord(addressToAsk); 44 } 45 finished.Set(); 46 } 47 48 private CancellationTokenSource tokenSource; 49 private readonly ManualResetEventSlim finished; 50 private readonly ulong addressToAsk; 51 } 52 } 53 54