hello_object.cc revision 12360
112337Sjason@lowepower.com/* 212337Sjason@lowepower.com * Copyright (c) 2017 Jason Lowe-Power 312337Sjason@lowepower.com * All rights reserved. 412337Sjason@lowepower.com * 512337Sjason@lowepower.com * Redistribution and use in source and binary forms, with or without 612337Sjason@lowepower.com * modification, are permitted provided that the following conditions are 712337Sjason@lowepower.com * met: redistributions of source code must retain the above copyright 812337Sjason@lowepower.com * notice, this list of conditions and the following disclaimer; 912337Sjason@lowepower.com * redistributions in binary form must reproduce the above copyright 1012337Sjason@lowepower.com * notice, this list of conditions and the following disclaimer in the 1112337Sjason@lowepower.com * documentation and/or other materials provided with the distribution; 1212337Sjason@lowepower.com * neither the name of the copyright holders nor the names of its 1312337Sjason@lowepower.com * contributors may be used to endorse or promote products derived from 1412337Sjason@lowepower.com * this software without specific prior written permission. 1512337Sjason@lowepower.com * 1612337Sjason@lowepower.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712337Sjason@lowepower.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1812337Sjason@lowepower.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1912337Sjason@lowepower.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2012337Sjason@lowepower.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2112337Sjason@lowepower.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2212337Sjason@lowepower.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2312337Sjason@lowepower.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2412337Sjason@lowepower.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2512337Sjason@lowepower.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2612337Sjason@lowepower.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2712337Sjason@lowepower.com * 2812337Sjason@lowepower.com * Authors: Jason Lowe-Power 2912337Sjason@lowepower.com */ 3012337Sjason@lowepower.com 3112337Sjason@lowepower.com#include "learning_gem5/part2/hello_object.hh" 3212337Sjason@lowepower.com 3312360Sjang.hanhwi@gmail.com#include "base/logging.hh" 3412337Sjason@lowepower.com#include "debug/HelloExample.hh" 3512337Sjason@lowepower.com 3612337Sjason@lowepower.comHelloObject::HelloObject(HelloObjectParams *params) : 3712337Sjason@lowepower.com SimObject(params), 3812337Sjason@lowepower.com // This is a C++ lambda. When the event is triggered, it will call the 3912337Sjason@lowepower.com // processEvent() function. (this must be captured) 4012337Sjason@lowepower.com event([this]{ processEvent(); }, name() + ".event"), 4112337Sjason@lowepower.com goodbye(params->goodbye_object), 4212337Sjason@lowepower.com // Note: This is not needed as you can *always* reference this->name() 4312337Sjason@lowepower.com myName(params->name), 4412337Sjason@lowepower.com latency(params->time_to_wait), 4512337Sjason@lowepower.com timesLeft(params->number_of_fires) 4612337Sjason@lowepower.com{ 4712337Sjason@lowepower.com DPRINTF(HelloExample, "Created the hello object\n"); 4812337Sjason@lowepower.com panic_if(!goodbye, "HelloObject must have a non-null GoodbyeObject"); 4912337Sjason@lowepower.com} 5012337Sjason@lowepower.com 5112337Sjason@lowepower.comvoid 5212337Sjason@lowepower.comHelloObject::startup() 5312337Sjason@lowepower.com{ 5412337Sjason@lowepower.com // Before simulation starts, we need to schedule the event 5512337Sjason@lowepower.com schedule(event, latency); 5612337Sjason@lowepower.com} 5712337Sjason@lowepower.com 5812337Sjason@lowepower.comvoid 5912337Sjason@lowepower.comHelloObject::processEvent() 6012337Sjason@lowepower.com{ 6112337Sjason@lowepower.com timesLeft--; 6212337Sjason@lowepower.com DPRINTF(HelloExample, "Hello world! Processing the event! %d left\n", 6312337Sjason@lowepower.com timesLeft); 6412337Sjason@lowepower.com 6512337Sjason@lowepower.com if (timesLeft <= 0) { 6612337Sjason@lowepower.com DPRINTF(HelloExample, "Done firing!\n"); 6712337Sjason@lowepower.com goodbye->sayGoodbye(myName); 6812337Sjason@lowepower.com } else { 6912337Sjason@lowepower.com schedule(event, curTick() + latency); 7012337Sjason@lowepower.com } 7112337Sjason@lowepower.com} 7212337Sjason@lowepower.com 7312337Sjason@lowepower.comHelloObject* 7412337Sjason@lowepower.comHelloObjectParams::create() 7512337Sjason@lowepower.com{ 7612337Sjason@lowepower.com return new HelloObject(this); 7712337Sjason@lowepower.com} 78