13. november 2005 - 20:26Der er
14 kommentarer og 1 løsning
test funktion til streng i C
Hej Jeg sidder og roder med en µC der taler med et modem. Når jeg sender en kommando til modemet gør jeg det vha. af printf afsluttet med "carriage retur" \r
Modemet svarer nu, hvis alt går vel, med et "OK"\r\n
Jeg ville gerne sende kommandoen og derefter lade systemet vente til "OK" returneres, i C++ ville jeg opfatte "OK" som en streng og teste den mod en anden "OK"streng men den går ikke i C
jeg har prøvet noget ligende det her
void get_put_char(void) { char *true = "OK"; char output[10]; printf("AT+CPIN=1234\r"); while (output != true); gets(output); printf("\n status er %c\n",output);//bare for at kunne teste.. }
Men den går jo ikke :( hvis nogen kunne hjælpe mig lidt på sporet af hvordan jeg kan løse det ville jeg blive glad. (kommunikationen foregår over RS232)
No function prototype "fgets" in scope Identifier "stdin" not defined within current scope
jeg kører half-duplex da modemet bare venter på input og derefter kun kan svare "OK" eller "ERROR" så jeg sender min kommando ud på den serielle forbindelse og sætter bare C til at vente på en af de 2 svar, hvis svaret er ERROR har jeg mine kommandoer i et array og prøver at sende den samme kommando igen hvis ikke laver jeg increment ++ og sender samme kommando igen. Problemet er vist at jeg ikke helt ved hvordan jeg skal "læse" at modemet svarer med et "OK\n\r" i et hug, ved ikke helt hvilket slags type det er og hvordan et sådant læses.
Det kompilerer fint og (jeg tester via. en terminal) jeg får "indtast kommando" skrevet ud på terminalen, men når jeg indtaster OK\r , OK\n , OK\r\n eller bare OK sker der intet, den forstår ikke lige sammenhængen mellem OK og OK...hvis man kan sige sådan
Hej Arne Ja jeg trykker selfølgelig "retur" :) og mit "OK" bliver sendt ud på forbindelsen men jeg får ikke det ventede output fra C, hvilket må betyde at det er formateret forkert.
Jeg prøvede at bruge fgets, det ville min kompiler ikke med til(No function prototype "fgets" in scope ), noget specielt jeg skal inkludere?.. læg mærke til jeg er på en microcontroller.
hmm træls sted at sidde fast, men tak for jeres hjælp begge to.
Hej Jeg er ret overbevist om at de ikke fungere med uC.. Når jeg sætter terminalen til Z8(min uC) og starter den udskriver den "indtast kommando" (programmet ovenover) nu står den så og venter på jeg indtaster "OK" (jeg skal jo simulere det på en eller anden måde) når den så har registreret et korrekt indtastet "OK" skulle den jo svare status "OK" .. det gør den ikke ligemeget hvad jeg indtaster og hvor mange gange jeg trykker return..
Jeg tror problemet hænger ved at C ikke forstår "OK" korrekt, hvis I skulle lave dette i et simpelt konsol program og uden at bruge fgets og stdin hvordan ville det så se ud? jeg prøver lige at sætte modemet til og så kopiere præcist hvad det returnere med \r og \n måske det kan hjælpe.
håber det giver mening, den binære kode er output/input <cr> carriage return \r og <lf> line feed \n . (terminal er det jeg taster og modem self. det modem svarer)
Da systemet i teorien skal ud og sidde på en bøje (i teorien) tror jeg det bliver nødvendigt at skrive en statemachine, hvis der skulle være lidt rod med outputtet..(den mindste fejl/støj på linien bliver til mærkelige karaktere) Men jeg vil bruge lidt fra hver af jeres forslag.
Så hvis I ikke syntes det er helt hen i vejret må I gerne smide et svar begge 2.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.