Ansicht:   

#156525

Mr. Teflon

11.08.2009, 18:34:03

C - Funktionsaufruf will nicht ... ??? (pc.coding)

Hallo,

würdet Ihr mir helfen?

Folgende Abarbeitung soll zur Funktion gemacht werden. So wie es ist funktioniert es.


#include \"sfr_r813.h\"                  // SpecialFunctionRegister des R8C/13
#include \"math.h\"       

#define uint  unsigned int             // Abkürzungen 
#define uchar unsigned char

uchar chan;           		// Mess-Kanal chan = 4 ... 6
long SensorMin;			// Bsp. A/D Digitwert 231 bei Temperatursensor bei 0°C
long SensorMax;			// Bsp. A/D Digitwert 386 bei Temperatursensor bei 100°C
float wert2;    
unsigned char D;

// ********** Temperaturberechnung aus A/D und Ausgabe an COM ********** \\\\

   SensorMin = 231;				// Bsp. A/D Digitwert 231 bei Temperatursensor bei 0°C
   SensorMax = 386;				// Bsp. A/D Digitwert 386 bei Temperatursensor bei 100°C
   	                     
   wert2 = (float) ad_in(4);				        // Bsp. wert2 = 609
  
   if(wert2 < 231)						// 231 Digit = 0°C
   wert2 = 231;							// Werte unter 0°C werden auf 0°C gesetzt
   
   wert2 = (wert2-SensorMin)/(SensorMax-SensorMin)*100; // Temperaturberechnung, wert2 = 243,8
   
   wert2 = wert2 / 100;						// wert2 = 2,438
   D = wert2;							// Ganzzahl D = 2
   com_txd (D + 48);						// Hunderter Stelle als Ganzzahl an COM
   
   wert2 = wert2 - D;						// 2,438 - 2 = 0,438
   wert2 = wert2 * 10;						// 0,438 * 10 = 4,38
   D = wert2;							// Ganzzahl D = 4
   com_txd (D + 48);						// Zehner Stelle als Ganzzahl an COM
   
   wert2 = wert2 - D;						// 4,38 - 4 = 0,38
   wert2 = wert2 * 10;						// 0,38 * 10 = 3,8
   D = wert2;							// Ganzzahl D = 3
   com_txd (D + 48);						// Einer Stelle als Ganzzahl an COM
   
   com_txd (0x2e);						// Dezimalpunktausgabe an COM
	
   wert2 = wert2 - D;						// 3,8 - 3 = 0,8
   wert2 = wert2 * 10;						// 0,8 * 10 = 8
   D = wert2;							// Ganzzahl D = 8
   com_txd (D + 48);						// erste Kommastelle als Ganzzahl an COM
   
   // com_txd (176);						// Zeichen ° an COM
   com_txd (\'C\');
   
   com_print(\"\\n\\r\");               		// Zeilenende
    



Wenn ich versuche dieses zur Funktion zu machen, meckert immer der Compiler an der Deklaration der Funktion. Egal ob void oder unsigned int etc. davor steht. Die A/D Kanalnummer wird beim Aufruf übergeben. chan wäre in dem Fall Kanal 4.


void com_Temperatur (uchar chan)
   {

   ...
   wert2 = (float) ad_in(chan);	
   ...

   }
	    	  
   com_Temperatur(4);
	  



Was ist falsch?
Bei anderen Funktionsaufrufen steht es auch void davor und funktioniert.
Ich verstehe es nicht.

Das hier funktioniert zum Bsp.


//*************************  Ausgabe an COM
void com_integer2 (long data)
{
   long byt;
   if ( data >= 1000000 ) {data = 999999; }
   byt   = data / 100000;
   data  = data - byt * 100000;
   com_txd(byt  + 48);
   byt   = data / 10000;
   data  = data - byt * 10000;
   com_txd(byt  + 48);
   byt   = data / 1000;
   data  = data - byt * 1000;
   com_txd(byt  + 48);
   byt   = data / 100;
   data  = data - byt * 100;
   com_txd(byt  + 48);
   byt   = data / 10;
   data  = data - byt * 10;
   com_txd(byt  + 48);
   com_txd(data + 48); 
}

com_integer2(Temperatur3);

--
___________
Tschau
Mr. Teflon

#156530

MudGuard zur Homepage von MudGuard

München,
11.08.2009, 19:24:57

@ Mr. Teflon

C - Funktionsaufruf will nicht ... ???

> Wenn ich versuche dieses zur Funktion zu machen, meckert immer der
> Compiler an der Deklaration der Funktion. Egal ob void oder unsigned int
> etc. davor steht. Die A/D Kanalnummer wird beim Aufruf übergeben. chan wäre
> in dem Fall Kanal 4.

Klasse gemacht. Es ist immer eine gute Idee, den potentiellen Helfern die genaue Fehlermeldung zu verschweigen.

> void com_Temperatur (uchar chan)

> com_Temperatur(4);

Willst Du hier die Ziffer 4 oder das Zeichen mit dem Code 4 übergeben?

--
[image]
MudGuard
O-o-ostern

#156533

Mr. Teflon

11.08.2009, 19:46:09

@ MudGuard

C - Funktionsaufruf will nicht ... ???

> > Wenn ich versuche dieses zur Funktion zu machen, meckert immer der
> > Compiler an der Deklaration der Funktion. Egal ob void oder unsigned
> int
> > etc. davor steht. Die A/D Kanalnummer wird beim Aufruf übergeben. chan
> wäre
> > in dem Fall Kanal 4.
>
> Klasse gemacht. Es ist immer eine gute Idee, den potentiellen Helfern die
> genaue Fehlermeldung zu verschweigen.
>
> > void com_Temperatur (uchar chan)
>
> > com_Temperatur(4);
>
> Willst Du hier die Ziffer 4 oder das Zeichen mit dem Code 4 übergeben?

Hallo,

Entschuldigung.  ;-)
Es soll die Ziffer 4 mit übergeben werden.

Ich weis jetzt woran es lag, die Fehlermeldung s.u. war vorhin überdeckt.
\"Sorry, compilation terminated because of these errors in main().\"
Ich habe die Funktion jetzt nach außerhalb von main {} kopiert und es funktioniert.

void com_Temperatur (uchar chan)
{
...
}

und rufe sie mit

com_Temperatur(4);

auf.

Noch eine Frage.
Was macht diese Funktion beim Aufruf?
Also was bedeutet \"uint get_volt(uchar chan)\" ?
Ich dachte eine Funktion muß immer mit void beginnen.  :kratz:
Diese beginnt jedoch mit uint (unsigned int).
Warum wurde nicht \"void get_volt(uchar chan)\" geschrieben?
Könntest Du mir das erklären?


//**********************************   rechnet Wert in Volt in String um 
uint get_volt(uchar chan) 
{
   uint wert;                          // Messwert 10 bit
   long volt;                          // Spannung in Volt

   wert = ad_in(chan);                 // messen
   volt = (long) wert;                 // A/D-Wert  
   volt = volt * 5000;                 // Skalierung 0V bis 5V  
   volt = volt / 1023;                 // und A/D Wandlerkorrektur  
   ltoa_format(buff,volt,1,3,\' \');     // Long in Zeichenkette buff umwandeln
   				       // 1 Zeichen vorm Dezimalpunkt und 3 Zeichen danach  
   return wert;                        // Messwert in int wert
}



Fehlermeldung vom Compiler:


C:\\WorkSpace\\Temperatur\\Temperatur\\Temperatur.c(571) : [Error(ccom)] syntax error at near \'unsigned\'
===>	com_Temperatur (uchar chan)
Sorry, compilation terminated because of these errors in main().
C:\\WorkSpace\\Temperatur\\Temperatur\\Temperatur.c
Phase M16C C Compiler finished

Phase M16C Assembler starting
C:\\WorkSpace\\Temperatur\\Temperatur\\ncrt0.a30
R8C/Tiny,M16C/60 Series Assembler system Version 5.11 Release 00
Copyright(C) 2004. Renesas Technology Corp.
and Renesas Solutions Corp., All Rights Reserved.
macro processing now
assembler processing now
TOTAL ERROR(S)    00000
TOTAL WARNING(S)  00000
TOTAL LINE(S)     00268   LINES
DATA     0000000(00000H)  data_SE
DATA     0000000(00000H)  bss_SE
DATA     0000000(00000H)  data_SO
DATA     0000000(00000H)  bss_SO
DATA     0000000(00000H)  data_NE
DATA     0000000(00000H)  bss_NE
DATA     0000000(00000H)  data_NO
DATA     0000000(00000H)  bss_NO
DATA     0000256(00100H)  stack
DATA     0000000(00000H)  heap
ROMDATA  0000000(00000H)  rom_NE
ROMDATA  0000000(00000H)  rom_NO
ROMDATA  0000000(00000H)  data_SEI
ROMDATA  0000000(00000H)  data_SOI
ROMDATA  0000000(00000H)  data_NEI
ROMDATA  0000000(00000H)  data_NOI
ROMDATA  0000000(00000H)  switch_table
CODE     0000000(00000H)  program
CODE     0000000(00000H)  interrupt
ROMDATA  0000256(00100H)  vector
ROMDATA  0000004(00004H)  fvector
CODE     0000149(00095H)  interrupt
( C:\\WorkSpace\\Temperatur\\Temperatur\\ncrt0.a30 )
----*----*---
Phase M16C Assembler finished

Phase M16C Linker starting
Linkage Editor (ln30) for R8C/Tiny,M16C Series Version 5.11.00.000
Copyright(C) 2004. Renesas Technology Corp.
and Renesas Solutions Corp., All Rights Reserved.
now processing pass 1
processing \"C:\\WorkSpace\\Temperatur\\Temperatur\\Release\\ncrt0.r30\"
processing \"C:\\WorkSpace\\Temperatur\\Temperatur\\Release\\Temperatur.r30\"
Error (ln30): Can\'t open file \'C:\\WorkSpace\\Temperatur\\Temperatur\\Release\\Temperatur.r30\'
Phase M16C Linker finished

Phase M16C Load Module Converter starting
Load Module Converter (lmc30) for R8C/Tiny,M16C/60 Series Version 4.01.00.000
Copyright(C) 2004. Renesas Technology Corp.
and Renesas Solutions Corp., All Rights Reserved.
Error (lmc30): Can\'t open file \'C:\\WorkSpace\\Temperatur\\Temperatur\\Release\\Temperatur.x30\'
Phase M16C Load Module Converter finished

Build Finished
3 Errors, 0 Warnings

--
___________
Tschau
Mr. Teflon

#156546

LEO_68

11.08.2009, 21:29:20

@ Mr. Teflon

C - Funktionsaufruf will nicht ... ???

Hi,

eine Funktion kann einen Rückgabewert haben und wird dann nicht mit Void am Anfang geschrieben. Bei Deinem Beispiel wird \"get_volt\" abgearbeitet und gibt dann einen Wert zurück (am Ende steht \"return wert;\" ). Diesen Rückgabewert wirst Du dann irgendwo verarbeiten. Der Rückgabewert wird bei der Funktion durch \"uint\" vor dem Funktionsnamen (get_volt) angegeben.

Prozeduren haben keinen Rückgabewert sind ansonsten aber wie Funktionen aufgebaut.

Gruß LEO


> Noch eine Frage.
> Was macht diese Funktion beim Aufruf?
> Also was bedeutet \"uint get_volt(uchar chan)\" ?
> Ich dachte eine Funktion muß immer mit void beginnen.  :kratz:
> Diese beginnt jedoch mit uint (unsigned int).
> Warum wurde nicht \"void get_volt(uchar chan)\" geschrieben?
> Könntest Du mir das erklären?
>
>


> //**********************************   rechnet Wert in Volt in String um 
> uint get_volt(uchar chan) 
> {
> uint wert;                          // Messwert 10 bit
> long volt;                          // Spannung in Volt
> 
> wert = ad_in(chan);                 // messen
> volt = (long) wert;                 // A/D-Wert  
> volt = volt * 5000;                 // Skalierung 0V bis 5V  
> volt = volt / 1023;                 // und A/D Wandlerkorrektur  
> ltoa_format(buff,volt,1,3,\' \');     // Long in Zeichenkette buff
> umwandeln
> // 1 Zeichen vorm Dezimalpunkt und 3 Zeichen danach  
> return wert;                        // Messwert in int wert
> }
> 

#156557

Mr. Teflon

11.08.2009, 22:30:05

@ LEO_68

C - Funktionsaufruf will nicht ... ???

> Hi,
>
> eine Funktion kann einen Rückgabewert haben und wird dann nicht mit Void
> am Anfang geschrieben. Bei Deinem Beispiel wird \"get_volt\" abgearbeitet und
> gibt dann einen Wert zurück (am Ende steht \"return wert;\" ). Diesen
> Rückgabewert wirst Du dann irgendwo verarbeiten. Der Rückgabewert wird bei
> der Funktion durch \"uint\" vor dem Funktionsnamen (get_volt) angegeben.
>
> Prozeduren haben keinen Rückgabewert sind ansonsten aber wie Funktionen
> aufgebaut.
>
> Gruß LEO

Hallo,

Danke für die Erklärung.

Also solange keine Rückgabewerte am Ende übergeben werden nimmt man void.
Das nennt man Prozeduren und nicht Funktionen.

Wenn Rückgabewerte übergeben werden, dann kein void aber dafür eine Datentyp Deklaration, die dann dem Rückgabewert entspricht bzw. zugewiesen wird

Habe ich das richtig verstanden? Mit eigenen Worten wegen dem Lerneffekt.  ;-)

--
___________
Tschau
Mr. Teflon

#156558

d-fens

Bonn,
11.08.2009, 22:44:11

@ Mr. Teflon

C - Funktionsaufruf will nicht ... ???

> Also solange keine Rückgabewerte am Ende übergeben werden nimmt man void.
> Das nennt man Prozeduren und nicht Funktionen.
>
> Wenn Rückgabewerte übergeben werden, dann kein void aber dafür eine
> Datentyp Deklaration, die dann dem Rückgabewert entspricht bzw. zugewiesen
> wird
>
> Habe ich das richtig verstanden? Mit eigenen Worten wegen dem Lerneffekt.
>  ;-)

Ja, bis auf den Numerus. Funktionen können nur einen einzigen Rückgabewert haben, nicht mehrere. Außerdem muss es \"des\" heißen: \"wegen des Lerneffekts\".  ;-)

So, genug Korinthen gekackt.  :-P

--
„Tu es oder tu es nicht! Es gibt kein Versuchen.“
(Jedi-Meister Yoda)

#156566

Mr. Teflon

12.08.2009, 00:46:22

@ d-fens

C - Funktionsaufruf will nicht ... ???

> > Also solange keine Rückgabewerte am Ende übergeben werden nimmt man
> void.
> > Das nennt man Prozeduren und nicht Funktionen.
> >
> > Wenn Rückgabewerte übergeben werden, dann kein void aber dafür eine
> > Datentyp Deklaration, die dann dem Rückgabewert entspricht bzw.
> zugewiesen
> > wird
> >
> > Habe ich das richtig verstanden? Mit eigenen Worten wegen dem
> Lerneffekt.
> >  ;-)
>
> Ja, bis auf den Numerus. Funktionen können nur einen einzigen Rückgabewert
> haben, nicht mehrere. Außerdem muss es \"des\" heißen: \"wegen des
> Lerneffekts\".  ;-)
>
> So, genug Korinthen gekackt.  :-P

Hallo,

Okay, immer nur einen Rückggabewert einer Funktion.  :-)

