Я программирую в 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)"?
Спасибо за все и прошу прощения за любую проблему. Я здесь новичок и все еще изучаю английский.
Это зависит от того, чего вы пытаетесь достичь. Для более короткого кода я просто позвоню своим функциям 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();
...
}
void zeramento (char sentido, byte &cont, const int pino, unsigned long int posicaoA)
( posicaoA
в конце, просто иметь одинаковый отпечаток для обеих функций - это более читабельно)