Решил вынести на исполнение в функцию (Мигаем светодиодом)

mostApi
Offline
Зарегистрирован: 29.05.2017
void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13, 0);
  delay(1000);
  digitalWrite(13, 1);
  delay(1000);
}

По класическому все работает...

Есть необходимость вынести за пределы главного цикла void loop... выношу:

void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  LEDS;
  delay(1000);
}

void LEDS() {
if (digitalRead(13)) digitalWrite(13, 0); else digitalWrite(13, 1);
}

- не работает, ошибок при компиляции нет, кто может подсказать почему?

obuhanoe
Offline
Зарегистрирован: 18.05.2016

mostApi пишет:

void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13, 0);
  delay(1000);
  digitalWrite(13, 1);
  delay(1000);
}

По класическому все работает...

Есть необходимость вынести за пределы главного цикла void loop... выношу:

void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  LEDS;
  delay(1000);
}

void LEDS() {
if (digitalRead(13)) digitalWrite(13, 0); else digitalWrite(13, 1);
}

- не работает, ошибок при компиляции нет, кто может подсказать почему?

void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  LEDS(); // может так?
  delay(1000);
}

void LEDS() {
if (digitalRead(13)) digitalWrite(13, 0); else digitalWrite(13, 1);
}

 

mostApi
Offline
Зарегистрирован: 29.05.2017

obuhanoe - Спасибо, странно тогда почему компилятор не ругнулся...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mostApi пишет:

obuhanoe - Спасибо, странно тогда почему компилятор не ругнулся...

А чего ему ругаться? Та конструкция тоже вполне правильная, только делает несколько иные вещи.

mostApi
Offline
Зарегистрирован: 29.05.2017

okta -?

ЕвгенийП - что в таком случае выполняется?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  void (*Do)()=LEDS;
  // LEDS() ; это выполнить функцию по указателю функции LEDS
  // LEDS   это просто переменная указатель функции
  Do(); 
  delay(1000);
}

void LEDS() {
  if (digitalRead(13)) digitalWrite(13, 0); else digitalWrite(13, 1);
}

Не задавайте вопросы , ответы на которые не можете понять http://cpp.com.ru/kr_cbook/ch5kr.html#p52

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mostApi пишет:

ЕвгенийП - что в таком случае выполняется?

Вычисляется адрес функции LEDS

Другой вопрос "для чего". В данном случае ни для чего, результат тут же выбрасывается. Но если эту возможность использовать с умом (Вы то её случайно по незнанию использовали), то иногда она полезна.

Nirst
Offline
Зарегистрирован: 30.05.2017

Обязательно писать в скобках объявление указателя на функцию

qwone пишет:

  char * pointeR;
  void (*Do)()=LEDS;
  Do(); 

Или разрешено

  void *  Do()=LEDS;
  Do();
  char * pointeR; 
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

[quote=Nirst]

Вы знаете приоритет операций. Ну сначало умножение, а потом сложение . Так такая и фишка здесь . У скобок приритет выше чем у * (разыменовывания)

char * p;// <- это уазатель на переменую
char (*p)(); // <--- указатель на функцию возвращающую char
void (*p)();// <--- указатель на функцию ничего не возвращающую
void *Do(); // <--- не уверен что работает. По крайнем мере так в описании Си не советуют

http://www.amse.ru/courses/cpp2/2011_04_11.html

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Nirst пишет:

Обязательно писать в скобках объявление указателя на функцию

Или разрешено

Только для Вас :)