Forum: Mikrocontroller und Digitale Elektronik Hilfestellung zu C-Code für Mikrocontroller


von Müller (Gast)


Lesenswert?

Guten Morgen, ich hab für einen Mikrocontroller folgenden Code 
programmiert. Wenn ich im Hauptprogramm die Funktion so aufrufe
read_port("98"), dann soll auch die if-Bedingung erfüllt werden. Dies 
tut aber nicht. Was könnte ich falsch gemacht haben?
1
unsigned char read_port(char *portname)
2
{
3
  if(portname == "P98")
4
  {
5
  
6
    PMC9 = PMC9 | 0x0100;
7
    PM9  = PM9 | 0x0100;
8
  }
9
  
10
  return P9;
11
}

von Justus S. (jussa)


Lesenswert?

mal abgesehen von allem anderen: "P98" ist nicht "98"...

von Marcel V. (antis)


Lesenswert?

Wahrscheinlich ist read_port("98") falsch und es muss heißen 
read_port("P98")

von Hc Z. (mizch)


Lesenswert?

if(portname == "P98")

das vergleicht zwei Adressen, nicht den Inhalt.  Du kannst Strings nicht 
so vergleichen.

if (!strcmp(portname, "P98"))

von V.H. (Gast)


Lesenswert?

portname kann niemals "P98" sein, wenn du die Funktion mit 
read_port("98") aufrufen tust.

von Müller (Gast)


Lesenswert?

1
unsigned char read_port(char *portname)
2
{
3
  if(portname == 'P98')
4
  {
5
  
6
    PMC9 = PMC9 | 0x0100;
7
    PM9  = PM9 | 0x0100;
8
  }
9
  
10
  return P9;
11
}
12
13
void main (void)
14
{
15
...
16
read_port('98')
17
...
18
}

Funktioniert aich nicht.

von Timmo H. (masterfx)


Lesenswert?

>Funktioniert aich nicht.
Sind jetzt ja auch Strings in chars. In Hochkommas darf nur ein Zeichen, 
Zeichenketten kommen in ".

strings müssen mit strcmp verglichen werden. Einfach "==" geht nicht.

also in main
1
int main(){
2
  read_port("P98");
3
  while(1);
4
}
und in der Funktion
1
unsigned char read_port(char *portname)
2
{
3
  if(!strcmp(portname,"P98"))
4
  {
5
  
6
    PMC9 = PMC9 | 0x0100;
7
    PM9  = PM9 | 0x0100;
8
  }
9
  
10
  return P9;
11
}

von Karl H. (kbuchegg)


Lesenswert?

AUch wenn ich nicht glaube, dass du da eigentlich mit Strings arbeiten 
willst:

http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F

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.