2015-11-06 3 views
0

я пытаюсь получить, чтобы выяснить, как получить эту функцию печати, чтобы работать вне этой функции переменная находится.Глобальные переменные в C между функциями

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

Моя самая большая проблема заключается в цикл аннулируются() не получает значение высоты от цикла while в функции int simulateAltitude. Это используется на плате микроконтроллера Arduino UNO с использованием C.

Я знаю, что это бесконечный цикл, он предназначен только для тестирования.

+2

'int a; while (a == 0) ... ': Неопределенное поведение:' a' uninitialized. – 3442

+0

Кроме того, первый вызов Arduino 'setup()' один раз, затем они вызывают 'loop()' неопределенно. Вы уверены, что это то, что вы хотите? То есть, вы никогда не вызываете эту функцию! Кроме того, какова цель 'a'? Это либо сделало функцию абсолютно ничего, либо застряло в бесконечном цикле. – 3442

+1

Пожалуйста, не изменяйте свой вопрос таким образом, чтобы все ответы на сегодняшний день были бесполезны. Это считается плохой формой :-) – paxdiablo

ответ

2

Это не печатает высоту изнутри loop()loop(), потому что в действительности никогда не вызывается.

Помните об Ардуино. Функция setup() вызывается один раз во время загрузки и, как только она возвращается, функция loop() вызывается снова и снова.

С тем, как у вас есть, ваша setup() функция вызывает simulateAltitude(), которая входит в бесконечный цикл, поэтому он никогда не возвращается. Он не работает simulateAltitude() и loop() одновременно.

Вы могли бы быть лучше, глядя на что-то вроде:

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

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

... или что-нибудь еще, поскольку функция вызывает UB! –

+0

Обратите внимание, что OP не инициализирует 'a', хотя ваш код не имеет этой проблемы. – 3442

+0

@KemyLand, я не уверен, что * есть * UB. В стандарте указано, что значение является неопределенным, если вы его не инициализируете, но это отличается от UB, где буквально * что-либо может случиться. Конечно, это плохая идея. – paxdiablo

0

У вас есть 2 проблемы здесь:

Прежде всего, вам необходимо инициализировать a и altitude. Дайте им начальные значения (скажем, 0).

Во-вторых, вы не установили свой серийный монитор. Добавьте эту строку в функции настройки:

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

У меня было это, забыл добавить его здесь. Будет обновлен вопрос. Однако, похоже, он просто спам 0 в консоли. – Bondanr

+0

Фактически, «высота» имеет статический масштаб, поэтому его не нужно инициализировать. – paxdiablo

+1

@Bondanr: Вы читали мой комментарий? Начальное значение «высоты» равно нулю, и Arduino будет бесконечно называть «цикл». , ожидается, что вы получите бесконечный поток нулей в консоли. – 3442

0

Есть две проблемы в этом коде. Во-первых, simulateAltitude никогда не будет вызываться, поэтому altitude никогда не будет обновляться. Вторая проблема заключается в том, что ни a, ни altitude фактически не инициализированы.

Смежные вопросы