C Изменение переменной функции неожиданно - PullRequest
1 голос
/ 09 апреля 2020

Я использую симулятор (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 изменяется, не касаясь его.

...