Odpowiedz 
 
Ocena wątku:
  • 3 Głosów - 3.33 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie w języku C w środowisku AVR Studio4
SP4EJT Offline
Marcin
****

Liczba postów: 340
Dołączył: 06-05-2011
Post: #81
RE: Programowanie w języku C w środowisku AVR Studio4
Córka zasnęłą i mam trochę czasu żeby popisać ...
(01-02-2012 21:30)SQ8MHI napisał(a):  ... Ja myślę, że on jest po to, żeby kursantom pokazać, jak w C łatwo i prosto zrobić sobie kuku ...
Przepraszam wszystkich kursantów, że zrobiłem Wam "kuku" i serdecznie dziękuje koledze SQ8MHI za uświadomienie mi mojej ciemnoty - żałuję tylko że kolega nie wyjaśnił od razu na czym polegały błedy.
Tłumaczę na czym polegały moje błędy:
1. ten na który zwrócił uwagę SQ8MHI polegał na tym, że rozmiar tablicy powinien uwzględniać również znacznik końca tablicy - czyli jesli chcemy zapisać w nim 9-cio znakowy ciąg to rozmiar tablicy powinien wynosić 10 ( + znacznik '\0' )
2. Drugi błąd polegał na tym że index (wskaźnik) tablicy, czyli zmienna i była typu char. Zmienna typu char może przyjmować ujemne wartości, a wskaźniki tablic nie mogą mieć wartości ujemnych.
My tu ujemnych wartości nie używamy dlatego program działa. Działa też mimo błednie podanego rozmiaru tablicy - kompilator sam powięszył jej rozmiar z 9 do 10, my tego nie widzimy ale tak jest.
Poprawnie skonstruowana funkcja wys_freq powinna wyglądac tak:
Kod:
void wys_freq(unsigned long int xxx)
{
     char freq_string[10];
     freq_string[9]=0;
     unsigned char i;

     for(i=8; i>0; i-=1)
     {
         freq_string[i]=xxx%10+48;
         xxx/=10;
     }

     freq_string[0]=xxx+48;
     napis_lcd(freq_string);
}
lub tak:
Kod:
void wys_freq(unsigned long int xxx)
{
    char freq_string[10];
    freq_string[9]=0;
    unsigned char i;

    i=8;
    while(i>0)
    {
        freq_string[i]=xxx%10+48;
        xxx/=10;
        i-=1;
    }

    freq_string[0]=xxx+48;
    napis_lcd(freq_string);
}
zwróćcie uwagę na pętlę for z pierwszego kodu i funkcję while z drugiego kodu - robią dokładnie to samo - porównanie te pomoże Wam zrozumieć zawiłe sformułowanie for(i=8; i>0; i-=1)

Jutro dodamy dwa przyciski które będą zmieniały częstotliwość ( na razie co 1 Hz ) - Jeśli ktoś ma pomysł jak to zrobić to prosze sie tu wykazać i podzielić z nami kodem.
(Ten post był ostatnio modyfikowany: 02-02-2012 1:18 przez SP4EJT.)
02-02-2012 1:18
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Programowanie w języku C w środowisku AVR Studio4 - SP4EJT - 02-02-2012 1:18

Skocz do:


Użytkownicy przeglądający ten wątek: 4 gości