我的问题很简单:
uint32_t memory::read_word1 (uint32_t address) {
if(address>(maxWord)){
return 0;
}
uint32_t temp = 10;
return temp;
}
uint32_t memory::read_word2 (uint32_t address) {
if(address>(maxWord)){
return 0;
}
return mem[address];
}
void memory::show_address (uint32_t address) {
int temp=read_word(address);
printf("%08jx\n", (uintmax_t)temp);
}
// Write a word of data to an address, mask contains 1s for bytes to be updated
void memory::write_word (uint32_t address, uint32_t data, uint32_t mask) {
if(address>(maxWord)){
int newMax = ceil(address/1024)*1024;
for(int i=maxWord+1;i<=newMax;i++){
mem.push_back(0);
}
maxWord=newMax;
}
data=data&mask;
mem[address]=data&~mask;
mem[address]=mem[address]|data;
}
read_word1和2返回要通过show_address打印的值。 read_word2是我们想要的功能。但是,我们发现的问题是当我们使用mem[address]
从向量返回时;当我们将元素设置为10(通过write_word)时,read_word1将打印0000000a
而read_word2将打印00000010
。
为了解决这个问题,我尝试过使用mem.at(地址),类型转换甚至转换为字符串,都无济于事。向量mem
定义为
std::vector<uint32_t> mem=decltype(mem)(1024,0);
在类头文件中。
这似乎是向量的潜在问题 - 可以做些什么?
修改
感谢大家的帮助。感觉像这个话题已经被揭穿了一点。我无法按照我认为的方式工作,但是如果你以十六进制传递数字,例如。 000000aa进入write_address一切似乎都有效!有点奇怪,但谢谢。