Forum: Compiler & IDEs Verständnisproblem


von eddi (Gast)


Lesenswert?

Hallo Leute

Ich komme irgendwie mit den Pointern noch nicht ganz klar.
Offensichtlich habe ich da noch immer ein Verständnisproblem.

Ausgangsbasis ist dass sich zwei atmega328 über spi kommunizieren sollen 
- was auch funktioniert. Nur möchte ich die oben im Code auskommentierte 
Stelle in eine Funktion packen.

was aber immer zur selben Fehlermeldung "invalid conversion from 'char' 
to 'char*'  führt.

Die auskommentierte Stelle funktoniert einwandfrei nur habe ich ein 
Problem in der übergabe an die Funktion.
1
#include <SPI.h>
2
3
void setup (void)
4
{
5
  digitalWrite(SS, HIGH);
6
  SPI.begin ();
7
  SPI.setClockDivider(SPI_CLOCK_DIV8);
8
}
9
10
void loop (void)
11
{
12
  /*char c;
13
  
14
  digitalWrite(SS, LOW);    // SS is pin 10
15
  for (const char * p = "Das ist ein Test!\n" ; c = *p; p++) {
16
    SPI.transfer (c);
17
  }
18
  digitalWrite(SS, HIGH);
19
20
*/
21
22
  delay (1000);
23
  Send_SPI("B200");
24
25
}
26
27
void Send_SPI(char *wert)
28
{   char  z,c;
29
   digitalWrite(SS, LOW); 
30
    for (char * p = *wert ; c = *wert; wert++) 
31
    {
32
    SPI.transfer (c);
33
    }
34
   
35
  digitalWrite(SS, HIGH);
36
}
bitte um Hilfe ich hänge hier offensichtlich in einer Sackgasse.

Danke lg eddi

: Verschoben durch User
von Tirbun (Gast)


Lesenswert?

1
char * p = *wert 
2
Zeiger   = Inhalt
------------------
1
char * p = wert
2
Zeiger     Zeiger

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

eddi schrieb:
> for (const char * p = "Das ist ein Test!\n" ; c = *p; p++) {

ja, eben!

Fange endlich mal an, wenigstens EINIGERMASSEN sauber zu schreiben.
Trenne die Dinge!!!
Also Meldetext, Pointerdeklaration und Schleifen-Gestaltung in 
getrennten Anweisungen. Also ungefähr so:

const char Meldetext[] = { "Das ist ein Test" };
void loop (void)
{ const char* P;  // <-- const und so bei ATmegas, siehe unten

  P = Meldetext;
  while (*P) SPI.transfer(*P++);
}

(wegen const und so: Die Atmels unterscheiden Zeiger auf konstante Dinge 
und nicht konstante Dinge. Das hängt mit der Architektur zusammen und 
hat mich damals sehr geärgert, weil es allweil Späne macht. Ein const 
muß also rein, man kann das auch nicht casten, hab momentan bloß 
vergessen, an welche Position das const kommt...)

Und schreibe bei mehrzeiligen Blöcken die öffnende Klammer in die 
gleiche Spalte wie die schließende, damit man die Blöcke erkennen kann, 
ohne sich in deinem Spaghetticode zu verirren.


W.S.

von eddi (Gast)


Lesenswert?

Danke für die Hilfe

jetzt funzt es....

lg eddi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.