📄 main.cc
字号:
#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>#include <serial.hh>#include <sulima.hh>#include "rtc.hh"// Serialization information.SerialType<MT48Tx2> MT48Tx2::type( "MT48Tx2", "T48T02/12 Timekeeper(R) RAM");// Runtime constructor.MT48Tx2::MT48Tx2(const SimArgs &args) : Module(args), Device(8), file_name(0){ define("fileName", conf.file_name); define("readLatency", conf.read_latency, 150); define("writeLatency", conf.write_latency, 150);}// Serialized constructor.MT48Tx2::MT48Tx2(Checkpoint &cp) : Module(cp), Device(8), file_name(extract_word(cp)){ define("fileName", conf.file_name, file_name); cp >> conf.read_latency >> conf.write_latency >> '\n'; define("readLatency", conf.read_latency, conf.read_latency); define("writeLatency", conf.write_latency, conf.write_latency); reset(false);}// Checkpointing interface.voidMT48Tx2::checkpoint(Checkpoint &cp, bool parent) const{ ClockValue rl = nanoseconds(read_latency, freq); ClockValue wl = nanoseconds(write_latency, freq); if (parent) cp << type << ' ' << id << '\n'; cp << file_name << ' ' << rl << ' ' << wl << '\n'; if (file_name[0]) { FILE *fp = fopen(conf.file_name, "wb"); if (!fp) throw FileError(conf.file_name); fwrite(data, 1, size, fp); if (ferror(fp) || fclose(fp)) { fclose(fp); throw FileError(conf.file_name); } fclose(fp); }}// Destructor.MT48Tx2::~MT48Tx2(){ delete file_name;}// Module interface.voidMT48Tx2::reset(bool warm){ if (!warm) {#ifdef USE_MMAP int fd = open(conf.file_name, O_RDWR|O_CREAT, 0600); if (fd != -1) { ftruncate(fd, size); data = (char *)mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); } else {#endif data = new char[size]; memset(data, 0, size); if (conf.file_name[0]) { FILE *fp = fopen(conf.file_name, "rb"); if (!fp) throw FileError(conf.file_name); fread(data, 1, size, fp); if (ferror(fp)) { fclose(fp); throw FileError(conf.file_name); } fclose(fp); } delete file_name;#ifdef USE_MMAP }#endif file_name = copy(conf.file_name); read_latency = conf.read_latency; write_latency = conf.write_latency; // initially latencies are specified in nanoseconds freq = nanoseconds(1,1); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -