www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Ne najdem,....

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 64.07
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Sob Dec 06, 2014 7:05 pm    Naslov sporočila:  Ne najdem,.... Odgovori s citatom

Kje se tu skriva napaka ?

Koda:

char inpp[48];
char ip;   
char ttt[8],www[8];       



void append(char* s, char c)                               // doda char na konec stringa
{
    int len = strlen(s);
    s[len] = c;
    s[len+1] = '\0';
}


char getparam(char* s)
{
char il;
char p;
//    strcpy(s,"");
    s[0]=0;
    while ((inpp[ip]!=',') & (inpp[ip]!=0x00)) {
        if (inpp[ip]!=' ') {
            append(s,inpp[ip]);
            il=strlen(s);
        }
        ip++;     
    }
    p=0;   
    return il;
}


while (1)
   {
      if (bend==1) {                     
         ip=0;
         kdo=getparam(ttt);
         
         
         bend=0;
               
         for (it=0;it<=strlen(ttt);it++){
            putchar(ttt[it]);
         } 
         putchar('*');
         itoa(kdo,www);
         for (it=0;it<=strlen(www);it++){
            putchar(www[it]);
         }             
      }
   }
}



Tole ni cel program, temveč le del. Preko interrupt rutine se napolni inpp in prižge vrednost bend na 1. To vse deluje.

Problem je delovanje getparam rutine, ki prvič vrne pravo vrednost, vsakič naslednjič pa vrednost preveliko za 1.

še izpis s terminalskega programa....


Koda:
1,12
1[00]*1[00]

1,12
1[00]*2[00]

_________________
Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
danilo
Član
Član



Pridružen-a: Sre 20 Avg 2003 14:57
Prispevkov: 147
Aktiv.: 0.66
Kraj: Kamnik

PrispevekObjavljeno: Sob Dec 06, 2014 8:53 pm    Naslov sporočila:   Odgovori s citatom

Mogoče je problem v funkciji append. Funkcija strlen vrne dolžino stringa brez end of string markerja. To pomeni, da moraš spremeniti funkijo append in sicer

s[++len] = c;
s[++len] = '\0';

Lahko pa je problem tudi kje drugje. To mi je padlo v oči.

lp Danilo

še opis c++ funkcije strlen:

strlen
size_t strlen ( const char * str );
Get string length
Returns the length of the C string str.

The length of a C string is determined by the terminating null-character: A C string is as long as the number of characters between the beginning of the string and the terminating null character (without including the terminating null character itself).

This should not be confused with the size of the array that holds the string. For example:

char mystr[100]="test string";

defines an array of characters with a size of 100 chars, but the C string with which mystr has been initialized has a length of only 11 characters. Therefore, while sizeof(mystr) evaluates to 100, strlen(mystr) returns 11.

In C++, char_traits::length implements the same behavior.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 64.07
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Sob Dec 06, 2014 10:00 pm    Naslov sporočila:   Odgovori s citatom

Vse zgoraj napisano deluje korektno. Problem je nastal v stringu, ki sem ga pošiljal v te funkcije. Ta se je, razen prvič,začel z 0x0a.

Se pa da to pogruntat tudi iz izpisa, ker normalno bi stvar ne smela biti v novi vrsti.

_________________
Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group