Jako projekt na uczelnię muszę zrobić zegar z synchronizacją przez serwer NTP.
Mam ten program napisany w języku C, który zajmuje ponad 900 linijek i się kompiluje bez problemów. Podobno działa, ale nie dostałem jeszcze z uczelni tego urządzenia (bo z innych wydziałów ktoś też robi ten projekt) by to sprawdzić.
Mam też schematy i opisy po angielsku mikrokontrolera ATmega32.
Problem polega na tym, że ten kod to dla mnie czarna magia... Nie mam pojęcie co to przerwania, nie rozumiem tych instrukcji, które ustawiają jakieś bity bez końca i to niby powoduje pobranie z serwera sekundy, minuty i godziny i pokazanie go na wyświetlaczu w formie trzech dwucyfrowych liczb...
Potrzebuje pomoc od kogoś kto się na tym zna i mi pomoże. Wystarczy tylko przerobić jedną funkcję, która de facto działa, ale jest nie do końca dobrze napisana i to ją mamy poprawić. Czy ktoś byłby mi w stanie popatrzeć w kod?
Oto i ona:
Kod: Zaznacz cały
void liczas(int *temp, int *wynik)
{
int j;
while(!((temp[0]==tab[0])&&(temp[1]==tab[1])&&(temp[2]==tab[2])&&(temp[3]==tab[3])))
{
w[5]++;
if (w[5]==60)
{
w[5]=0;
w[4]++; //minuta
if (w[4]==60)
{
w[4]=0;
w[3]++; //godzina
if (w[3]==24)
{
w[3]=0;
w[2]++; //dzien
if (((w[2]>31)&&(w[1]==1)) || ((w[2]>31)&&(w[1]==3)) || ((w[2])>31&&(w[1]==5)) || ((w[2]>31)&&(w[1]==7)) || ((w[2]>31)&&(w[1]==8)) || ((w[2]>30)&&(w[1]==11)) || ((w[2]>31)&&(w[1]==12)) || ((w[2]>30)&&(w[1]==4)) || ((w[2]>30)&&(w[1]==6)) || ((w[2]>30)&&(w[1]==9)) || ((w[2]>31)&&(w[1]==10)) || ((w[2]>28)&&(w[1]==2)&&((w[0]%4))) || ((w[2]>29)&&(w[1]==2)&&((w[0]%4)==0)))
{
w[2]=1;
w[1]++; //miesiac
if (w[1]==13)
{
w[1]=1;
w[0]++; //rok
}
}
}
}
}
//przechodzenie przez koelejne pozycje licznika hex.
tab[3]++;
if (tab[3]==256)
{
tab[3]=0;
tab[2]++;
if (tab[2]==256)
{
tab[2]=0;
tab[1]++;
if (tab[1]==256)
{
tab[1]=0;
tab[0]++;
}
}
}
}
for(j=0; j<6; j++)
wynik[j]=w[j];
}
Jeśli ktoś mi się tym zajmie od początku do końca to wysyłam mu flaszkę!