zwischendurch eine Deutschstunde kann nicht falsch sein, solange es sich im Rahmen hält.  ;-)

des Lerneffekts, okay gehe ich mit

Aber was ist an \"wegen dem Lerneffekt\" falsch? Gibts das nicht?

Man kann auch \"der Lerneffekt\".

\"Oder ich hatte den Lerneffekt\".

dem und den verstehe ich als Betonung.

Gibts das alles nicht?

--
___________
Tschau
Mr. Teflon

#156570

baeuchlein

12.08.2009, 01:22:00

@ Mr. Teflon

Deutsche Sprache schwere Sprache (wie C...)

> > > Also solange keine Rückgabewerte am Ende übergeben werden nimmt man
> > void.

Merk\' es Dir so: \"the void\" bedeutet im Englischen \"die Leere\" oder \"das Nichts\". Der Rückgabewert ist quasi die Leere, also keiner.

> Aber was ist an \"wegen dem Lerneffekt\" falsch? Gibts das nicht?

Jein. (Ich bin mal gespannt, was wir jetzt mit diesem \"Wort\" anstellen... :-D )

Früher musste man bei einer solchen Satzkonstruktion den Genitiv verwenden, also \"wegen des Lerneffekts\". Der Dativ, also \"wegen dem Lerneffekt\", war nicht erlaubt. Umgangssprachlich wurde aber häufig dennoch der Dativ verwendet. Daraus erwuchs dann der Spruch \"Rettet dem Dativ!\"

Ich bin mir aber ziemlich sicher, dass man im Zuge der Rechtschreibreform vor einigen Jahren auch die Verwendung des Dativ in diesem Fall erlaubt hat.

Besonders häufig wurde übrigens in Zusammenhang mit dem Wort \"trotzdem\" Schauerliches formuliert, z.B. \"Trotzdem dass er ihn gehört hatte, ignorierte er sein Jammern\".

> dem und den verstehe ich als Betonung.

Aber die deutsche Grammatik nicht. ;-)

