mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uint8_t* konvertieren


Autor: Patrick Schaffler (schaff91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Experten,

Wie kann ich ein uint8_t* in ein double umwandeln.

Danke schon im Vorraus,

mfg Patrick

Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Codeschnipsel:

uint8_t x_uint;
uint8_t * p_x_uint = & x_uint;

double x_double = (double) p_x_uint;


Viel Erfolg
Bernhard

Autor: Lord Ziu (lordziu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch casting. (Ohne jetzt deinen Controller  Umgebung  
Programmiersprache zu kennen)
double val = (double)(*u_val);

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick Schaffler schrieb:

> Wie kann ich ein uint8_t* in ein double umwandeln.

Wenn du die Frage nicht richtig (oder wenigstens ausfuehrlich) 
formulierst, wirst du nur falsche Antworten bekommen.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick Schaffler schrieb:
> Hallo Experten,
>
> Wie kann ich ein uint8_t* in ein double umwandeln.

Ich kann mir beim besten Willen nicht vorstellen, dass du einen 
Pointerwert in einen double umwandeln willst.

Ich könnte mir aber vorstellen, dass du
* einen String hast, das in einem uint8_t Array abgelegt ist und du
  den double benötigst, der dieser Text-Repräsentierung entspricht

  Also:  "123.4"  -> 123.4

  strtod ist hier dein Freund

* tatsächlich einen Wert ausgerechnet hast, der jetzt in einem uint8_t
  steht, du einen Pointer darauf hast, und du jetzt diesen Wert als
  double benötigst.

  uint8_t  x = 256 / 3;
  uint8_t* p_x = &x;

  double value = *p_x;


Also: Was ist es?

Autor: Patrick Schaffler (schaff91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Kompasssensor liefert mir über den I2C-Bus einen Wert (uint8_t*)
zurück. Damit ich diesen Wert weiterverarbeiten kann muss ich ihn jedoch
umwandeln. Der Quellcode des Programmes ist in C++ geschrieben.

Ich habe nur recht wenig ahnung in diesem Themengebiet und bitte euch 
daher mir genaue Angaben und eine genaue Erklärung zu geben.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick Schaffler schrieb:
> liefert mir über den I2C-Bus einen Wert (uint8_t*)

über ein bus kann bestimmt kein Zeiger ankommen. Zeig uns doch mal den 
Quellcode von der STelle an der du die Daten von dem I2C Bus bekommst.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick Schaffler schrieb:
> Mein Kompasssensor liefert mir über den I2C-Bus einen Wert (uint8_t*)
> zurück.

Dein Kompassensor liefert alles mögliche. Aber mit Sicherheit keinen 
uint8_t*

Du magst vielleicht im Datenblatt des Sensors eine Funktion gesehen 
haben, die die Kommunikation mit dem Sonsor abwickelt. Und diese 
Funktion hat einen uint8_t* als Parameter.
Das bedeutet dann in diesem Zusammenhang, dass du einen uint8_t (ohne 
den *) bereitstellen musst, und diese Adresse dieses uint8_t der 
Funktion übergeben musst, damit diese den ausgelesenen Wert dort 
hineinschreiben kann.
Normaler C/C++ Übergabemechanismus: Call per 'Referenz', indem ein 
Pointer auf die Zielvariable übergeben wird. (Nicht zu verwechseln mit 
C++ Referenzen)

Das kann so sein. Muss aber nicht.

Beende endlich das Rätselraten und zeig deinen Code.

Autor: Patrick Schaffler (schaff91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Über dem I2C-Bus wird folgendens gesendet:

  void send(uint8_t address, uint8_t data);
  void send(uint8_t address, uint8_t* data, int length);
  void get(uint8_t address, uint8_t* data, int length);

Ich brauche den Wert welcher in data steht. Und dieser ist vom Typ 
uint8_t*.
Oder bin ich falsch informiert?

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich brauche den Wert welcher in data steht. Und dieser ist vom Typ
>uint8_t*.

Dir fehlen C-Grundlagen.

Autor: Patrick Schaffler (schaff91)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Quellcode:

#include "qfixSoccerBoard.h"
#include "qfixI2C.h"

SoccerBoard board;
I2C I2C;

int main()
{
  double richtung;
        uint8_t* data;
  i2c.send(192, 1);    //192-Kompassadresse, 1-Register
  i2c.get(192, data, 1);          //Auslesen unter "data"


  richtung = data/0.70833;  //zur weiterverarbeitung nötig
}


Im Anhang befindet sich noch die Headerdatei des I2C_Busses.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt bitte noch das Datenbaltt von den Sensor, denn man kann nicht 
erkennen wie viele bytes von den Sensor gesenet werden. Welchen wert 
setzt du denn bei length ein?

Autor: Patrick Schaffler (schaff91)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Datenblatt

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick Schaffler schrieb:
> Über dem I2C-Bus wird folgendens gesendet:
>
>   void send(uint8_t address, uint8_t data);
>   void send(uint8_t address, uint8_t* data, int length);
>   void get(uint8_t address, uint8_t* data, int length);
>
> Ich brauche den Wert welcher in data steht. Und dieser ist vom Typ
> uint8_t*.
> Oder bin ich falsch informiert?

Du bist falsch informiert.

Die Benutzung ist so gedacht
int main()
{
  uint8_t  data[40];


  get( 192, data, sizeof(data) );
}

Ganz normaler C Übergabemechanismus im Falle von Arrays. Ob die 40 
ausreichen oder nicht, kann man so nicht sagen. Das musst du dir aus dem 
Datenblatt raussuchen, wieviele Bytes der Sensor wirklich sendet.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nach lesen des Datenblattes würde ich sagen das es so gehen müsste

int main()
{
  double richtung;
  uint8_t data;
  i2c.send(192, 1);    //192-Kompassadresse, 1-Register
  i2c.get(192, &data, 1);          //Auslesen unter "data"


  richtung = (double)data/0.70833;  //zur weiterverarbeitung nötig
}



Die nächste Frage ist ob du wirklich glücklich mit dem Double wirst.

Autor: Patrick Schaffler (schaff91)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> int main()
> {
>   double richtung;
>   uint8_t data;
>   i2c.send(192, 1);    //192-Kompassadresse, 1-Register
>   i2c.get(192, &data, 1);          //Auslesen unter "data"
>
>
>   richtung = (double)data/0.70833;  //zur weiterverarbeitung nötig
> }

Danke Peter!
Wenn ich das Programm so ausführe funktioniert es.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.