c++ - 检查写入寄存器的值是否正确

标签 c++ c cpu-registers microprocessors

我是c语言的初学者。

我有一个将一些特定值写入寄存器的函数:

  if(something == someCondition )
  {

    Write_into_register( Msg->R_addres, Msg->value );
  }

到目前为止,这有效。 我还有一个读取函数,它只读取写入寄存器的值:

uint read_value_from_register( R_addres addr ){}

这也很好用。

现在我想要这样的东西:

  1. 每次将值写入寄存器时,检查它是否确实是写入寄存器的正确值(使用我的读取函数)
  2. 如果没有写入值或者不是同一个值,请尝试3次写入正确的值
  3. 如果第三次尝试未成功,则提出错误

如何表示这个算法并将其与我现有的函数结合起来?你能将它表示为伪代码吗? 将不胜感激!

尝试过这样的事情:

int index;
Write_into_register(addres, value );
for (index=0;index<3;i++)
if (value== read_value_from_register(addres))
   return 1;
else
   return ERROR;

最佳答案

假设你要写入的数据是一个整数。

int Write_verify( R_addres addr, int data)
{
    Write_into_register(addr, data );
    if (data == read_value_from_register(addr))
       return 1;
    else
       return 0;
}

该函数将写入并验证数据。如果验证成功,则返回 1;如果验证失败,则返回 0。

如果你想写入3次数据,你必须像这样修改上面的代码。

int Write_verify( R_addres addr, int data)
{
    Write_into_register(addr, data );
    for (int i=0; i<2; i++)
    {
      if (data == read_value_from_register(addr))
         return 1;
      else
         Write_into_register(addr, data );
    }

    // Check for last value
    if (data == read_value_from_register(addr))
       return 1;
    else
       return 0;
}

关于c++ - 检查写入寄存器的值是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222104/

相关文章:

c++ - C++ 异构集合调用派生类函数

python - 不允许操作 : Server-setsockopt() error for SO_BINDTODEVICE

assembly - 近指针的隐式段寄存器是如何确定的?

architecture - ESP在 assembly 中是什么意思?

c++ - cin 并尝试/捕获

c++ - 为什么在读取时发现 eof 时会设置故障位?

无法获取字符串中的单个字符

c - Scanf 在 C 中有空格

c - 有没有更快的方法使用 input() 和 output() 访问 I/O 寄存器?

c++ - 如何计算多重映射中重复对的数量