Код на C компилируется, но в наброске Arduino это не так - PullRequest
0 голосов
/ 19 мая 2019

У меня есть некоторый C-код, который компилируется с GNU GCC, но когда я помещаю его в эскиз Arduino, он говорит, что

не может преобразовать 'const float' в 'float () [25]'для аргумента' 1 'в' float dot_product (float () [25], float *) '

В эскизе есть функция sigmoid и forward и точка_p, которые все определены,Я пытаюсь сохранить некоторые значения в самом эскизе, потому что я не могу сохранить все значения в EEPROM, пожалуйста, предоставьте любое дополнительное пояснение, если вы можете помочь

. Эскиз выглядит следующим образом:

#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

const float a[25][25] = { A LONG LIST OF NUMBERS arranged in 25X25};

  float b[25]={Another list of numbers};
 void setup() {}

 void loop() {}

 float dot_product(float v[][25], float u[])
{

    for (int j = 0; j< 25; j++){
             float result = 0.0;
    for (int i = 0; i < 25; i++){
        result += u[i]*v[j][i];

    }
    return result;
    }
}
double forward(float x){

    float lm[25];
    double km[25];
    double t=0;
    double output=0;
    for(int i=0; i <25; i++){
        lm[i] = 0;
        km[i] = 0;
    }
    for (int k=0; k<25; k++){
        lm[k]= dot_product(a[k],x);
        /*** THIS IS THE ERROR SOURCE***/


    }

     for (int j=0; j<25;j++){
      km[j] = sigmoid(lm[j]);

    }


    t = dot_p(km,b);
    output = sigmoid(t);

    return output;

}

1 Ответ

0 голосов
/ 19 мая 2019

после удаления всего «ненужного» кода и исправления нескольких мелких ошибок, результат:

// if you really want 'const', 
// then all references must also be 'const'
float a[25][25];

// the second parameter is from a float value
// not from an array of float values
float dot_product( float v[][25], float u )
{
    // initialize the float variable from a float literal
    // rather than from a double literal
    float result = 0.0f;

    for (int i = 0; i < 25; i++)
    {
        // since the function exits after summing a single
        // row, the 'j' is replaced with 0
        result += u * v[0][i];
    }
    return result;
}


void forward(float x)
{
    float lm = 0.0f;

    for (int k=0; k<25; k++)
    {
        // note: passing address of 'a[k]'
        lm += dot_product( &a[k], x );
    }
}
...