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
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
voidSendString(USART_TypeDef*USARTx,chars[])
2
{
3
inti=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:
> 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:>
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!
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
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
charstring[]="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
charstring[]
... ein Array von Charactern (also einzelnen Zeichen)
1
charstring[]="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!
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
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
intmain()
2
{
3
inti;
4
intj;
5
chartest[16];
6
doublek;
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
chartest[30];
4
5
intmain()
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
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.
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.
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
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.
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