Forum: Mikrocontroller und Digitale Elektronik Code Composer Studio Fehler: assignment makes integer from.


von Twinsetter (Gast)


Lesenswert?

Hallo zusammen!

Ich habe für einen MSP430F5529 eine Routine für den 1-Wire-Bus von 
Dallas geschrieben. Das Ganze habe ich in der Energia IDE gemacht und es 
funktioniert auch.

Jetzt habe ich den Code in das Code Composer Studio Ver.6.1 von TI 
importiert. Als Compiler habe ich den GNU GCC v4.6.3 ausgewählt. Nach 
einigen Klimmzügen habe ich den Code auch kompiliert bekommen und er 
läuft auch. Im 2. Schritt wollte ich den Code in sinnvolle Module, d.h. 
mehrere C-Dateien. Das hat nach einigem Hin und Her auch geklappt, 
allerdings bringt der Compiler immer an dieser Stelle
1
if ( int(ow_rom[i]) <= 9 ) ID+="0";  //ist Bytewert kleiner 10 ==> 0 davor

diesen Fehler :
  assignment makes integer from pointer without a cast [enabled by 
default]
  expected expression before 'int'

Das Array ist wie folgt deklariert:
1
unsigned char ow_rom[8]

Was mache ich an dieser Stelle falsch. Ich verstehe es einfach nicht 
(komme eher aus der Pascal Ecke). Kann ich das int an dieser Stelle weg 
lassen? Wenn ich das in der Energia IDE mache kommt Schrott raus.

Bin für jede Hilfe dankbar.

von Max H. (hartl192)


Lesenswert?

Wenn du den ASCII Code für 0 addieren willst, versuch's mal so:
1
ID += '0';

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

Wie ist denn ID deklariert? "assignment makes ..." bezieht sich darauf.

von mfro (Gast)


Lesenswert?

Twinsetter schrieb:

1
if ( int(ow_rom[i]) <= 9 ) ID+="0";  //ist Bytewert kleiner 10 ==> 0

> Was mache ich an dieser Stelle falsch. Ich verstehe es einfach nicht

Du verwendest einen C++ cast in einem C-Programm.
1
if ( (int) (ow_rom[i]) <= 9 ) ID+="0";  //ist Bytewert kleiner 10 ==> 0


So müsste es gehen.

von Twinsetter (Gast)


Lesenswert?

ID ist als String deklariert

von Max H. (hartl192)


Lesenswert?

Das "int" in der if würde ich auch weglassen. Wenn das ein Cast sein 
soll:
1. Ein C-Cast würde so aussehen:
1
(int)ow_rom[i]
2. Ein Cast ist hier nicht notwendig.

von Peter II (Gast)


Lesenswert?

wozu dieser cast?
1
int(ow_rom[i])

so sollte es reichen
1
if ( ow_rom[i] <= 9 ) ID+='0';  //ist Bytewert kleiner 10 ==> 0 davor

von Max H. (hartl192)


Lesenswert?

Das ID+="0" und int(ow_rom[i]) sieht nach C++ aus, hast du auch einen 
C++ Compiler?


BTW: Eine "0" ein eine String anhängen get in C so:
1
strcat(ID, "0");

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Max H. schrieb:
> Das ID+="0" und int(ow_rom[i]) sieht nach C++ aus, hast du auch einen
> C++ Compiler?

wenn ID ein String ist, würde die "0" hinten dran kommen - macht aber 
noch weniger sinn.

von Twinsetter (Gast)


Lesenswert?

@mfro
Dein Tip war der Richtige ! Jetzt ist nur eine Warning da. Aber damit 
kann ich für's erste leben

Bei der Gelegenheit habe ich aus der ID Variable auch gleich noch ein 
Zeichenarray gemacht ist ja wohl dann auch C-like.

Danke an alle die so schnell geantwortet haben.

Der C-Kram raubt mir noch den Verstand

von Max H. (hartl192)


Lesenswert?

Twinsetter schrieb:
> Der C-Kram raubt mir noch den Verstand
Dann bleib bei C++ oder lerne damit umzugehen...

von Markus (Gast)


Lesenswert?

Twinsetter schrieb:
> ID ist als String deklariert
Den Typ String gibt es in C nicht.

String muss ein int sein, da
1
   int i = 0;
2
3
   i += "0";
denselben Fehler produziert.

von Markus (Gast)


Lesenswert?

Twinsetter schrieb:
> Bei der Gelegenheit habe ich aus der ID Variable auch gleich noch ein
> Zeichenarray gemacht ist ja wohl dann auch C-like.

Aber dann hoffentlich nicht weiterhin mit
1
ID+="0"

von Twinsetter (Gast)


Lesenswert?

@Peter II
@Max H

Leider funktionieren in der Energia IDE nicht alle C Befehle. Speziell 
bei der Stringverarbeitung geht da nicht alles.

Mit der NULL am Ende macht schon Sinn, weil danach wird der HEX 
formatierte Wert von ow_rom[i] + 1 Leerzeichen angehangen.
1
ID += String(int(ow_rom[i]), HEX)+ " ";  //ID String bilden

Am Ende kommt dann so etwas raus : 01 a7 ff .....
Das habe ich schon mit der Energia IDE ausprobiert und das läuft auch. 
Der Code ist vielleicht nicht der Weisheit letzter Schluß aber er ist 
übersichtlich und ich weiß auch nach einem Jahr was ich gemacht habe.

Ich empfinde C schon etwas nervig. Soweit mir bekannt ist, ist ja C++ 
eine Weiterentwicklung von C mit eingebauter Objektorientierung und C# 
hat Ganze noch ein bischen aufgebläht. Dann sollte C++ eigentlich C ja 
vollständig unterstützen ist aber leider nicht so. Man macht wieder was 
Neues und als ob das nicht genug wäre ist auch jeder Compiler noch ein 
klein wenig anders - sonst wär's ja zu einfach. Aber wie gesagt ich 
komme aus der Pascalecke und da läuft es halt ein bissl anders.

Danke noch mal für die Unterstützung, hat mir auf alle Fälle weiter 
geholfen und dümmer bich auch nicht geworden.

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.