Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit SerWrite
Hab n kleines Problem mit SerWrite
Hier ein kleiner Ausschnitt
w=(char)a;
SerWrite(w,10);
und dann kommt:
test.c:21: warning: passing arg 1 of `SerWrite' makes pointer from integer without a cast
und er kann des dann auch nicht schreiben. Hat wer ne Ahnung, wie ich des hinkrieg?
damaltor
16.03.2008, 14:50
probier mal
SerWrite("abcde",5);
SRT noch was
w muss als char oder unsigned char deklariert sein
alternativ als array
char w[1];
der ausdruck
w = (char)a; wirkt so nicht ... um das ascii zeichen a zu erhalten musst du 'a' schreiben. (shift+"#" fürs einfache hochkomma)
und serwrite erwartet einen pointer auf ein char array ... wenn du nur eine variable hast musst du ihre adresse übergeben, also
serwrite(&a,1); & löst hier die adresse der varuiable a auf
bei einem array ist der bezeichner OHNE eckige klammer schon ein pointer auf den anfang also
char WA[1]; // bei der deklaration gibt die ziffer die anzahl der felder im array an
WA[0] = 'a'; // beim zugriff aufs array IMMER darauf achten das du mit dem index arbeitest und der beginnt bei 0 und hört bei (länge - 1) auf
serwrite(WA,1);
ansonsten
char w = 'a';
serwrite(&w,1);
thx für schnelle und kompetente Hilfe
\:D/ \:D/ \:D/ \:D/ \:D/ \:D/ \:D/ \:D/
Edit: zu früh gefreut :-# : wenn a ein gemessener (integer) Wert sein soll,
char w[1];
int a;
//a messen...
w[0]=a;
SerWrite(w[0],10);
Kommt der Fehler
test.c:19: warning: passing arg 1 of `SerWrite' makes pointer from integer without a cast
du musst den wert erst in zeichen umwandeln etwa so:
char w[10];
int a;
//a messen...
itoa(a, w, 10);
SerWrite(w,10);
da tut sich nur ein kleines Problem auf: Die Funktion itoa() gibt es scheinbar nicht
test.c:18: warning: implicit declaration of function `itoa'
du must noch folgendes include reinschreiben:
#include <stdlib.h>
mfg liggi
jetzt kennt des Programm zwar itoa(), aber es kommen jetzt 2 andere fehler:
warning: passing arg 2 of `itoa' makes pointer from integer without a cast
warning: assignment makes integer from pointer without a cast
Hier das dazugehörige Programm:
#include "asuro.h"
#include "stdlib.h"
int i,a;
char w;
unsigned int taster;
int main(void){
Init();
while(1){
taster=PollSwitch();
if (taster!=0){
a=1; //wird später durch Messwert ersetzt
w=itoa(a,w,2);
SerWrite(&w,1);
}
}}
w muss ein char ARRAY sein ... strings also zeichenketten werden immer als arrays von char angelegt die auf eine NULL also binär null nicht ascii enden
mach auch char w; einfach char w[6]; maxwert von int ist 65000 das sind 5 zeichen + die abschliessende null
und im serwrite nicht vergessen das & vorn wieder wegzumachen, denn bei einem array ist der bezeichner selbst ein zeiger
und das dritte Parameter von itoa gibt nicht die Länge, sondern die Basis an, zum beispeil 10 für Dezimalsystem oder 16 für Hexsystem.
mfg liggi
ich wusste es nich genau deshalb hab ichs verschwiegen :p
Touby_van
20.03.2008, 21:06
Also hab ich das richtig verstanden wenn ich z.b einen Arrray habe hallo[4]={'t','o','b','i','\0'} und nur das o ausgeben möchte so schreib ich SerWrite (hallo,1);??
das klappt bei mir nicht, er gibt mir dann die ersten 2 zeichen dieses arrays aus!
bei SerWrite gibt der 2te parameter die länge des zu sendenden string an!!! und nicht WELCHES byte aus dem array ....
PS: dein array hat logisch eine länge von 5 nicht 4 warum definierst du es mit 4 und schreibst dann 5 chars/buchstaben rein ????
damaltor
20.03.2008, 21:27
und das mit serwrite steht auch detailliert in der anleitung...
das \0 ist auch ein zeichen, welches auf der länge des arrays unbedingt berücksichtigt werden muss.
Touby_van
20.03.2008, 21:35
und deshalb 4 weil es ja bei Array[0] beginnt
doch was kann ich tun das er mir nur das o ausgiebt??
Touby_van
20.03.2008, 21:44
ach ok sorry mein fehler stimmt es sollten 5 sein
doch meine frage ist immer noch die selbe wie kriege ich das o?
indem du die adresse des bytes im array an der 2ten stelle übergibst und behauptest das das array nur 1 byte groß ist
SerWrite(&(hallo[1]),1); // die adresse (&) von dem 2ten zeichen (index beginnt bei 0) des array hallo
ich weis sieht n bissl aus wie von hinten durch die brust ins auge, ist aber die schnellste lösung wenn du nicht mit pointer arithmetik anfangen magst
Touby_van
20.03.2008, 22:03
oder
w=hallo[1];
SerWrite (&w,1);
naja gut OK :p trotzdem ein umweg ^^
Touby_van
21.03.2008, 18:25
besser als das es gar nicht funktioniert auf jeden fals danke ich dir für den gednken anstoss nun bin ich mit meinem morse programm schon ein schönes stück weiter
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.