- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 19

Thema: Grundsatzfragen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    Zitat Zitat von Ceos Beitrag anzeigen
    oh mist sorry hab das mit uint16 nicht gesehen

    Behalte nur immer im Hinterkopf dass es da draußen verschiedene Byte Orders gibt, also MSB und LSB auch mal vertauscht sein könnten .... klar unwichtig für den speziellen Fall will nur darauf hinweisen!
    LSB oder MSB sind für Arduino eigentlich kein Thema,
    aber mit char muss man aufpassen
    char bei AVR : immer signed !
    char bei ARM und ESP: immer unsigned!

    daneben, aber ebenfalls hier offtopic:
    int bei AVR = 16-bit
    int bei ARM und ESP = 32-bit

    (liegt an gcc, nicht an Arduino!)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    deswegen nutzt er ja vorbildlich die expliziten typen
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    HaWe
    Gast
    Zitat Zitat von Ceos Beitrag anzeigen
    deswegen nutzt er ja vorbildlich die expliziten typen
    ja, das geht aber auch nicht immer, manchmal muss man zwingend char benutzen.

    @moppi:
    ich vermute, du musst oben per file.read 2 bytes einzeln nacheinander lesen, und eines davon <<8 shiften, dann beide addieren.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ja, HaWe.

    Das war das schöne an x86 Assembler. Daten lesen in den Speicher und zugreifen mit 8Bit, 16Bit oder 32Bit - egal, weil Speicher ist Speicher.
    So nun dachte ich, Daten einlesen in einem Rutsch, und zugreifen mit:

    8Bit-Werten, liest mir ein Byte aus dem Puffer in meine uint8_t -Variable
    16Bit-Werten, liest mir zwei Byte aus dem Puffer in meine uint16_t-Variable

    geht nur nicht.

    Ich habe es umgestellt auf Byte und muss dann shiften und den zweiten Wert nochmal verknüpfen.

    - - - Aktualisiert - - -

    Ich schlage mich mit den X-Y-Z-Werten des Lagessensors rum.

    mit ACX = obj.getX(); bekomme ich einen 16Bit-Wert (anscheinend vorzeichenbehaftet)

    obj.getCalculatedX(); liefert normalerweise positive und negative Werte als Float, wenn man das als Serial.print(..) ausgibt.

    bei ACX = (uint16_t)obj.getCalculatedX(); bekomme ich aber nur "0"-Werte
    bei ACX = obj.getCalculatedX(); ebenfalls

    ACX ist dabei uint16_t

    Diese Sensorwerte wollte ich einfach einlesen und speichern. Na ja ...

    Wobei die Methode getCalculatedX() mit float als Rückgabewert deklariert ist.
    Verstehe noch nicht, warum da nur Nullen bei rum kommen.

    Jetzt hab ich es: ich bekomme nur Nullen als Nicht-float, weil die Werte so klein sind. 0 bis +1.
    Geändert von Moppi (20.05.2019 um 11:46 Uhr)

  5. #5
    HaWe
    Gast
    Daten lesen in den Speicher und zugreifen mit 8Bit, 16Bit oder 32Bit - egal, weil Speicher ist Speicher.
    So nun dachte ich, Daten einlesen in einem Rutsch, und zugreifen mit:
    Zwar gibt es das Credo bei C:
    "alles ist ein file!",
    das ist bei MCUs aber nicht so einfach, weil du bei Arduino aus einer "Stream class"-enherited "File class" liest (oder schreibst),
    jedoch gibt es per Arduino GCC oder avrgcc ja überhaupt kein file System, weder für SD cards noch für sonst irgendwas!


    C bietet für FILE* aber auch nur Dinge wie fread() für byte-Blöcke oder (f)scanf() für formatierte Daten,

    Arduino Stream allerdings kennt auch Stream.parseInt()
    https://www.arduino.cc/reference/en/...treamparseint/

    - das wäre vlt auch eine Möglichkeit, allerdings wird das auch nicht viel anderes tun als 2 Bytes lesen, das 1. dann shiften und das 2. dann dazuaddieren (kann man auch in eine eigene Funktion packen)

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von HaWe Beitrag anzeigen
    Zwar gibt es das Credo bei C:
    "alles ist ein file!"
    Das ist so nicht richtig. Das gilt für Unix, oder vergleichbare Systeme. Und die Sprache ist dabei nebensächlich. Richtig heißt es "Für Unix ist alles ein File"

    das ist bei MCUs aber nicht so einfach, weil du bei Arduino aus einer "Stream class"-enherited "File class" liest (oder schreibst), jedoch gibt es per Arduino GCC oder avrgcc ja überhaupt kein file System, weder für SD cards noch für sonst irgendwas!
    Und auch das hat mit C oder dem benutzten Compiler nichts zu tun. Es fehlt dem Arduino-System ein Betriebssystem, ein Kernel, der ein Filesystem zur Verfügung stellt. Die libc stellt nur ein C-kompatibles Interface für die Systemcalls in den Kernel zur Verfügung.

    C bietet für FILE* aber auch nur Dinge wie fread() für byte-Blöcke oder (f)scanf() für formatierte Daten,
    C bietet genau das an, für was jemand eine Funktion geschrieben hat. C selbst kann nichts, außer vorhandene Funktionen aufrufen. Wenn die Arduino-Erfinder Files hätten haben wollen, hätten sie nur die passenden Funktionen schreiben müssen. Am besten (aber nicht notwendigerweise) kompatibel zur Standardlibrary von C.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  7. #7
    HaWe
    Gast
    Zitat Zitat von Klebwax Beitrag anzeigen
    Das ist so nicht richtig. Das gilt für Unix, oder vergleichbare Systeme. Und die Sprache ist dabei nebensächlich. Richtig heißt es "Für Unix ist alles ein File"

    Und auch das hat mit C oder dem benutzten Compiler nichts zu tun. Es fehlt dem Arduino-System ein Betriebssystem, ein Kernel, der ein Filesystem zur Verfügung stellt. Die libc stellt nur ein C-kompatibles Interface für die Systemcalls in den Kernel zur Verfügung.

    C bietet genau das an, für was jemand eine Funktion geschrieben hat. C selbst kann nichts, außer vorhandene Funktionen aufrufen. Wenn die Arduino-Erfinder Files hätten haben wollen, hätten sie nur die passenden Funktionen schreiben müssen. Am besten (aber nicht notwendigerweise) kompatibel zur Standardlibrary von C.

    MfG Klebwax
    Mit Unix vs. "nacktem" C hast du Recht, stimmt (und C wurde ja zum programmieren von Unix überhaupt erst entwickelt), aber für C gibt es die stdio.h, die genau die file- (FILE*) Funktionen zur Verfügung stellt (egal ob Unix oder x86), die es bei Arduino nicht gibt, obwohl sie auch "File" heißen.
    Moppi bemängelte ja, dass es bei x86 asm so viel "logischer" wäre, aber auch hier bezog er sich auf x86, im Gegensatz zu C(++).
    mich quält mal wieder C++
    ...
    das war das schöne an x86 Assembler
    In C aber gibt es ja gewisse Funktionen, die logisch wären, wie z.B. die printf/scanf-Familie, für stdin/out und files, und hier ist tatsächlich quasi "alles" ein File
    Worauf ich hinaus wollte:
    obwohl es das grundsätzlich für C gibt und dort auch logisch und im gewissen Rahmen verfügbar ist:
    das gibt es eben nicht für Arduino, aber das ist keine Schuld von C++, womit moppi haderte, sondern es liegt am fehlenden File system mit den entsprechenden Libs.
    Und hier sind wir uns ja auch einig.

Ähnliche Themen

  1. Wechsel von BASCOM zu GCC/Grundsatzfragen zu GCC
    Von stekohl im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 10.12.2008, 23:13
  2. Grundsatzfragen zum LCD
    Von Goblin im Forum Elektronik
    Antworten: 12
    Letzter Beitrag: 02.02.2006, 21:16
  3. Probleme mit Counter ! Grundsatzfragen
    Von Roberto im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 15.01.2006, 23:38

Berechtigungen

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

12V Akku bauen