Passing Zeiger auf void, die nicht funktionieren

T

tebron

Guest
Hallo, würde Ich mag meine Frage an Sie Experten c einreichen, da ich ein Anfänger bin und ich weiß nicht, wie das Problem zu lösen. Ich habe eine Funktion, die als Parameter einen Zeiger auf void, habe ich auf einen Wert von Eins oder Null zu aktivieren oder zu deaktivieren eine LED weitergeben. Ich habe versucht, den Code unten, aber, auch wenn der Compiler frei von Fehlern in Wirklichkeit den Wert in die Variable Bled ist noch immer Null. Können Sie mir eine Anleitung, wie die Routine zu betreiben, um? Vielen Dank. main (void) {while (1) {TaskLedUno ((BOOL *) 1);}} void TaskLedUno (void * pFlagLed) {BOOL blutete; / / while (1) {blutete =* (BOOL *) pFlagLed; pLED_1 ( Bled);}}
 
Ihr Problem ergibt sich aus Übergabe eines Zeigers auf eine wörtliche, die meisten Compiler den Code ohne Fehler kompilieren, jedoch je nach Betriebssystem, wenn es einen gibt, wird eine Zugriffsverletzung auf laufende werfen. Versuchen Sie stattdessen diesen Code:
Code:
 main (void) {BOOL flag = (BOOL) 1; / / oder / / BOOL flag = TRUE; / / if defined while (1) {TaskLedUno (& flag);}} void TaskLedUno ( void * pFlagLed) {BOOL blutete; / / while (1) {blutete =* (BOOL *) pFlagLed; pLED_1 (Bled);}}
Der obige Code kompiliert und läuft ohne Fehler und produziert das gewünschte Ergebnis. Ciao
 
Hallo, Gibt es eine Möglichkeit auf einen Wert von 1 oder 0, ohne eine Variable übergeben passieren?
 
Ja, geben sie von Wert, nicht verweisen.
Code:
 main (void) {while (1) {TaskLedUno ((BOOL) 1); / / oder / / TaskLedUno (TRUE);}} void TaskLedUno (BOOL FlagLed) {BOOL blutete; / / while (1) { ausgeblutet = FlagLed; pLED_1 (Bled);}}
Wenn Sie versuchen, übergeben Sie eine Adresse Konstante oder Literal, "& (BOOL) 1," die meisten Compiler werden sträuben. Außerdem, was ist der Punkt, der mit der Routine "void TaskLedUno (void * pFlagLed)," Wenn du gehst, um einen statischen Zustand in Ihren eigentlichen Code Kraft Genauso gut könnte man definieren als zwei Routinen, "void Ledon (void)" und "void LedOff (void)." Hoffe, dass die Info hilft. Ciao
 
Warum nicht einfach leichter machen? void TaskLEDUno (Bool On); Wenn Sie auf die LED, rufen TaskLEDUno (1) und zum Ausschalten der LED, rufen TaskLEDUno (0).
 
Warum nicht einfach leichter machen? void TaskLEDUno (Bool On); Wenn Sie auf die LED, rufen TaskLEDUno (1) und zum Ausschalten der LED, rufen TaskLEDUno (0)
Ja.. Die Wertübergabe Beispiel, das ich geschrieben zuvor, Referenz-post # 4, ist genau diese Funktion. Aber Ihre korrekte SkyHigh, hat Tebron das Programm nicht nachweisen, eine sehr umsichtige Verwendung von "void *." Allerdings, nicht wissend, Tebron die zukünftigen Pläne für die "Leere TaskLedUno (void * pFlagLed)" Routine, ich würde mein Urteil über die Verwendung der zurückzuhalten "void *." In den größeren Plan der Dinge, wenn Tebron später passieren die waren "void TaskLedUno (void * pFlagLed)" als einen Funktionszeiger in eine andere Routine, dann wäre es sinnvoll zu sein.
 

Welcome to EDABoard.com

Sponsor

Back
Top