logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

problem z liczeniem winavr

lukullus87 18 Maj 2009 23:57 939 4
REKLAMA
  • #1 6547209
    lukullus87
    Poziom 11  
    Witam,
    mam problem z wykonywaniem obliczen w programie, otóż kod wygląda nastepująco:

    
    int con;
    uint8_t *gps_data, *gps_pom;
    
    gps_pom[5]=gps_data[3];
    gps_pom[4]=gps_data[4];
    gps_pom[3]=gps_data[6];
    gps_pom[2]=gps_data[7];
    gps_pom[1]=gps_data[8];
    gps_pom[0]=gps_data[9];
    
    
    con=atot(gps_pom);
    con=con+10;
    itoa(con,gps_pom, 10);
    LCD_GoTo(0,0);
    LCD_WriteText(gps_pom);
    


    , gdzie gps_pom jest stringiem, następnie zamieniam string na int funkcja atoi wykonuje jakies obliczenia i teraz inta chce zamienić na strionga i wyswietlic na LCD. Problem jest z obliczeniami, bo np. mam liczbe 622530 chce dodac do niej 10 i wynik pojawia sie 622110. Nie mam pojecia o co chodzi. Dziekuje z góry za pomoc. Pozdrawiam;)
  • REKLAMA
  • Pomocny post
    #2 6547292
    Dr.Vee
    VIP Zasłużony dla elektroda
    Na procesorze avr int ma 16 bitów, a więc jego zakres to od -32768 do 32767. Spróbuj:
    long con;
    con = atol(gps_pom);
    con += 10;
    ltoa(con, gps_pom, 10);
    Pozdrawiam,
    Dr.Vee
  • REKLAMA
  • Pomocny post
    #3 6547312
    BoskiDialer
    Poziom 34  
    Nigdzie nie widzę, aby wskaźnikom gps_data i gps_pom były przypisywane jakieś adresu. Kolejna sprawa, to jeśli liczby mają być obsługiwane powyżej (jak zauważył Dr.Vee) 32767, musisz zmienić typ zmiennej (ja preferuję uint32_t z <stdint.h>). Jeśli liczby mogą mieć 6 cyfr, należy pamiętać, że aby ciąg znaków był poprawnym ciągiem, musi być zakończony bajtem zerowym, którego wstawienia nigdzie jawnie nie widzę.
  • REKLAMA
  • #4 6552016
    lukullus87
    Poziom 11  
    Dziekuje za zainteresowanie i pomoc jednak nadal mam problem w sumie nie wiem dlaczego, staralem sie zmienic typ con z int na uint16_t lub long, ale nadal występuje ten sam blad, np. teraz wrzuciłem sobie stringa "320" i na wyswietlaczu pojawia sie 320, nastepnie prubuje dodac do niego 10 i pojawia się 110. Natomiast jezeli dodaje cyfry czyli od 0 do 9 to jest wszystko ok. Nie wiem juz o co chodzi...
REKLAMA