#156576

d-fens

Bonn,
12.08.2009, 09:20:33
(editiert von d-fens, 12.08.2009, 09:21:09)

@ baeuchlein

Deutsche Sprache schwere Sprache (wie C...) (ed)

> Ich bin mir aber ziemlich sicher, dass man im Zuge der Rechtschreibreform
> vor einigen Jahren auch die Verwendung des Dativ in diesem Fall erlaubt
> hat.

Ich nicht. Meines Wissens hat lediglich der Duden es als alternative Schreibweise aufgenommen, in den Regeln der Rechtschreibung ist es aber nicht enthalten. Habe aber keinen Bock, das genau zu recherchieren.  :-P

Allerdings nimmt der Duden ja vieles auf, was die Masse falsch macht, und immer wieder heißt es dann: \"Das steht so im Duden, das muss stimmen\". Spätestens wenn da der Apostroph bei Begriffen wie \"Rita’s Kiosk\" oder gar beim Plural \"CD’s und DVD’s\" als erlaubte Schreibweise Einzug hält, ist dieses Buch für mich unten durch. Es gibt gute Alternativen.

--
„Tu es oder tu es nicht! Es gibt kein Versuchen.“
(Jedi-Meister Yoda)

#156601

Mr. Teflon

12.08.2009, 11:33:57

