Forum: Mikrocontroller und Digitale Elektronik Parameterübergabe


von Christoph H. (obbedair)


Lesenswert?

Hallo,
folgende eigentlich einfache sache

ich habe eine Funktion InitCan(), steht in can.c
in der Main-funktion möchte ich diese nun aufrufen und ihr einen Wert 
mitgeben...
aber mein compiler sagt mir das die Funktion keine Argumente möchte :(
1
//in der main
2
3
InitECAN(5);

hier die ecan.c
1
void InitECAN(unsigned char BRP)
2
{
3
    
4
    
5
    BRGCON1 = BRP;
6
7
}

muss ich BRP vorher noch bekannt geben ???
hab vor die InitECAN() noch
1
unsigned char BRP
 gesetzt weil ich dachte das er wegen der Variablen meckert...

von Karl H. (kbuchegg)


Lesenswert?

Such mal den Prototypen der Funktion und sieh nach, was da eingetragen 
ist. Der wird wahrscheinlich in einer Datei namens can.h stehen.

von Karl H. (kbuchegg)


Lesenswert?

Christoph Herzog schrieb:


>
1
> void InitECAN(unsigned char BRP)
2
> {
3
> 
4
> 
5
>     BRGCON1 = BRP;
6
> 
7
> }
8
>
>
> muss ich BRP vorher noch bekannt geben ???

Hast du doch schon. In der Argumentliste der Funktion steht doch alles, 
was es zum Thema BRP zu sagen gibt.

> hab vor die InitECAN() noch
>
1
unsigned char BRP
 gesetzt weil ich dachte das er wegen der
> Variablen meckert...

Ja, was jetzt?
Lautet die Fehlermeldung auf "Function does not accept 1 Argument" (also 
das was du mit 'aber mein compiler sagt mir das die Funktion keine 
Argumente möchte' ausgedrückt hast) oder lautet sie nicht in diese 
Richtung?

Das du kein C-Buch lesen willst, kann ich zur Not ja noch verstehen 
(auch wenn ich immer predige, dass man ohne C-Buch nicht weit kommt). 
Aber dass du Fehlermeldungen nicht lesen willst, das kann ich beim 
besten Willen nicht verstehen.

von Christoph H. (obbedair)


Lesenswert?

im Prototyp stand nur
1
void InitCAN(void);

ich wollte das zu void
1
InitCAN(unsigned char);
ändern...
richtig?
Compiler meint "conflicting declarations for variable "_InitECAN" "

InitECAN() ist doch keine Variable?

von THaala (Gast)


Lesenswert?

Du musst das Prototype for dem ersten Aufruf anbringen, sonst nimmt der 
Compiler einen default an.

Und der ist:

int InitECAN(void).....

Gruß Thilo

von Christoph H. (obbedair)


Lesenswert?

@ kbuchegg
also das mit dem Buch versuch ich zu umgehen indem ich bei sprut, 
pic-projekte und co. google.

was die Fehlermeldungen angeht würde ich mir wünschen keine lesen zu 
müssen... allerdings komm ich wohl nicht dran vorbei was der tatsache 
geschuldet ist das mir in vielen Fällen einfach das grundwissen fehlt.

von Christoph H. (obbedair)


Lesenswert?

THaala schrieb:
> Du musst das Prototype for dem ersten Aufruf anbringen, sonst nimmt der
> Compiler einen default an.

die can.h wird doch noch vor allem anderen eingebunden? somit sollt die 
Funktion doch dann bekannt sein?
in der main.c steht ja gleich am anfang der ganze inculde "ecan.h" kram 
und so... folglich dachte ich das die funktion InitECAN() ja auch 
bekannt ist

von Karl H. (kbuchegg)


Lesenswert?

Christoph Herzog schrieb:
> @ kbuchegg
> also das mit dem Buch versuch ich zu umgehen indem ich bei sprut,
> pic-projekte und co. google.

ALles klar.
Dann bin ich raus.
Ich verbrenn mir nicht nochmal die Finger.

von THaala (Gast)


Lesenswert?

Dann versuch mal testweise den Prototype selbst zu schreiben.

Ich nehme an, das der Prototype den Du sieht durch #ifdef oder #if 
defines gar nicht berücksichtigt wird.

Gruß T.

von THaala (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Christoph Herzog schrieb:
>> @ kbuchegg
>> also das mit dem Buch versuch ich zu umgehen indem ich bei sprut,
>> pic-projekte und co. google.
>
> ALles klar.
> Dann bin ich raus.
> Ich verbrenn mir nicht nochmal die Finger.

Ach so. Da schliesse ich mich an.

von Christoph H. (obbedair)


Lesenswert?

das ist die komplete ecan.h dafür
allerdings habe ich gerad festgestellt das in ihr die ecan.h gar nicht 
eingebunden ist in der ja die Funktionen genau stehen...
wenn ich die ecan.c jetzt aber im oberen teil einbinde wird die funktion 
InitECAN() ja wieder abgearbeitet bevor der Prototype gelesen wird?
denkfehler???
1
#ifndef _ECAN_H
2
#define _ECAN_H
3
4
5
/*********************************************************************
6
*
7
*                             Defines 
8
*
9
*********************************************************************/
10
#define TRUE    1
11
#define FALSE   0
12
13
14
/*********************************************************************
15
*
16
*                        Function Prototypes 
17
*
18
*********************************************************************/
19
void InitECAN(unsigned char);
20
21
unsigned char ECAN_Receive(void);
22
23
void ECAN_Transmit(void);
24
25
26
27
#endif

von Christoph H. (obbedair)


Lesenswert?

THaala schrieb:
> Karl Heinz Buchegger schrieb:
>> Christoph Herzog schrieb:
>>> @ kbuchegg
>>> also das mit dem Buch versuch ich zu umgehen indem ich bei sprut,
>>> pic-projekte und co. google.
>>
>> ALles klar.
>> Dann bin ich raus.
>> Ich verbrenn mir nicht nochmal die Finger.
>
> Ach so. Da schliesse ich mich an.

werd ich mir wohl doch mal ein Büchlein ausleihen müssen. Gibt es 
empfehlenswerte Literatur???

PS.: möglichst auf Microcontroller zugeschnitten...

von troll (Gast)


Lesenswert?

Christoph Herzog schrieb:
> werd ich mir wohl doch mal ein Büchlein ausleihen müssen. Gibt es
> empfehlenswerte Literatur???
Kernighan & Ritchie, Programmieren in C, 2. Auflage

> PS.: möglichst auf Microcontroller zugeschnitten...
C lernt man am besten erstmal ohne µC, auf dem PC kann man besser 
debuggen.

von Karl H. (kbuchegg)


Lesenswert?

troll schrieb:
> Christoph Herzog schrieb:
>> werd ich mir wohl doch mal ein Büchlein ausleihen müssen. Gibt es
>> empfehlenswerte Literatur???
> Kernighan & Ritchie, Programmieren in C, 2. Auflage

Und es lohnt sich einen zu kaufen.
Die nächsten 2 Jahre ist der deine Bibel.

Ich hab bisher 2 Stück besessen. Der erste war noch die 1. Auflage, 
altes K&R C und hat heute nur noch antiquarischen Wert. Der andere starb 
den 'Zerfledderungstod' - d.h. der war so lange im Gebrauch, bis er 
auseinandergefallen ist.

von Christoph H. (obbedair)


Lesenswert?

troll schrieb:

> C lernt man am besten erstmal ohne µC, auf dem PC kann man besser
> debuggen.

und welches Programm dazu? bzw. wird in dem erwähnten Buch eins 
vorgeschlagen?

von Karl H. (kbuchegg)


Lesenswert?

Christoph Herzog schrieb:
> troll schrieb:
>
>> C lernt man am besten erstmal ohne µC, auf dem PC kann man besser
>> debuggen.
>
> und welches Programm dazu? bzw. wird in dem erwähnten Buch eins
> vorgeschlagen?

Ist völlig wurscht.
Irgendeinen freien C-Compiler.

Das ist nämlich der große Vorteil am PC: Das dortige C verhält sich Dank 
Normung exakt so, wie im Buch beschrieben. Das einzige was je nach 
System unterschiedlich ist, ist der Aufbau der IDE. Aber die Sprache mit 
all ihren Systemfunktionen ist exakt die, wie in jedem x beliebigen 
C-Buch beschrieben.

Die 'Krise' auf einem AVR beginnt ja schon damit, dass du erst mal kein 
funktionsfähiges I/O System zur Verfügung hast, auf dem man einfach mal 
mit printf irgendwelche Dinge ausgeben kann. Auf dem PC hast du das aber 
alles zur Verfügung. Und zwar exakt so, wie im Buch beschrieben. Dort 
steht diese Infrastruktur bereits, während man auf einem AVR mehr oder 
weniger wirklich bei 0 anfangen muss. Was die Dinge nicht einfacher 
macht.
Auf dem PC kannst du dich erst mal vollkommen auf C und nur auf C 
konzentrieren. Ohne dich sofort mit der Hardware rumschlagen zu müssen.

von Christoph H. (obbedair)


Lesenswert?

vielen Dank für die informationen

mit µC hab ich allerdings schon länger zutun als mit C.
Früher im Texteditor und Asm geschrieben... jetzt durfte ich feststellen 
das C doch ganz angenehm dafür ist...

soweit habe ich mit C auch keine Probleme gehabt bis jetzt... Allerdings 
habe ich sonst alles immer in die main.c geschrieben und der 
übersichtlichkeit halber wollte ich auf ausgelagerte Datein 
zugreifen/schreiben...

Sich mit dem c-problem auseinander zu setzen wenn ich damit arbeiten 
muss hilft mir den ganzen Kram besser zu merken. wenn ich das Buch 
durcharbeite ohne konkretes Ziel wird es um so schwieriger die vielen 
Sachen zu behalten.
Drum versuch ich mich meist so durchzufuchsen.

PS.: warum ich ASM erwähnte: sich durch die Hardware zu fuchsen ist 
nicht das problem, wenn ich das dazugehörige Datenblatt durchwälzt hab 
gehts.

von Martin S. (drunkenmunky)


Lesenswert?


von Markus M. (mark_m)


Lesenswert?

Der Kernighan/Richie ist DAS Datasheet für C. Er eignet sich auch 
hervorragend als Nachschlagewerk.

Je höher die Programmiersprache, desto wenig kommst du mit 
"durchfuchsen" weiter.

Sei froh, dass Du auf einem MC nicht/wenig mit komplexen Datenstrukturen 
zu tun hast. Da hängt die Latte um einiges höher.

Grüsse

von Christoph H. (obbedair)


Lesenswert?

Markus M. schrieb:

> Sei froh, dass Du auf einem MC nicht/wenig mit komplexen Datenstrukturen
> zu tun hast.

Bin ich ;)

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.