views:

48

answers:

1

We are programming a ST269 microcontroller which has two IR distance sensors. To calibrate these sensors we made one table for each sensor with the distance we measured and the corresponding value we get from the ADC.

Now we want to use one function to approximate the values in between. So we defined two two-dimensional arrays (one for each sensor) as global variables. In our function we then want to copy the one array we want to work with to a working array and approximate our values.

So here's the code:

...

unsigned int ir_werte_re[][] = {
    {8,553}, 
    ...
    {83,133}
};

unsigned int ir_werte_li[][] = {
    {8,566}, 
    ...
    {83,147}
};

...

unsigned int geradenaproximation(unsigned int messwert, unsigned int seite)
{
    unsigned int working_array[16][16];
    unsigned int i = 0;

    if (seite == 0) {
        for (i = 0; i < sizeof(working_array); i++) {
            working_array[i][0] = ir_werte_li[i][0];
            i++;
        }
    }
    else {
        for (i = 0; i < sizeof(working_array); i++) {
            working_array[i][0] = ir_werte_re[i][0];
            i++;
        }
    }

    i = 0;
    unsigned int y1 = 0;
    unsigned int x1 = 0;
    ...
}

This code is in a file called sensor.c. We didn't write anything about our global arrays in the sensor.h should we? The sensor.h of course is included in our main.c and there the function is called.

We also tried to copy the arrays via

memcpy(working_array, ir_werte_li, sizeof(working_array));

And in every way we do this we get a

syntax error near unsigned

in the line where we're declaring

unsigned int y1 = 0;

and I'm pretty sure that there is no syntax error in this line : )

The last time I spend coding in C is a few years away so I'm not sure if the way we try to do this is good. Perhaps we can solve this by using a pointer instead of really copying the array or something. So please help me out I'll appreciate your bits on this.

+6  A: 

In C (pre-C99), all variable definitions must appear at the top of the current block scope.

Marcelo Cantos
Pre-C99 yes, C99 allows you place declarations freely.
Georg Fritzsche
Thanks for pointing that out Georg. I've amended the answer accordingly.
Marcelo Cantos
Thank you.Now all I have to do is to wait a week to get the chance to lay my hands on our robot again.
mantuko