@ d-fens

Danke Euch beiden für die lustige Deutschstunde ...

ob ich mir es merken kann, möchte ich nicht versprechen ...  ;-)

--
___________
Tschau
Mr. Teflon

#156672

baeuchlein

12.08.2009, 22:53:38

@ Mr. Teflon

Deutschstunde

> ob ich mir es merken kann, möchte ich nicht versprechen ...  ;-)

Dann druck\' es Dir aus und häng es Dir über den Schreibtisch! Oder willst Du dumm sterben? :lol3:

#156675

Mr. Teflon

12.08.2009, 23:01:12

@ baeuchlein

Deutschstunde

> > ob ich mir es merken kann, möchte ich nicht versprechen ...  ;-)
>
> Dann druck\' es Dir aus und häng es Dir über den Schreibtisch! Oder willst
> Du dumm sterben? :lol3:

Hallo,

guter Plan, jetzt wo Du es sagst ...  :rotfl2:

--
___________
Tschau
Mr. Teflon

#156682

d-fens

Bonn,
12.08.2009, 23:33:10

@ Mr. Teflon

Deutschstunde

> > > ob ich mir es merken kann, möchte ich nicht versprechen ...  ;-)
> >
> > Dann druck\' es Dir aus und häng es Dir über den Schreibtisch! Oder
> willst
> > Du dumm sterben? :lol3:
>
> Hallo,
>
> guter Plan, jetzt wo Du es sagst ...  :rotfl2:

