Syöttäminen osoittimia mitätöidä jotka eivät toimi

T

tebron

Guest
Hei, haluaisin esittää kysymykseni teille asiantuntijoille C koska olen aloittelija ja en tiedä miten ratkaista ongelma. Olen toiminto, joka vie parametrina osoitin void, minun on läpäistävä arvo yksi tai nolla kytkeä päälle tai pois päältä johti. Yritin alla oleva koodi, mutta vaikka kääntäjä on virheetön todellisuudessa arvo muuttujan veri pysyy aina nolla. Voitko antaa minulle mitään ohjeita käyttää rutiini? Kiitos. main (void) {while (1) {TaskLedUno ((BOOL *) 1);}} void TaskLedUno (void * pFlagLed) {BOOL veri; / / while (1) {pistetty =* (BOOL *) pFlagLed; pLED_1 ( Bled);}}
 
Ongelma johtuu kulkee osoitin kirjaimellinen, useimmat kääntäjät kääntää koodi ilman virheitä, mutta riippuen OS, jos sellainen on olemassa, heittää käyttöoikeusvirhe kun käynnissä. Kokeile tätä koodia sijaan:
Code:
 main (void) {BOOL lippu = (BOOL) 1, / / tai / / BOOL lippu = true; / / jos se on määritetty (1) {TaskLedUno (& lippu);}} void TaskLedUno ( void * pFlagLed) {BOOL veri; / / while (1) {pistetty =* (BOOL *) pFlagLed; pLED_1 (Bled);}}
koodi edellä kokoaa ja toimii virheettömästi ja tuottaa halutun tuloksen. Ciao
 
Hei, Onko mahdollista siirtää arvo on 1 tai 0 ilman kulkea muuttuja?
 
Kyllä, siirtää sen arvoa, eikä viittausta.
Code:
 main (void) {while (1) {TaskLedUno ((BOOL) 1) / / tai / / TaskLedUno (true);}} void TaskLedUno (BOOL FlagLed) {BOOL veri; / / while (1) { veri = FlagLed; pLED_1 (Bled);}}
Jos yrität siirtää osoite vakio tai kirjaimellinen, "& (BOOL) 1," useimmat kääntäjät, tulee säikkyä. Sitä paitsi, mitä järkeä rutiinia, "void TaskLedUno (void * pFlagLed)," jos aiot pakottaa staattinen tila, todellinen koodi? Saatat sekä määrittää kaksi rutiinit, "void LedOn (void)" ja "void LedOff (void)." Hope info auttaa. Ciao
 
Miksi ei vain tehdä helpompaa? void TaskLEDUno (Bool käytössä); Jos haluat päälle LED, soita TaskLEDUno (1) ja sammuttaa LED, soita TaskLEDUno (0).
 
Miksi ei vain tehdä helpompaa? void TaskLEDUno (Bool käytössä); Jos haluat päälle LED, soita TaskLEDUno (1) ja sammuttaa LED, soita TaskLEDUno (0).
Kyllä. Ohi arvo esimerkiksi olen lähetetty aikaisemmin, viittaus post # 4, on juuri tämän tehtävän. Mutta oikeat SkyHigh, Tebron n ohjelma ei osoita kovin järkevää käyttöä "void *." Kuitenkaan ei tiedä Tebron tulevaisuuden suunnitelmat "void TaskLedUno (void * pFlagLed)" rutiini, aioin pidättää minun tuomioni käyttöä koskevat "void *." Suuremmassa järjestelmässä asioita, jos Tebron oli myöhemmin siirtää "void TaskLedUno (void * pFlagLed)" oleva osoitin toiseen rutiini, niin se olisi järkevää.
 

Welcome to EDABoard.com

Sponsor

Back
Top