C ++ Вызов функции внутри другой функции, которая использует ссылки и параметры

0

Я программирую в Arduino IDE (который использует в основном C++), и мне сложно вызвать функцию внутри другого. Часть кода приведена ниже:

unsigned long int deslocamento (char sentido, byte &cont, const int pino, unsigned long int posicaoA)
{
  byte leitura;
  unsigned int deltaposicao;

  leitura = digitalRead(pino);

  if ((leitura == HIGH) && (cont == 0))
  {
    cont = 1;
  }

  if ((leitura == LOW) && (cont == 1))
  {
    cont = 0;

    deltaposicao++;
  }

  if (sentido == 'F')
  {
    posicaoA += deltaposicao;
  }

  else
  {
    posicaoA -= deltaposicao;
  }

  return posicaoA;
}

void zeramento (unsigned long int posicaoA)
{
  byte pwm = 255;
  char sentido = 'R';

  byte fator;

  fator = fatorcorrecaoP (pwm);

  while (posicaoA != 0)
  {
    posicaoA = deslocamento (sentido, cont, pinencoder, posicaoA);

    posicaoA -= fator;

    comando (sentido, pwm);
  }
}

В функции "void zeramento" следует объявить в качестве входных данных все входы (параметры), которые используют функцию "unsigned long int deslocamento" или слишком упрощенную или более короткую (или, может быть, более эффективную в области оптимизации памяти) способ сделать это? Например, следует ли объявлять как "void zeramento (posicaoA, sentido, & cont, pinecoder)"?

Спасибо за все и прошу прощения за любую проблему. Я здесь новичок и все еще изучаю английский.

  • 2
    Я не могу понять вопрос.
  • 0
    Я опустил остальную часть кода, но я постараюсь описать его в моих лучших проявлениях. Это код для ATMEGA, который управляет машиной резки. Машина имеет много входов для пользователя, как скорость и продолжительность работы. Идет в определенную позицию и возвращается. У него много других функций, таких как обработка памяти. Первый из них («deslocamento») определяет, основываясь на направлении движения, последней позиции и показаниях датчика датчика, фактическое положение машины. Вторая выполняется только в начале и предназначена для перемещения машины в нулевое положение, в зависимости от того, в каком положении она находилась при включении.
Показать ещё 6 комментариев
Теги:
arduino
function
arduino-ide

1 ответ

0
Лучший ответ

Это зависит от того, чего вы пытаетесь достичь. Для более короткого кода я просто позвоню своим функциям funcA и funcB и параметрам par1 и par2.

Вы можете сделать

void funcA(int par1, int par2)
{ ... use par1 and par2 ... }

void funcB(int par1, int par2)
{
    ...
    funcA(par1, par2);
    ...
}

или

int global_par1;
int global_par2;

void funcA(int par1, int par2)
{ ... use par1 and par2 ... }

void funcB()
{
    ...
    funcA(global_par1, global_par2);
    ...
}

В первом случае вы используете только локальные переменные, а во втором - глобальные.

Разница в том, что в глобальном случае (просьба называть их по-разному в funcA и funcB, так как могут быть проблемы с читабельностью), переменные уникальны для всей программы (т. funcB Если вы их модифицируете в main вы будете изменять их даже в функциях), в то время как в локальном случае вы просто работаете над их локальной копией.

На мой взгляд, поскольку эти переменные определяют позицию (которая уникальна), я бы пошел с полностью глобальным решением, т.е.

int global_par1;
int global_par2;

void funcA()
{ .. use global_par1 and global_par2.. }

void funcB()
{
    ...
    funcA();
    ...
}
  • 0
    Итак, как я уже сказал, должен ли я объявить его как void zeramento (posicaoA, sentido, & cont, pinecoder)? Я хотел избежать этого, так как мне уже пришлось указывать все эти параметры для функции deslocamento. Для меня это выглядит неоднозначно, поэтому я подумал, что это будет более подходящим способом
  • 0
    если вы предпочитаете локальную переменную версию, да. Или лучше, я бы назвал это void zeramento (char sentido, byte &cont, const int pino, unsigned long int posicaoA) ( posicaoA в конце, просто иметь одинаковый отпечаток для обеих функций - это более читабельно)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню