Tag miteinander!!
Ich hab mal eine kleine Frage:
Ich will in C in einer Funktion, an welche Werte übergeben werden, eine
andere Funktion aufrufen, an welche ebenfalls werte übergeben werden...
Beispiel:
1
voidfunktion1(&x,&y,&z,&q)
2
{
3
funktion2(&a,&b,&c,&d)//hier die andere Funktion aufrufen
4
5
sonstigesderfunnktion1
6
}
die variablen xyzq abcd sind natürlich definiert...die Funktionen
einzeln gehen auch wunderbar, nur sollte f2 IN f1 aufgerufen werden...
Weiss jemand was ich meine? Wenn ja, sagt mir bitte wie das richtig
geht...
Dankö!
Ulan schrieb:> die variablen xyzq abcd sind natürlich definiert...die Funktionen> einzeln gehen auch wunderbar, nur sollte f2 IN f1 aufgerufen werden...
was genau verstehst du unter 'IN'?
So wie du das hast, ist es doch wunderbar.
Ulan schrieb:> Beispiel:>> void funktion1(&x, &y, &z, &q)> {> funktion2(&a, &b, &c, &d) //hier die andere Funktion aufrufen>> sonstiges der funnktion1> }
Wenn es überhaupt gehen soll, dann fwhlwn da noch zwei Klammern.
void funktion1(&x, &y, &z, &q)
{
funktion2(&a, &b, &c, &d)
{ //hier die andere Funktion aufrufen
sonstiges der funnktion1
}
}
Ich glaube aber nicht daran.
Offen gesagt bin ich ein wenig irritiert von der Fragestellung und
verstehe sie nicht.
Dein Pseudocode ist (bis auf einige syntaktische Details) korrekt. Die
Funktion 2 wird in der Funktion 1 aufgerufen.
Es scheint wirklich als wenn Du das "in" einmal definieren solltest,
damit wir Dein Problem besser verstehen.
Vielleicht hilft folgendes:
1. Eine Funktionsdefinition kann keine weitere Funktionsdefinition
enthalten.
2. Eine Funktion wird aufgerufen in dem ihr Name gefolgt von einem
Klammerpaar und einem Semikolon hingeschrieben wird. In diesem Sinne
sagt man landläufig das ein Funktionsaufruf sich "in" der aufrufenden
Funktion befindet.
Magst Du bitte die Frage noch einmal ausführlicher formulieren?
Ganz ehrlich: Ulan sollte erst einmal in ein C-Buch oder wenigstens in
eine Programmieranleitung für C, wie es viele im Netz gibt, schauen.
Seine Fragestellung sieht etwa so aus, als ob er von C keine Ahnung hat,
sich auch nicht informiert hat und nun, bei der ersten Hürde, anstatt
einfach einmal etwas Fachliteratur zu wälzen, seine Fragen ins Netz
stellt. Sowas nervt.
Gruß aus dem heißen Indien.
Falls die a,b,c,d nicht global sind, sondern im Aufrufer von f1, dann
musst du sie ggf. auch an f1 mit übergeben, damit f1 sie an f2
weiterreichen kann.
f1 kann ja nicht auf die Variablen seines Aufrufers zugreifen -
vielleicht ist das der Hintergrund der Frage...
Prototypen und alles andere ist auch vorhanden und funktioniert...
Was ich jetzt will:
Ich möchte in der ersten Funktion die zweite Funktion "einbinden/daraus
heraus aufrufen"
--> Sobald ich in der ersten 1.Funktion bin, möchte ich die 2.Funktion
Abhandeln und und dann den Rest der 1.Funktion und dann das Spiel wieder
von vorne solange S1==0.
also ungefähr so:
1
voidsetTimeDigit1(char*digit1)
2
{
3
4
voidmultiplexing(char*digit4,char*digit3,char*digit2,char*digit1)//stimmt so nicht, ist klar...aber hier hin sollte die 2.Funktion
5
6
P5=segCode[*digit1];
7
do{
8
P5=segCode[*digit1];
9
if(S2==1)
10
{
11
*digit1=*digit1+1;
12
P5=segCode[*digit1];
13
}
14
if(*digit1>2)
15
{
16
*digit1=0;
17
}
18
}while(S1==0);
19
}
Ich hoffe, dass ich mich jetzt klarer ausgedrückt habe...
Dank euch allen für die Unterstützung!
Gruss
Ulan
Klaus Wachtler schrieb:> J. L. schrieb:>> Gruß aus dem heißen Indien.>> Uns hier von schönem Wetter etwas vorzuschwärmen - das nervt auch :-)
Von wegen schönes Wetter... >40 Grad im Schatten, das Bier wird
schneller warm als man's trinken kann und ich gebe mir wirklich Mühe.
Wenn ich Glück habe, regnet's heute noch... Und wenn ich noch mehr Glück
habe, bin ich am Dienstag wieder daheim.
Ulan schrieb:> ...die digit-Variablen sind lokal im main>> Danke
Du meinst die Funktion main, oder das modul main.c? Lokal meint wohl die
Funktion ...
Dann sind sie auch in der Funktion 1
1
voidsetTimeDigit1(char*digit1)
nicht bekannt, und können damit nicht weiter übergeben werden.
Aber
Ulan schrieb:> void multiplexing(char *digit4, char *digit3, char *digit2, char *digit1)
//stimmt so nicht, ist klar...aber hier hin sollte die 2.Funktion
Was soll da hin?
Die Funktion? Geht nicht.
Oder ein Aufruf der Funktion? Dann ruf sie da halt auf.
>Ich hoffe, dass ich mich jetzt klarer ausgedrückt habe...
Nicht wirklich, aber ich glaube ich ahne worum es geht.
Bevor ich dazu komme ein kleiner Tip, den Du auch in der Netiquette
findest:
Du willst vor allem ein Ziel erreichen. In dem Du uns Deine Frage nicht
als Beschreibung des "Was" sondern in Begriffen des "Wie" stellst machst
Du uns die Sache schwer, weil man eigentlich beides, in jedem Fall aber
erstmal das "Was" kennen muss.
Falls meine Vermutung richtig ist, dann gibst Du an P5 (was immer das
sei, welcher uC ist denn das?) mit setTimeDigit1 bestimmte Pegel aus um
die Segmente eines 7-Segment-Displays zum leuchten zu bringen.
Deine Frage ist nun, wie Du im Ablauf die Erzeugung dieser Signale mit
dem kontinuierlichen weiterschalten, also multiplexen der aktiven
Anzeigen zeitlich und logisch verschränkst.
Falls das so ist, dann hat das nichts oder nur auf sehr abstrakte Art
mit "in" oder "einbinden" oder "daraus heraus aufrufen" zu tun.
Du stehst an einem Punkt wo Du mehrere zeitlich parallel laufende
Vorgänge koordinieren musst. Dazu gibt es den Ansatz mit
Timer-Interrupts. Lies mal hier in den Artikeln unter
http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige#Mehrere_7-Segment_Anzeigen_.28Multiplexen.29
Falls Du dann weitere konkrete Fragen hast, antworten wir gerne.
PS: Wieso schmiesst du hier mit sovielen Zeigern um dich, wenn du doch
eh nur die char verwendest, auf die sie zeigen? Übergib doch gleich die
char und verwende sie direkt.
Multiplexing funktioniert so nicht.
Du mußt immer ein Digit bis zum nächsten Timerinterrupt leuchten lassen.
Auch ist es Unsinn, 4 Pointer zu übergeben. Es reicht ein Pointer auf
das Array mit den 4 Digits.
Generell ist es ungünstig, im Timerinterrupt Funktionen aufzurufen (viel
Overhead). Leg das Array einfach global an.
Peter
voidmultiplexing(char*digit4,char*digit3,char*digit2,char*digit1)//stimmt so nicht, ist klar...aber hier hin sollte die 2.Funktion
ist aber kein Funktionsaufruf. Bei einem Funktionsaufruf werden keine
Datentypen der Argumente angegeben, sondern die Argumente selbst.
1
voidbar(uint8_ti)
2
{
3
printf("%d\n",i);
4
}
5
6
voidfoo(uint8_tklawoom)
7
{
8
bar(5);
9
bar(klawoom);
10
}
In der Funktion foo wird die Funktion bar aufgerufen. So sieht ein
Funktionsaufruf aus.
Und du brauchst ganz dringend ein C-Buch. Eine Sprache wie C kann man
nicht durch Versuch und Irrtum und durch Zusammenschnorren von
Viertelwissen in diversen Foren erlernen.
kein aufruf ist, steht ja hinten, das ich weiss, das es falsch ist...
>Und du brauchst ganz dringend ein C-Buch.
Hab ich, C von A bis Z liegt neben mir...
>Eine Sprache wie C kann man>nicht durch Versuch und Irrtum und durch Zusammenschnorren von>Viertelwissen in diversen Foren erlernen.
Das weiss ich auch...
und danke an alle, es funktioniert jetzt wie es sollte...
Ulan out.
Ulan schrieb:> @ Karl Heinz>> ICH WEISS WIE MAN EIN FUNKTION AUFRUFT...
Warum präsentierst du dann einen derartigen Müll um dein Problem zu
demonstrieren?
>>Und du brauchst ganz dringend ein C-Buch.> Hab ich, C von A bis Z liegt neben mir...
Dann arbeite es durch! Davon dass es neben dir liegt, davon hast du
nichts!
@Karl Heinz
Ich wollte damit lediglich verdeutlichen, was an dieser Stelle hin
sollte...da ich nicht wusste, wie man mein Problem löst, habe ich Dir
einen derartigen Müll präsentiert...
>Dann arbeite es durch! Davon dass es neben dir liegt, davon hast du>nichts!
Damit bin ich zur Zeit beschäftigt, nur wurde ich aus dem Geschriebenen
im Buch nicht schlau, google konnte mir auch nicht recht helfen --> ergo
frag ich hier blöde...
Aber danke an alle, welche mir geholfen haben!
gruss
Ulan