H
Henning Mortensen
- Jan 1, 1970
- 0
Hi again,
I'm having problems getting room for the code in my ATmega8. I found that
working with 32 bit int's wasn't enough, but now I changed et all to 64 bit
int's the code grew about 50% from about 80% of the mega8's space to about
120%
I found that most of the space is lost in the following code where I use
fabs and sqrt. If I remove thoes lines the code is fills about 99%...
Anybody knows how to optimize the code to use less space, of a feature in
AVR studio (GCC) to optimize.
Speed is NOT important, space is.
"C:\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr\bin\ld.exe: region text
is full (cnc.elf section .text)"
Thanks
- Henning
void moveto(uint64_t nyx,uint64_t nyy,uint64_t nyz)
{
long int dx;
long int dy;
long int dz;
double Rho;
double enX;
double enY;
double enZ;
double x;
double y;
double z;
dx = nyx - globalx;
dy = nyy - globaly;
dz = nyz - globalz;
Rho = sqrt((double)(dx * dx) + (double)(dy * dy) + (double)(dz * dz));
enX = (double)dx / Rho;
enY = (double)dy / Rho;
enZ = (double)dz / Rho;
x=0;
y=0;
z=0;
int R = 0;
for (R=0;R<=Rho;R++)
{
x += enX;
y += enY;
z += enZ;
if (fabs(x) >= 1)
{
if (x<0)
{
x++;
globalx --;
MStep(Motorx,negative);
}
else
{
x--;
globalx ++;
MStep(Motorx,positive);
}
}
if (fabs(y) >= 1)
{
if (y<0)
{
y++;
globaly --;
MStep(Motory,negative);
}
else
{
y--;
globaly ++;
MStep(Motory,positive);
}
}
if (fabs(z) >= 1)
{
if (z<0)
{
z++;
globalz --;
MStep(Motorz,negative);
}
else
{
z--;
globalz ++;
MStep(Motorz,positive);
}
}
}
}
I'm having problems getting room for the code in my ATmega8. I found that
working with 32 bit int's wasn't enough, but now I changed et all to 64 bit
int's the code grew about 50% from about 80% of the mega8's space to about
120%
I found that most of the space is lost in the following code where I use
fabs and sqrt. If I remove thoes lines the code is fills about 99%...
Anybody knows how to optimize the code to use less space, of a feature in
AVR studio (GCC) to optimize.
Speed is NOT important, space is.
"C:\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr\bin\ld.exe: region text
is full (cnc.elf section .text)"
Thanks
- Henning
void moveto(uint64_t nyx,uint64_t nyy,uint64_t nyz)
{
long int dx;
long int dy;
long int dz;
double Rho;
double enX;
double enY;
double enZ;
double x;
double y;
double z;
dx = nyx - globalx;
dy = nyy - globaly;
dz = nyz - globalz;
Rho = sqrt((double)(dx * dx) + (double)(dy * dy) + (double)(dz * dz));
enX = (double)dx / Rho;
enY = (double)dy / Rho;
enZ = (double)dz / Rho;
x=0;
y=0;
z=0;
int R = 0;
for (R=0;R<=Rho;R++)
{
x += enX;
y += enY;
z += enZ;
if (fabs(x) >= 1)
{
if (x<0)
{
x++;
globalx --;
MStep(Motorx,negative);
}
else
{
x--;
globalx ++;
MStep(Motorx,positive);
}
}
if (fabs(y) >= 1)
{
if (y<0)
{
y++;
globaly --;
MStep(Motory,negative);
}
else
{
y--;
globaly ++;
MStep(Motory,positive);
}
}
if (fabs(z) >= 1)
{
if (z<0)
{
z++;
globalz --;
MStep(Motorz,negative);
}
else
{
z--;
globalz ++;
MStep(Motorz,positive);
}
}
}
}