Oder du gehst zu Regine Klemm in die Deutschstunde.  ;-)

--
„Tu es oder tu es nicht! Es gibt kein Versuchen.“
(Jedi-Meister Yoda)

#156731

d-fens

Bonn,
13.08.2009, 17:52:26

@ baeuchlein

Deutsche Sprache schwere Sprache (wie C...)

> Früher musste man bei einer solchen Satzkonstruktion den Genitiv
> verwenden, also \"wegen des Lerneffekts\". Der Dativ, also \"wegen dem
> Lerneffekt\", war nicht erlaubt. Umgangssprachlich wurde aber häufig dennoch
> der Dativ verwendet. Daraus erwuchs dann der Spruch \"Rettet dem Dativ!\"
>
> Ich bin mir aber ziemlich sicher, dass man im Zuge der Rechtschreibreform
> vor einigen Jahren auch die Verwendung des Dativ in diesem Fall erlaubt
> hat.

Offenbar hast du Recht. Ich habe heute im Wahrig nachgesehen, und da steht auch, dass der Dativ erlaubt ist. Nun ja, hab ich auch wieder was gelernt.  :-)

--
„Tu es oder tu es nicht! Es gibt kein Versuchen.“
(Jedi-Meister Yoda)

#156742

RoyMurphy

Tübingen,
13.08.2009, 19:09:56

