Przekazywanie wskaźników na void, które nie działają

T

tebron

Guest
Witam, chciałbym przedstawić moje pytanie ekspertom c ponieważ jestem początkujący i nie wiem jak rozwiązać problem. Mam funkcję, która przyjmuje jako parametr wskaźnik do void, mam przekazać wartość z jednego lub zero, aby włączyć lub wyłączyć diodę LED. Próbowałem poniższy kod, ale nawet jeśli kompilator jest wolne od błędów w rzeczywistości wartość w zmiennej krwi pozostaje zawsze zero. Czy możesz dać mi żadnych wskazówek co do obsługi rutynowych? Dziękuję bardzo. main () {while (1) {TaskLedUno ((BOOL *) 1);}} void TaskLedUno (void * pFlagLed) {BOOL krwi; / / while (1) {krwi =* (BOOL *) pFlagLed; pLED_1 ( Bled);}}
 
Twój problem wynika z przekazując wskaźnik do literału, większość kompilatory kompilacji kodu bez błędów, jednak w zależności od systemu operacyjnego, jeśli istnieje, będzie rzut naruszenia zasad dostępu na uruchomiony. Spróbuj tego kodu zamiast:
Code:
 main (void) {flaga BOOL = (BOOL) 1 / / lub / / BOOL flaga = true / / jeśli określona while (1) {TaskLedUno (i flag);}} void TaskLedUno ( void * pFlagLed) {BOOL krwi; / / while (1) {krwi =* (BOOL *) pFlagLed; pLED_1 (Bled);}}
Powyższy kod kompiluje się i działa bez błędów i daje pożądanego rezultatu. Ciao
 
Witam, Czy istnieje sposób, aby przekazać wartość 1 lub 0 bez konieczności przejścia zmiennej?
 
Tak, przekazać ją przez wartość, a nie odniesienia.
Code:
 main (void) {while (1) {TaskLedUno ((BOOL) 1) / / lub / / TaskLedUno (TRUE);}} void TaskLedUno (BOOL FlagLed) {BOOL krwi; / / while (1) { wykrwawione = FlagLed; pLED_1 (Bled);}}
Jeśli spróbujesz przekazać adres stałego lub dosłowny "i (BOOL) 1," kompilatory najbardziej, będzie przeszkadzać. Poza tym, jaki jest sens posiadania rutynowe, "nieważne TaskLedUno (void * pFlagLed)," jeśli masz zamiar życie warunkach statycznych w aktualny kod? Można, jak również zdefiniowanie dwóch procedur: "nieważne LedOn (void)" i "nieważne LedOff (void)". Nadzieja info pomaga. Ciao
 
Dlaczego po prostu nie uprościć? void TaskLEDUno (Bool On); Jeśli chcesz, aby włączyć LED, połączenie TaskLEDUno (1) i wyłączyć LED, połączenie TaskLEDUno (0).
 
Dlaczego po prostu nie uprościć? void TaskLEDUno (Bool On); Jeśli chcesz, aby włączyć LED, połączenie TaskLEDUno (1) i wyłączyć LED, połączenie TaskLEDUno (0)
Tak.. Przechodzą przez przykład wartość napisałem wcześniej, post reference # 4, jest dokładnie tej funkcji. Ale poprawny SkyHigh, program Tebron nie stanowi dowodu na bardzo ostrożne "void *." Jednak nie znając plany na przyszłość Tebron dla "nieważne TaskLedUno (void * pFlagLed)" rutynowe, miałem zamiar wstrzymać moje wyroku w sprawie stosowania "void *." W większych systemie rzeczy, jeśli Tebron miały później przekazać "nieważne TaskLedUno (void * pFlagLed)" jako wskaźnik funkcji w innej procedury, to miałoby sens.
 

Welcome to EDABoard.com

Sponsor

Back
Top