【问题标题】:Can't manage to count the right number of times I call a function无法计算我调用函数的正确次数
【发布时间】:2020-02-13 07:14:12
【问题描述】:

我曾经设法返回该函数,并且当我运行测试时它通过了我在 utils.c 上有这个函数:

  int (util_sys_inb)(int port, uint8_t *value) {

         uint32_t val;

          if(sys_inb(port, &val) != OK) return 1;

          *value = (uint8_t)val;

          return 0;

         }

由于参数的格式,这只是用于包装函数 sys_inb()。 然后我需要正确调用它的次数。 我有另一个文件:keyboard.c 有一个全局变量 extern int count。

使用此功能:

       int sys_inb_count(int port, uint8_t *value) {

if(util_sys_inb(port,value)!=OK){ return 1;}

      count++;

      return count;

   }

我做对了一次,在第一个函数上返回值,但后来我做了不同的事情,测试再也无法通过了。 如果你能帮上忙,我很感激,我一直在拔头发。

我试过了,把计数器直接放在第一个函数上,它起作用了,但我又试着做一次,然后我就不行了。

它编译并运行,但我明白了: https://imgur.com/a/YZsd1Ok

【问题讨论】:

  • count 在哪里被初始化?
  • @daShier 出了函数,我只是没提,在keyboard.h上我有extern int cout;
  • 那么OK 等于 1 还是 0?如果返回 OK 以外的内容,则不会增加 count。如果是全局的,为什么需要返回 count?但我们需要查看更多代码才能真正进行调查。
  • 我不必实际返回计数,我可以返回其他函数之一,因为它们返回一个整数。但是如果有效,则返回 0,如果无效,则返回 1。所以没关系是 0。我可以更改它们以返回其中的计数器,而不是在无法使其工作的 keyboard.c 文件上执行此操作。
  • 您提供的屏幕截图显示了 12 行输出,计数为 12。为什么这不正确?请给我们一个minimal reproducible example,并附上输入、预期输出和接收输出!顺便说一句,您应该直接在问题中复制文本而不是屏幕截图。

标签: c minix


【解决方案1】:

问题是我只是在函数按预期工作时才添加到计数器中,如果调用它并给出错误,它不会计数我只是将计数器添加到 util_sys_inb:

uint32_t count = 0;

int (util_sys_inb)(int port, uint8_t *value) {

   uint32_t val;

    if(sys_inb(port, &val) != OK) return 1;

      *value = (uint8_t)val;

      count++;

      return count;

        }

【讨论】: