- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 10

Thema: Arduino Nano / Uno - Program (Sketch) läuft auf dem Uno auf dem Nano nicht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    Zitat Zitat von piggituX Beitrag anzeigen
    siehe .... Es liegt nicht am Timer1, ich muss das Prog nochmal überdenken...
    du schriebst erst etwas über "sich aufhängen" und dass es läuft, wenn du die Routine weg lässt...
    was passiert denn jetzt genau, und wie sieht die Berechnung aus?
    Stammt die Berechnung von dir selber oder ist sie aus einer Lib?
    Hängt sie sich wirklich auf oder ist sie anscheinend nur sehr langsam?

    - - - Aktualisiert - - -

    lass doch mal diesen abgespeckten Benchmark Test laufen - wenn deine CPU wirklich zu langsam ist oder fehlerhaft rechnet, dann wird es sich hiermit zeigen:

    Code:
    // HaWe Brickbench
    // benchmark test for NXT/EV3 and similar Micro Controllers
    // Autor: (C) Helmut Wunder 2013,2014
    // ported to Arduino Sketch/Wiring by Helmut Wunder
    // freie Verwendung für private Zwecke
    // für kommerzielle Zwecke nur nach schriftlicher Genehmigung durch den Autor.
    // protected under the friendly Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
    // http://creativecommons.org/licenses/by-nc-sa/3.0/
    //
    // version 1.09.1.0022-noDisplay-noSort
    
    
    #define TimerMS() millis()
    
    unsigned long runtime[8];
    
    //int a[500], b[500], c[500], t[500];
    
    //--------------------------------------------
    // Mersenne Twister
    //--------------------------------------------
    
    unsigned long randM(void) {
       
       const int M = 7;
       const unsigned long A[2] = { 0, 0x8ebfd028 };
    
       static unsigned long y[25];
       static int index = 25+1;
    
       if (index >= 25) {
         int k;
         if (index > 25) {
            unsigned long r = 9, s = 3402;
            for (k=0 ; k<25 ; ++k) {
              r = 509845221 * r + 3;
              s *= s + 1;
              y[k] = s + (r >> 10);
            }
         }
         for (k=0 ; k<25-M ; ++k)
            y[k] = y[k+M] ^ (y[k] >> 1) ^ A[y[k] & 1];
         for (; k<25 ; ++k)
            y[k] = y[k+(M-25)] ^ (y[k] >> 1) ^ A[y[k] & 1];
         index = 0;
       }
    
       unsigned long e = y[index++];
       e ^= (e << 7) & 0x2b5b2500;
       e ^= (e << 15) & 0xdb8b0000;
       e ^= (e >> 16);
       return e;
    }
    
    //--------------------------------------------
    // Matrix Algebra
    //--------------------------------------------
    
    // matrix * matrix multiplication (matrix product)
     
     void MatrixMatrixMult(int N, int M, int K, double *A, double *B, double *C) {
       int i, j, s;
       for (i = 0; i < N; ++i) {
          for (j = 0; j < K; ++j) {
             C[i*K+j] = 0;
             for (s = 0; s < M; ++s) {
                C[i*K+j] = C[i*K+j] + A[i*N+s] * B[s*M+j];
             }
          }
       }
    }
    
    
    // matrix determinant
    
    double MatrixDet(int N, double A[]) {
       int i, j, i_count, j_count, count = 0;
       double Asub[N - 1][N - 1], det = 0;
    
       if (N == 1)
          return *A;
       if (N == 2)
          return ((*A) * (*(A+1+1*N)) - (*(A+1*N)) * (*(A+1)));
    
       for (count = 0; count < N; count++) {
          i_count = 0;
          for (i = 1; i < N; i++) {
             j_count = 0;
             for (j = 0; j < N; j++) {
                if (j == count)
                   continue;
                Asub[i_count][j_count] = *(A+i+j*N);
                j_count++;
             }
             i_count++;
          }
          det += pow(-1, count) * A[0+count*N] * MatrixDet(N - 1, &Asub[0][0]);
       }
       return det;
    }
    
    
    
    //--------------------------------------------
    // shell sort
    //--------------------------------------------
    
    void shellsort(int size, int* A)
    {
      int i, j, increment;
      int temp;
      increment = size / 2;
    
      while (increment > 0) {
        for (i = increment; i < size; i++) {
          j = i;
          temp = A[i];
          while ((j >= increment) && (A[j-increment] > temp)) {
            A[j] = A[j - increment];
            j = j - increment;
          }
          A[j] = temp;
        }
    
        if (increment == 2)
           increment = 1;
        else
           increment = (unsigned int) (increment / 2.2);
      }
    }
    
    //--------------------------------------------
    // gnu quick sort
    // (0ptional)
    //--------------------------------------------
    
    int compare_int (const int *a, const int *b)
    {
      int  temp = *a - *b;
    
      if (temp > 0)          return  1;
      else if (temp < 0)     return -1;
      else                   return  0;
    }
    
    // gnu qsort:
    // void qsort (void *a , size_a count, size_a size, compare_function)
    // gnu qsort call for a[500] array of int:
    // qsort (a , 500, sizeof(a), compare_int)
    
    
    
    //--------------------------------------------
    // benchmark test procedures
    //--------------------------------------------
    
    
    int test_Int_Add() {
       int i=1, j=11, k=112, l=1111, m=11111, n=-1, o=-11, p=-111, q=-1112, r=-11111;
       int x;
       volatile long s=0;
       for(x=0;x<10000;++x) {
         s+=i; s+=j; s+=k; s+=l; s+=m; s+=n; s+=o; s+=p; s+=q; s+=r;
       }
       return s;
    }
    
    
    
    long test_Int_Mult() {
      int x,y;
      volatile long s;
    
      for(y=0;y<2000;++y) {
        s=1;
        for(x=1;x<=13;++x) { s*=x;}
        for(x=13;x>0;--x) { s/=x;}
    
      }
      return s;
    }
    
    
    #define PI  M_PI
    
    
    double test_float_math() {
    
      volatile double s=PI;
      int y;
    
      for(y=0;y<1000;++y) {
         s*=sqrt(s);
         s=sin(s);
         s=exp(s);
         s*=s;
      }
      return s;
    }
    
    
    long test_rand_MT(){
      volatile unsigned long s;
      int y;
    
      for(y=0;y<5000;++y) {
         s=randM()%10001;
      }
      return s;
    }
    
    
    double test_matrix_math() {
      int x;
    
      double A[2][2], B[2][2], C[2][2];
      double S[3][3], T[3][3];
      unsigned long s;
    
      for(x=0;x<250;++x) {
    
        A[0][0]=1;   A[0][1]=3;
        A[1][0]=2;   A[1][1]=4;
    
        B[0][0]=10;  B[0][1]=30;
        B[1][0]=20;  B[1][1]=40;
    
        MatrixMatrixMult(2, 2, 2, A[0], B[0], C[0]); // <<<<<<<<<<<<<<<<<<<
    
        A[0][0]=1;   A[0][1]=3;
        A[1][0]=2;   A[1][1]=4;
        MatrixDet(2, A[0]);                          // <<<<<<<<<<<<<<<<<<<
    
        S[0][0]=1;   S[0][1]=4;  S[0][2]=7;
        S[1][0]=2;   S[1][1]=5;  S[1][2]=8;
        S[2][0]=3;   S[2][1]=6;  S[2][2]=9;
    
        MatrixDet(3, S[0]);                          // <<<<<<<<<<<<<<<<<<<
    
      }
    
      s=(S[0][0]*S[1][1]*S[2][2]);
      return s;
    }
    
    
    
    // for array copy using void *memcpy(void *dest, const void *src, size_t n);
    
    long test_Sort(){
      unsigned long s;
      int y, i;
    /*  
      int t[500];
     
      for(y=0;y<30;++y) {
        memcpy(t, a, sizeof(a));
        shellsort(500, t);
       
        memcpy(t, a, sizeof(b));
        shellsort(500, t);
       
        memcpy(t, a, sizeof(c));
        shellsort(500, t);
      }
    */
      return y;
    }
    
    inline void displayValues() {
    
      char buf[120];
      /*
      myGLCD.clrScr();
    
        sprintf (buf, "%3d %9ld  int_Add",    0, runtime[0]); myGLCD.print(buf, 0,10);
        sprintf (buf, "%3d %9ld  int_Mult",   1, runtime[1]); myGLCD.print(buf, 0,20);
        sprintf (buf, "%3d %9ld  float_op",   2, runtime[2]); myGLCD.print(buf, 0,30);
        sprintf (buf, "%3d %9ld  randomize",  3, runtime[3]); myGLCD.print(buf, 0,40);
        sprintf (buf, "%3d %9ld  matrx_algb", 4, runtime[4]); myGLCD.print(buf, 0,50);
        sprintf (buf, "%3d %9ld  arr_sort",   5, runtime[5]); myGLCD.print(buf, 0,60);
        sprintf (buf, "%3d %9ld  TextOut",    6, runtime[6]); myGLCD.print(buf, 0,70);
        sprintf (buf, "%3d %9ld  Graphics",   7, runtime[7]); myGLCD.print(buf, 0,80);
      */ 
       
    }
    
    
    
    
    int test(){
    
      unsigned long time0, x, y;
      double s;
      char  buf[120];
      int   i;
      float f;
    
     /*
      for(y=0;y<500;++y) {
        a[y]=randM()%30000; b[y]=randM()%30000; c[y]=randM()%30000;
      }
     */
    
     
      time0= TimerMS();;
      s=test_Int_Add();
      runtime[0]=TimerMS()-time0;
      sprintf (buf, "%3d %9ld  int_Add",    0, runtime[0]); Serial.println( buf);
    
    
      time0=TimerMS();
      s=test_Int_Mult();
      runtime[1]=TimerMS()-time0;
      sprintf (buf, "%3d %9ld  int_Mult",   1, runtime[1]); Serial.println( buf);
    
    
      time0=TimerMS();
      s=test_float_math();
      runtime[2]=TimerMS()-time0;
      sprintf (buf, "%3d %9ld  float_op",   2, runtime[2]); Serial.println( buf);
    
    
      time0=TimerMS();
      s=test_rand_MT();
      runtime[3]=TimerMS()-time0;
      sprintf (buf, "%3d %9ld  randomize",  3, runtime[3]); Serial.println( buf);
     
    
      time0=TimerMS();
      s=test_matrix_math();
      runtime[4]=TimerMS()-time0;
      sprintf (buf, "%3d %9ld  matrx_algb", 4, runtime[4]); Serial.println( buf);
     
    
    
      time0=TimerMS();
      //s=test_Sort();
      runtime[5]=TimerMS()-time0;
      sprintf (buf, "%3d %9ld  arr_sort N/A",   5, runtime[5]); Serial.println( buf);
     
     
      // lcd display text / graphs
     
      time0=TimerMS();
      //s=test_TextOut();
      runtime[6]=TimerMS()-time0;
      sprintf (buf, "%3d %9ld  TextOut N/A", 6, runtime[6]); Serial.println( buf);
    
     
      time0=TimerMS();
      //s=test_graphics();
      runtime[7]=TimerMS()-time0;
      sprintf (buf, "%3d %9ld  Graphics N/A", 7, runtime[7]); Serial.println( buf);
     
    
      Serial.println();
     
      y = 0;
      for (x = 0; x < 8; ++x) {
          y += runtime[x];
      }
     
      displayValues();
     
      sprintf (buf, "gesamt ms: %9ld ", y);
      Serial.println( buf);
    
     
      x=50000000.0/y;
      sprintf (buf, "benchmark: %9ld ", x);
      Serial.println( buf);
    
    
      return 1;
    
    }
    
    
    
    void setup() {
     
      Serial.begin(115200);
     
    }
    
    void loop() {
      char  buf[120];
      test();
     
      sprintf (buf, "Ende HaWe brickbench");   
      Serial.println( buf);
    
     
      while(1);
    }
    was gibt er aus bei Tests 0-4?
    (die letzten 3 Tests 5-7 werden hier in der abgespeckten Version übersprungen, daher jew. immer 0 - N/A)
    Geändert von HaWe (08.01.2018 um 17:59 Uhr)

Ähnliche Themen

  1. Arduino Nano mit 128 kHz int. Takt nicht mehr ansprechbar
    Von xxrider im Forum Arduino -Plattform
    Antworten: 11
    Letzter Beitrag: 04.07.2017, 09:49
  2. Arduino Nano mit ESP-201
    Von hirnfrei im Forum Arduino -Plattform
    Antworten: 23
    Letzter Beitrag: 21.11.2016, 21:05
  3. Roboter mit ARDUINO NANO
    Von stochri im Forum Arduino -Plattform
    Antworten: 13
    Letzter Beitrag: 23.10.2015, 21:47
  4. Arduino Nano lässt sich nicht neu Programmieren
    Von xari im Forum Arduino -Plattform
    Antworten: 4
    Letzter Beitrag: 28.07.2015, 18:47
  5. Arduino Nano mit Uno aus/einschalten
    Von SoulRaiZor im Forum Arduino -Plattform
    Antworten: 8
    Letzter Beitrag: 24.05.2015, 10:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress