Я использую симулятор (Atmega 2560) отладчика в студии Atmel. Когда я запускаю отладчик, значение F = 30 в начале функции MoveStraight становится равным 0 после первого присвоения значения Math / Struct.
#include <math.h>
#include <stdio.h>
struct Straight { //Define structure to move straight
long Sx;
long Sy;
long Sz;
unsigned char NX;
unsigned char OCRXAH;
unsigned char OCRXAL;
unsigned char NY;
unsigned char OCRYAH;
unsigned char OCRYAL;
unsigned char NZ;
unsigned char OCRZAH;
unsigned char OCRZAL;
};
struct Straight MoveStraight(unsigned char MoveMode, int X, int Y, int Z, unsigned int F, int Lx, int Ly, int Lz);
struct Straight MoveStraight(unsigned char MoveMode, int X, int Y, int Z, unsigned int F, int Lx, int Ly, int Lz) {
//Here is F = 30
struct Straight StraightMovement;
if (MoveMode == 1) {
StraightMovement.Sx = X * Lx;
//Here is F = 0
StraightMovement.Sy = Y * Ly;
StraightMovement.Sz = Z * Lz;
}
float Fs = (float)F/60;
float St = sqrt(pow(X, 2)+pow(Y, 2)+pow(Z, 2));
float Tt = St/Fs;
//Here comes other code
return StraightMovement;
}
int main(void) {
unsigned char MoveMode = 1;
int X = 5;
int Y = 0;
int Z = 0;
unsigned int F = 30;
int Lx = 6400;
int Ly = 6400;
int Lz = 6400;
struct Straight Move = MoveStraight(MoveMode, X, Y, Z, F, Lx, Ly, Lz);
while (1) {
}
}
Почему F изменяется, не касаясь его.