For-Schleife läuft ohne printf nicht durch...



  • Cysign schrieb:

    Ich weiß ehrlich nicht, wie ihr das meint.

    Ich wage mal zu behaupten, dass folgendes reicht:

    for (;;)
        {
          usleep(SLEEPVALUE);
          std::vector<int> values;
          CHECK_OAK_CALL(readInterruptReport(deviceHandle, values));
    
          const double mult2 = 180 / M_PI * pow(10.00, channelInfos[2].unitExponent);
          const double mult3 = 180 / M_PI * pow(10.00, channelInfos[3].unitExponent);
          messwerte[0][pet] = values[0];
          messwerte[1][pet] = values[1];
          messwerte[2][pet] = values[2] * mult2;
          messwerte[3][pet] = values[3] * mult3;
          ++net;
          pet=(pet+1) % ARRAYSIZE)
        }
    

    Was auch immer das ursprüngliche Problem mit long double zu tun hatte...
    Mein Einwand, dass Du am letzten Arrayelement vorbeigreifst gilt übrigens immer noch - ist aber untergegangen. Alldieweil ist pet im Code oben im Intervall [0, ARRAYSIZE).


  • Mod

    Cysign schrieb:

    puts("Hello World"); 😃

    Ich weiß ehrlich nicht, wie ihr das meint.
    Es gibt da bestimmt ne Möglichkeit, das kompakter darzustellen.
    Aber ich wüsste nicht, wie das diesen Switch vereinahen soll.

    Wie hast du es denn beim Hello World geschafft? Hast du mal den Link gelesen, den ich dir am Anfang von Seite 2 gegeben habe?

    Ich habe dir in meinem letzten Beitrag übrigens noch wichtige Hinweise reineditiert, während du schon geantwortet hast. Solltest du mal lesen.



  • Puh, gar nicht so einfach, das alles aufzunehmen.
    Aber der Codeblock von Furble Wurble sieht interessant aus. Probier ich mal aus^^

    Linker für -Wall z.B. ist mir bekannt. Aber ich werd aus der Makefile nicht ganz schlau.
    Bisher kenn ich nur makefiles mit <10 Zeilen. Hier jedoch wurde die Makefile über automake generiert. Ich weiß nicht, wie ich die Linker richtig hinzufügen kann. Und mir 637 Zeilen ist diese nicht grade kompakt und leicht zu verstehen für mich.

    Programmieren müsste man können 😉


  • Mod

    Da ist bestimmt ein configure-Programm dabei.

    Außerdem: 😕 Hast du das Programm denn nicht selber geschrieben? Dann musst du doch auch wissen, wie man es übersetzt. Du sollst nicht nach Fehlern in der Bibliothek suchen, sondern du sollst dein Programm mit diesen Optionen übersetzen und starten.

    Mit Linkern hat dies auch überhaupt nichts zu tun. Alles sehr wirr. Vielleicht führst du dir noch ein bisschen mehr Anfängerliteratur zu Gemüte (zweiter Link in meiner Signatur). Ich habe den Eindruck, viel Verwirrung in diesem Thread entsteht, weil du dich nicht richtig ausdrücken kannst und Wörter benutzt, deren Bedeutung du nicht richtig verstehst.



  • Genau, die Make-Datei wird erst mit dem configure-Programm erstellt.

    Wie ich bereits erwähnte, kenne ich nur ein paar C-Basics. Ich nage mich da quasi irgendwie durch und hoffe, dass ich das Ergebnis bekomme, das ich wünsche 😉

    Ich hab mir gestern ein O'Reilly C++-Buch gekauft, das ich mir ein wenig zu Gemüte führen werde. Aber das braucht halt alles seine Zeit.

    Der Grundcode für den Sensor stammt aus dem verlinkten Beispiel von Toradex (siehe Eröffnungspost), dem Sensorhersteller.
    Ich versuche es so anzupassen, dass es den von mir gewünschten Zweck erfüllt.
    Und dabei nehme ich so viele Stolperfallen mit, wie es nur geht 😃


  • Mod

    Tipp: Erst programmieren lernen, dann das Programm anpassen. Glaub mir, das ist die wesentlich schnellere Methode und das Ergebnis ist am Ende auch viel besser. Denk nur, wie weit du in deinem Buch schon wärst, wenn du die letzten drei Tage nicht mit unbeholfener Fehlersuche verbracht hättest.

    Such dir erst einmal einfache Probleme. Lerne an diesen die Grundlagen, die wichtigsten Strukturen und wie man Fehler findet. Wenn du das erst einmal drauf hast, dann funktioniert es auch bei scheinbar schwierigen Problemen ganz von alleine. Komplexe Probleme sind nämlich gar nicht schwer, sie bestehen bloß aus vielen einfachen Problemen 🙂 . Wenn du diese erst einmal selbstständig, sicher und gut angehen kannst, dann ist das komplexe Problem bloß eine Frage der mehrfachen Anwendung. Wenn du hingegen gleich das schwierige Problem angehst, erschlägt es dich, da du noch nicht gelernt hast, in kleinen, einfachen Problemstellungen zu denken.

    Gutes Beispiel ist dein for-switch. Ein Antipattern über das hier jeder heimlich lacht. Aber da du keine Übung in einfachen Ablaufplänen hast, weißt du weder, wie es besser geht, noch was die anderen Forennutzer daran so komisch finden.

    configure, make, make install ist übrigens auch wieder kein C, sondern eine allgemein übliche Art und Weise, Software vom Quellcode an zu verteilen:
    Google: configure make make install



  • Ja, das stimmt, mein Problem ist eine Ansammlung von vielen kleinen Problemen, aber dennoch möchte ich mich da durch beißen.
    Versuch macht kluch, wie man so schön sagt 😉

    @Furble:

    Ich bin positiv überrascht. Klein, smart, funktioniert.
    Einen Haken hat die Sache jedoch.
    Der erste Messdurchlauf spuckt ne Reihe von 0.000000 aus.
    Danach funktioneirt das aber problemlos.

    Als nächstes möchte ich das Array auswerten und Ausreißer rausschmeißen.
    Mein Plan ist:
    Das Array mit "qsort" (http://stackoverflow.com/questions/1787996/c-library-function-to-do-sort) auf- oder absteigend sortieren.

    Danach nehme ich einen Wert aus der Mitte des Arrays und vergleiche alle Werte des kompletten Arrays, ob sie eine Abweichung haben, die größer als ein gewisser Betrag ist. Da ich einen maximalen Anteill an Ausreißern von 10% habe, sollte ich hiermit gut arbeiten können.

    Gibt es eine empfehlenswertere Methode um das Array zu sortieren, als das, was ich auf Stackoverflow gefunden habe?

    Außerdem habe ich mich mal mit dem Hersteller des Sensors in Verbindung gesetzt, da der Sensor auch ein Temperatursignal liefert.
    Ich wollte wissen, ob ich dies auch abgreifen kann, da die OakLibary standardmäßig lediglich die Werte
    Frame[s],Acceleration[m/s²],Zenith [rad],Azimuth[rad] liefert.

    Daraufhin wurde ich auf das Datenblatt des intern verwendeten "SCA3000-D01" verwiesen.

    Das Datenblatt des kompletten USB-Geräts wäre hier: http://docs.toradex.com/100095-oak-tilt-inclination-datasheet.pdf

    Und das Datenblatt des verwendeten ICs auf der Platine befindet sich hier:
    https://www.sparkfun.com/datasheets/Sensors/Accelerometer/SCA3000-D01.pdf

    Laut OakTilt-Datasheet:

    3.2.7
    Direct access to Sensor Registers
    
    This command allow to directly read and write registers of the sensor. This can be used for
    example to change the measurement mode (sensor bandwidth).
    Byte#
    Content
    GnS:
    0 1 2 3 4 5
    GnS 0x03 0x01 RegAddr 0x00 RegValue
    0 = Set
    1 = Get
    RegAddr: Register Address (refer to the SCA3000 datasheet for details)
    RegValue: Register content (refer to the SCA3000 datasheet for details)
    

    Laut Sensor-IC-Datasheet hat der verwendete SCA3000-D01 auch einen "Temperature output".

    Hat hier vielleicht jemand eine Idee, wie ich nun die ausgewertete Temperatur abgreifen kann?
    Im Datenblatt finde ich leider keine Infos, die mir in irgendeiner Weise einen Ansatz zum Googeln liefern.

    PS: Ists vielleicht sinnvoller, wenn ich für diese zwei Problemchen nen neuen Threat aufmache? Ich weiß noch nicht so recht, wie ihr das hier im Board bevorzugt handhabt 😉



  • Cysign schrieb:

    Ich bin positiv überrascht. Klein, smart, funktioniert.
    Einen Haken hat die Sache jedoch.
    Der erste Messdurchlauf spuckt ne Reihe von 0.000000 aus.
    Danach funktioneirt das aber problemlos.

    Dafür wird es sicher einen Grund geben - k.A. wo und wie Du jetzt eine Ausgabe gebaut hast.
    Evtl. poste nochmal den aktuellen Stand des gesamten Programms.
    Das ist aber auch schon alles, was von Deinen Problemen noch in diesen Thread gehört.

    Cysign schrieb:

    Als nächstes möchte ich das Array auswerten und Ausreißer rausschmeißen.
    Mein Plan ist:
    Das Array mit "qsort" (http://stackoverflow.com/questions/1787996/c-library-function-to-do-sort) auf- oder absteigend sortieren.

    Danach nehme ich einen Wert aus der Mitte des Arrays und vergleiche alle Werte des kompletten Arrays, ob sie eine Abweichung haben, die größer als ein gewisser Betrag ist. Da ich einen maximalen Anteill an Ausreißern von 10% habe, sollte ich hiermit gut arbeiten können.

    Gibt es eine empfehlenswertere Methode um das Array zu sortieren, als das, was ich auf Stackoverflow gefunden habe?

    Meiner Meinung nach solltest Du Dir die Möglichkeiten zur Sortierung von C++ ansehen.
    Wenn Du in Deinem Kontext dazu Fragen hast, frag bitte im C++-Bereich - am Besten Du hast dann auch gleich ein Array mit Beispieldaten zur Hand.

    Zur Sache mit dem Datenblatt/Hardware usw. gilt das gleiche: richtiges Unterforum suchen, dort posten.


Anmelden zum Antworten