Функция работает сама собой

boolean stringComplete;
String inputString = "";
void setup() 
{ 
Serial.begin(9600);  
}
void loop() 
{
  if (stringComplete) {
  Serial.println(inputString);
  inputString="";
  stringComplete = false; 
 }
}
//////////////////////////
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}
//////////////////////////

Взял как пример из скетча одного автора. Не знал, что так можно. Функция не используется, но сама собой работает.

Она не сама собой работает.
Кто то просто в исходники ардуино ни разу не заглядывал и не знает как там устроен цикл lo̶o̶p̶(̶)̶̶ main()
На, смотри:

  main.cpp - Main loop for Arduino sketches
  Copyright (c) 2005-2013 Arduino Team.  All right reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#include <Arduino.h>

// Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (* /*func*/ )()) { return 0; }

// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }

void setupUSB() __attribute__((weak));
void setupUSB() { }

int main(void)
{
	init();

	initVariant();

#if defined(USBCON)
	USBDevice.attach();
#endif
	
	setup();
    
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
        
	return 0;
}

Не, не смотрел.

Ну так, тебе только кажется что работает только твой код, а по факту там в ядре много всего

Надо её в угол поставить на горох !

2 лайка

Была бы у меня такая функция, я, быть может, никогда бы и не женился.

5 лайков

Ясно, очередная исключительность…
Просто я всегда писал в лооп вызов функции, а тут чуть на автора не наехал, мол не будет работать… значит не работает по другой причине.

Помню, один блогер на букву “Г” форсил ускорение программы заключением всего содержимого loop() в for( ; ; ) :wink:

Искусственный интеллект, однако!

1 лайк

ТС, у каждого из здесь присутствующих , где то в запасниках , наверняка есть примеры кода, где в loop(), нет вообще ничего, но при этом биты крутятся , дела мутятся…

А где-то наоборот: упорно не хотят работать в setup(), зато прекрасно работают в loop().