Прошу пояснить по функции Serial

El
Offline
Зарегистрирован: 10.03.2016

Доброго времени сутк!

Я к вам с вопросом по функции или по составлению правильного запроса в яндекс. Вопрос: "Как сделать так, чтоб функция Serial.print() работала из пользовательской функции?. В нижеследующем простеньком скетче представлена проблема. Функцияя вывода строки работает только в setup и в loop, но не работает в сериал... почему? Я пытался найти информацию, но не получилось.

void setup() {
  Serial.begin(9600);
  Serial.println("void setup");
}
void loop() {
  Serial.println("void loop");
  SerialF;
  delay(5000);
  Serial.println("the end of delay");
}
void SerialF() {
//  Serial.begin(9600); пробовал объявлять, но не помогло
//  while(!Serial); пробовал даже делать эту лишнюю операцию, но толку нет
  Serial.println("void SerialF"); //вот этот текст не выводится
}

Может кто встречал описание этой функции на более-менее приемлемом русском языке?

Araris
Offline
Зарегистрирован: 09.11.2012

Serial тут вообще ни при чём. Строку 7 замените на SerialF();

okta
Offline
Зарегистрирован: 10.01.2015

Синтаксис вызова функций читаем.

07   SerialF; -это может быть что угодно, но точно не вызов функции

найдите отличия

07   SerialF(); - а это вызов функции без параметров

 

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

А что setup() и loop() не пользовательские функции? А какие?

El
Offline
Зарегистрирован: 10.03.2016

Araris пишет:

Serial тут вообще ни при чём. Строку 7 замените на SerialF();

okta пишет:

Синтаксис вызова функций читаем.

07   SerialF; -это может быть что угодно, но точно не вызов функции

найдите отличия

07   SerialF(); - а это вызов функции без параметров

Блин, как можно было так лопухнуться??!! Ведь даже не подумал в эту сторону... Спасибо.

El
Offline
Зарегистрирован: 10.03.2016

ЕвгенийП пишет:

А что setup() и loop() не пользовательские функции? А какие?

В силу привычки называю их заводскими :)

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

El пишет:

Araris пишет:

Serial тут вообще ни при чём. Строку 7 замените на SerialF();

okta пишет:

Синтаксис вызова функций читаем.

07   SerialF; -это может быть что угодно, но точно не вызов функции

найдите отличия

07   SerialF(); - а это вызов функции без параметров

Блин, как можно было так лопухнуться??!! Ведь даже не подумал в эту сторону... Спасибо.

А траснслятор ничего на "SerialF" не сказал разве? Например что переменная не объявлена.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

SerialF - это указатель на функцию - передает адрес ее расположения в памяти

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

Buzzer2010 пишет:

А траснслятор ничего на "SerialF" не сказал разве? Например что переменная не объявлена.

А что он должен был сказать? Всё обявлено, операция совершенно законная, а то, что она означает не то, что имел в Виду ТС, так про то компилятору ничего неизвестно.

Раз уж Вы читаете Кернигана и Ритчи, прочитайте раздел 5.11