【问题标题】:Check if value written into register is the correct one检查写入寄存器的值是否正确
【发布时间】:2016-02-05 10:44:02
【问题描述】:

我是 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;

【问题讨论】:

  • 这些寄存器是什么?为什么写作会失败并且必须进行验证?通常寄存器是非常低级的,写入它们基本上总是有效的。例外情况是微控制器中更常见的外围或 I/O 相关寄存器。你不是很清楚。
  • 这对于任何了解循环和条件的程序员来说都是微不足道的。你试过什么?它有什么具体问题吗?如果你不知道如何使用循环和条件,也许你需要一些编程入门课程?
  • 这些寄存器位于集成电压控制单元中。这些值是通过 i2c 总线从其他组件发送的,它是一个安全相关系统。
  • 展示你尝试过的东西,很简单。
  • 在开始使用 C++ 编程之前,您应该学习 C++。 C++ 与 Ruby 不同,在很多方面都更难。从这里挑选一本书:The Definitive C++ Book Guide and List

标签: c++ c cpu-registers microprocessors


【解决方案1】:

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

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;
}

【讨论】:

  • 我尝试了类似您解释的方法,但通过这 3 次尝试查看值是否正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2011-05-30
  • 1970-01-01
  • 2019-08-18
相关资源
最近更新 更多