【问题标题】:Global Variables in C Between FunctionsC中函数之间的全局变量
【发布时间】:2015-11-06 13:03:12
【问题描述】:

我试图弄清楚如何让这个打印函数在变量所在的函数之外工作。

int altitude = 0;

void setup() {
    Serial.begin(9600);
    simulateAltitude();
}

void loop() {
    Serial.println(altitude); // This does not work.
}

int simulateAltitude() {
    int a = 0;
    while ( a == 0 ) {
        altitude += 1;
        Serial.println(altitude); // This does work.
        delay(1);
    }
}

我最大的问题是 void loop() 没有从 int simulationAltitude 函数的 while 循环中获取高度值。这是在使用 C 的 Arduino UNO 微控制器板上使用的。

我知道这是一个无限循环,仅用于测试目的。

【问题讨论】:

  • int a; while(a == 0)...:未定义行为:a 未初始化。
  • 另外,Arduino 第一次调用setup() 一次,然后他们无限期地调用loop()。你确定那是你想要的吗?也就是说,您从不调用该函数!另外,a 的目的是什么?它要么让函数完全不做任何事情,要么让一切陷入无限循环。
  • 请不要更改您的问题,以使迄今为止的所有答案都毫无用处。这被认为是不好的形式:-)
  • 原始问题写得不好,缺少部分代码。除了我遇到的实际问题之外,答案都找到了,对不起:(
  • 好的,如果这是你的最终代码(希望如此),我已经更新了我的答案,告诉你你遇到的确切问题。

标签: c arduino


【解决方案1】:

它不会从loop() 中打印高度,因为实际上从未调用过loop()

记住关于 Arduino 的这一点。 setup() 函数在启动时被调用一次,一旦返回,loop() 函数就会被一遍又一遍地调用。

按照您的方式,您的 setup() 函数调用 simulateAltitude() 进入无限循环,因此它永远返回。它不会同时运行simulateAltitude()loop()

你最好看看类似的东西:

void loop() {
    Serial.println(altitude);
    increaseAltitude();
}

int increaseAltitude() {
    altitude += 1;
    delay(1);
}

【讨论】:

  • ... 或其他任何东西,因为该函数会导致 UB!
  • 请注意,OP 不会初始化 a,尽管您的代码没有这个问题。
  • @KemyLand,我不太确定 UB。标准规定,如果您不对其进行初始化,则该值是不确定的,但这与 UB 不同,在 UB 中,anything 可能发生。当然,这仍然是个坏主意。
  • @paxdiablo:嘿,这不是第一次有人称我对标准的偏见......嗯......“有趣”。不,我从来不需要忍受标准委员会,我也不想。如果你已经这样做了,我很抱歉你的痛苦;)。
  • @M.M: Arduino 的安腾处理器?获得两全其美的有趣想法!
【解决方案2】:

你有两个问题:

首先需要初始化aaltitude。给他们初始值(比如,0)。

其次,您没有设置串行监视器。将此行添加到您的设置函数中:

Serial.begin(9600); //9600 is more common but you can set other update frequencies

【讨论】:

  • 我有那个,忘了在这里添加。将更新问题。但是,它似乎只是在控制台中发送垃圾邮件 0。
  • 其实altitude的作用域是静态的,所以不需要初始化。
  • @Bondanr:你看我的评论了吗? altitude的初始值为零,Arduino会无限调用loop。因此,预计您会在控制台中获得无限泛滥的零。
  • 好吧,我想这次我已经完成了。原始问题中缺少部分代码无济于事。是的,我故意运行一个无限循环(它只是为了测试目的)。问题是 voidloop 中的 Serial.println 没有打印任何内容。就像它没有从高度循环中获得价值一样。
【解决方案3】:

这段代码有两个问题。首先是simulateAltitude 永远不会被调用,所以altitude 永远不会更新。第二个问题是aaltitude都没有真正初始化。

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2022-06-16
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2016-07-08
    • 2014-09-26
    相关资源
    最近更新 更多