PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit SerWrite



SRT
16.03.2008, 12:01
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);

Ceos
16.03.2008, 15:48
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);

SRT
16.03.2008, 19:36
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

liggi
17.03.2008, 09:11
du musst den wert erst in zeichen umwandeln etwa so:


char w[10];
int a;

//a messen...

itoa(a, w, 10);

SerWrite(w,10);

SRT
17.03.2008, 09:53
da tut sich nur ein kleines Problem auf: Die Funktion itoa() gibt es scheinbar nicht


test.c:18: warning: implicit declaration of function `itoa'

liggi
17.03.2008, 10:07
du must noch folgendes include reinschreiben:


#include <stdlib.h>


mfg liggi

SRT
17.03.2008, 15:20
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);
}
}}

Ceos
17.03.2008, 16:54
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

liggi
17.03.2008, 17:11
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

Ceos
17.03.2008, 17:24
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!

Ceos
20.03.2008, 21:11
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?

Ceos
20.03.2008, 21:50
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);

Ceos
21.03.2008, 01:57
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