@ d-fens

Deutsche Sprache schwere Sprache (wie C...)

> Offenbar hast du Recht. Ich habe heute im
> Wahrig
> nachgesehen, und da steht auch, dass der Dativ erlaubt ist. Nun ja, hab ich
> auch wieder was gelernt.  :-)

Du weißt aber auch, dass die korrekte Anwendung des Genitiv von höherer Intelligenz zeugt. Die Toleranz des Dativ in der neuen deutschen Sprachverwendung lässt hinsichtlich der Reformer damit doch tief blicken.

--
Schwabengruß - https://www.youtube.com/watch?v=toBbW4eTKsA - aus meiner Heimatstadt Esslingen
Reinhard

------------------------------------------------------------------------

#156748

d-fens

Bonn,
13.08.2009, 19:34:08

@ RoyMurphy

Deutsche Sprache schwere Sprache (wie C...)

> Du weißt aber auch, dass die korrekte Anwendung des Genitiv von höherer
> Intelligenz zeugt.

Aber sicher doch. Dass bei \"wegen\" und \"während\" der Genitiv benutzt werden soll, belegen ja die Worte \"deswegen\" und \"währenddessen\". Es gibt übrigens ein genau so schönes Gegenbeispiel - wer findet es raus?  ;-)

--
„Tu es oder tu es nicht! Es gibt kein Versuchen.“
(Jedi-Meister Yoda)

#156760

baeuchlein

13.08.2009, 20:01:05

@ d-fens

Deutsche Sprache schwere Sprache (wie C...)

> Dass bei \"wegen\" und \"während\" der Genitiv benutzt
> werden soll, belegen ja die Worte \"deswegen\" und \"währenddessen\". Es gibt
> übrigens ein genau so schönes Gegenbeispiel - wer findet es raus?  ;-)

Ich finde die Anwendung des Genitivs in solchen Fällen auch schöner, trotzdem macht es im Alltag kaum einer.

#156795

d-fens

Bonn,
13.08.2009, 21:20:37

@ baeuchlein

Deutsche Sprache schwere Sprache (wie C...)

> > Dass bei \"wegen\" und \"während\" der Genitiv benutzt
> > werden soll, belegen ja die Worte \"deswegen\" und \"währenddessen\". Es
> gibt
> > übrigens ein genau so schönes Gegenbeispiel - wer findet es raus?  ;-)
>
> Ich finde die Anwendung des Genitivs in solchen Fällen auch schöner,
> trotzdem macht es im Alltag kaum einer.

Der Kandidat hat 100 Gummipunkte!  :clap:

--
„Tu es oder tu es nicht! Es gibt kein Versuchen.“
(Jedi-Meister Yoda)

#158058

Mr. Teflon

23.08.2009, 22:23:56

@ d-fens

Deutsche Sprache schwere Sprache (wie C...)

Hallo,

Ihr seit echt gut drauf ...  :waving:

--
___________
Tschau
Mr. Teflon

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz