Forum: Mikrocontroller und Digitale Elektronik Fehler "Conflicting Types for 'SendChar'"


von Maximilian H. (maximilian_h88)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe das Problem, dass ich eine eigentlich einfache Funktion 
schreiben möchte, die nichts anderes tut, als auf einem übergebenen 
USART port ein übergebenes Byte zu schreiben und bevor er in das 
register schreibt soll er noch schauen, dass das register auch leer ist.
eigentlich bin ich davon ausgeganen, dass das ein schreibaufwand von ca 
30sec ist bis ich eine funktionierende Funktion hab, die ich dann in 
meinem Maincode verwenden kann....leider wurde es nix mit den 30 sec, 
sondern mehr 3 stunden.

so und jetzt zum eigentlichen Problem, ich bekomme den Fehler 
"conflicting types for 'SendChar'" anezeigt.

Der Fehler wie er im Build Output steht:
compiling USARTFunctions.c...
..\STM32_Library\USARTFunctions.c(47): error:  #147-D: declaration is 
incompatible with "void SendChar(USART_TypeDef *, char)" (declared at 
line 18 of "..\STM32_Library\USARTFunctions.h")
  void SendChar (USART_TypeDef* USARTx, uint16_t Data)
..\STM32_Library\USARTFunctions.c: 0 warnings, 1 error

Vielen Dank für eure Hilfe schon mal im Vorraus

von Peter II (Gast)


Lesenswert?

uint16_t Data

also ist Data 16bit Groß und nun willst du es in
1
void SendChar (USART_TypeDef* USARTx, char Data);

also char(8bit) senden, wie soll das gehen?

von Maximilian H. (maximilian_h88)


Lesenswert?

oh.. Danke
mein Fehler....ich hab die unterfunktion, die ich aufruf, aus der Keil 
lib entnommen und war einfach Blind..
sorry :D

von Maximilian H. (maximilian_h88)


Angehängte Dateien:

Lesenswert?

ich denke ich benötige nochmals eure hilfe...

diesmal geht es (wahrscheinlich auch wieder um idiotenfehler :D) meine 
Funktion, um einen string zu senden:
1
void SendString (USART_TypeDef* USARTx, char s[])
2
{
3
  int i = 0;
4
  
5
  while(s[i] != '\0')
6
  {
7
    SendChar(USARTx, s[i]);
8
    i++;
9
  }
10
}
das ist meine Funktion und ich möchte das hier anstellen:
1
string[] = "WARNUNG: ungueltige Adresse";
2
SendString(USART3, string[]);

Mein Problem:
ich bekomme die eckige Klammer zu nach string markiert mit der Meldung 
"expected expression".
Zudem wird meine Funktion SendString bemängelt, dass diese nicht 
deklariert wäre.
in meinem Headerfile steht aber jetzt zusätzlich zu dem was oben in der 
Angehängten Datei zu lesen ist noch:
1
void SendString(USART_TypeDef* USARTx, char string[]);

Danke für eure Hilfe

Nachtrag:
ich hab die c und h datei noch angehängt

von Peter II (Gast)


Lesenswert?

Maximilian H. schrieb:
> SendString(USART3, string[]);

ist ja auch Unsinn.
1
SendString(USART3, string);

(und man sollte ein string nicht stirng nennen!)


das sollte auch besser sein:
1
void SendString (USART_TypeDef* USARTx, const char s*)
2
{
3
  while(*s )
4
  {
5
    SendChar(USARTx, *s);
6
    s++;
7
  }
8
}

von Karl H. (kbuchegg)


Lesenswert?

Maximilian H. schrieb:

> das ist meine Funktion und ich möchte das hier anstellen:
>
1
string[] = "WARNUNG: ungueltige Adresse";
2
> SendString(USART3, string[]);
3
>
1
 char string[] = "WARNUNG: ungueltige Adresse";
2
 SendString(USART3, string);

> Zudem wird meine Funktion SendString bemängelt, dass diese nicht
> deklariert wäre.
> in meinem Headerfile steht aber jetzt zusätzlich zu dem was oben in der
> Angehängten Datei zu lesen ist noch:
>
1
void SendString(USART_TypeDef* USARTx, char string[]);

Wenn der Compiler anmäkelt, dass er keine Deklaration für die Funktion 
vor der Verwendung der Funktion gesehen hat, dann hat er auch keine 
gesehen.
Hast du dich vielleicht mit ein paar #ifdef selbst ausgetrickst?

Edit: In deinem Header File kann ich aber keinen Protoypen für 
SendString sehen.
Beschreib nicht, wie du dein Header File modifiziert hast, zeig es 
nachdem du es modifiziert hast!

von Maximilian H. (maximilian_h88)


Lesenswert?

also ich hab das jetzt mit dem string geändtert und ich hab auch die 
Fehlermeldung, bei meiner SendString funktion beide weg 
jetzt...allerdings verlangt der von mir an der Stelle
1
string[] = "WARNUNG: ungueltige Adresse";
 immer noch eine 'expression'
also er markiert da immer noch die zweite eckige klammer und wenn ich da 
die klammern weg lass, dann meckert er, dass er den array nich erreichen 
kann

von Karl H. (kbuchegg)


Lesenswert?

Maximilian H. schrieb:
> also ich hab das jetzt mit dem string geändtert und ich hab auch die
> Fehlermeldung, bei meiner SendString funktion beide weg
> jetzt...allerdings verlangt der von mir an der Stelle
>
1
string[] = "WARNUNG: ungueltige Adresse";
 immer noch eine
> 'expression'


1
   char string[] = "WARNUNG: ungueltige Adresse";
2
// ****


Wie du bei deinen Kenntnissen auf die Idee kommst, das wäre eine Sache 
auf 30 Sekunden, ist mir ehrlich rätselhaft.

1
       string
Die Variable heisst string
1
       string[]
sie ist ein Array ....
1
   char string[]
... ein Array von Charactern (also einzelnen Zeichen)
1
   char string[] = "Hallo";
und dieses Array wird so gross gemacht, dass der Text "String" samt 
abschliessender \0 Terminierung Zeichen für Zeichen da rein passt und 
wird zur Laufzeit mit diesem Text initialisiert.


Kauf dir ein C-Buch!
Ehrlich und ernsthaft!

von Maximilian H. (maximilian_h88)


Angehängte Dateien:

Lesenswert?

mein aktuelles headerfile ist hier
diesmal ist es auch das richtige :D

von Maximilian H. (maximilian_h88)


Lesenswert?

so weit war ich auch schon, dass ich eigentlich versteh wie ein Array 
funktioniert...ich peil nur nich, warum der mir sagt 'expected 
expression' und mir die klammer zu markiert
und deklariert habe ich meinen array global.

Darum frage ich mich warum der nochmal gerne erzählt bekommen möchte, 
als was der Array gespeichert werden soll

von Peter II (Gast)


Lesenswert?

Maximilian H. schrieb:
> und deklariert habe ich meinen array global

dann kann man aber nichts mehr zuweisen.

von Karl H. (kbuchegg)


Lesenswert?

Maximilian H. schrieb:
> so weit war ich auch schon, dass ich eigentlich versteh wie ein Array
> funktioniert...ich peil nur nich, warum der mir sagt 'expected
> expression' und mir die klammer zu markiert

WEil man bei der Definition einer Variablen immer noch den Datentyp 
angeben muss!
1
int main()
2
{
3
  int i;
4
  int j;
5
  char test[16];
6
  double k;
7
8
   ^
9
   |
10
   |
11
12
  Datentyp!

> und deklariert habe ich meinen array global

Ok. Dann fehlen dir immer noch grundlegende Kentnisse! Einem Array 
kannst du nicht als ganzes was zuweisen!
1
#include <string.h>
2
3
char test[30];
4
5
int main()
6
{
7
  strcpy( test, "Hallo" );
8
}
(stell sicher, dass das Array gross genug ist, das der Text da auch rein 
passt! Auf die abschliessende Terminierung nicht vergessen. Der Text 
"Hallo" benötigt eine Array Mindestgröße von 6!)


DIe Sache mit dem C Buch steht noch immer. Das sind banale Grundlagen!

Allerdings:
Warum so kompliziert mit einer Zwischenvariablen
1
 ....
2
3
  SendString( "Hallo World" );
4
...
und gut ists.

von Maximilian H. (maximilian_h88)


Lesenswert?

ich werds mir zu herzen nehmen und ein C buch kaufen :D

von Karl H. (kbuchegg)


Lesenswert?

Maximilian H. schrieb:
> ich werds mir zu herzen nehmen und ein C buch kaufen :D

Wird gut sein.
Du scheiterst gerade an dem Wissen, das auf Seite 20 eines 200 Seiten 
starken Buches vermittelt wird.

von Karl H. (kbuchegg)


Lesenswert?


von Maximilian H. (maximilian_h88)


Lesenswert?

so wie ich mich kenn wird wahscheinlich wissen von Seite 190 mir bekannt 
vorkommen :D

von Karl H. (kbuchegg)


Lesenswert?

Maximilian H. schrieb:
> so wie ich mich kenn wird wahscheinlich wissen von Seite 190 mir bekannt
> vorkommen :D

Das kann ich mir nicht wirklich vorstellen.
Denn ab etwa der Hälfte des Buches geht es in Dateihandling und 
dynamische Datenstrukturen. Und ohne die sichere Beherrschung von Arrays 
und ganz speziell Strings ist da bereits Schluss noch ehe es angefangen 
hat.

von Maximilian H. (maximilian_h88)


Lesenswert?

Karl Heinz schrieb:
> Das kann ich mir nicht wirklich vorstellen.

Naja...ich bin ins kalte Wasser geschmissen worden (ich programmier das 
im/fürs Geschäft) und hab dazu alles Was der Person die gemeint hat 
"Hier, mach!!" gerade eingefallen ist um die ohren gehauen bekommen :D

von Karl H. (kbuchegg)


Lesenswert?

Maximilian H. schrieb:
> Karl Heinz schrieb:
>> Das kann ich mir nicht wirklich vorstellen.
>
> Naja...ich bin ins kalte Wasser geschmissen worden (ich programmier das
> im/fürs Geschäft)

Autsch!
Im Moment ist alles was man dazu sagen kann: Das kann nur schief gehen.

Warum glauben eigentlich immer alle, programmieren lernt man an 2 
Nachmittagen. Die Profis wissen genau, dass es bis zum ersten 
industrieller Einsatz eines Neulings gut und gerne mindestens ein 
dreiviertel bis ein ganzes Jahr dauert, bis er all das beherrscht was er 
im Minimum können muss, ohne dass man dauernd nacharbeiten muss.
Sorry, aber so ist das nun mal. Du versuchst dich ja auch nicht an einer 
Lebertransplantation, wenn du gerade mal ein Pflaster unfallfrei 
aufkleben kannst.

von Maximilian H. (maximilian_h88)


Lesenswert?

Bis jetzt gehts...google hat viel geholfen und das Forum auch...ich hab 
einen benutzerfreundlichen Datenlogger basteln müssen und der loggt, des 
ist jetzt nur noch Benutzerdialog und Code aufräumen

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.