Witam,
straciłem dzień na uporanie się z niesamowicie dziwnym zachowaniem programu. Otóż w pamięci programu mam zapisaną tablicę melodia[500][3] przechowującą w każdym wierszu odpowiednio częstotliwość tonu długość tonu i odstęp czasowy od następnego tonu.
Procedura odegrajMelodie() ma za zadanie wywołać dla każdego wiersza procedurę generującą ton o częstotliwości i czasie trwania odczytanej z pamięci programu. I teraz co dziwne: podczas debugowania, do poszczególnych (poniższych) zmiennych, ładowane są prawidłowe wartości:
Skupmy się na zmiennej frequency i pierwszym tonie jaki generuje układ (zaraz na początku) - ton 660Hz. Gdy uruchomię powyższy kod, to pomimo wczytywania prawidłowej wartości do zmiennej (sprawdzałem prawidłowość wczytanej wartości przez debugger i poprzez warunek IF), generowany ton jest dużo niższy niż gdybym uruchomił taki kod:
Dlaczego tak się dzieje? Jaka może być tego przyczyna. W obu wypadkach do funkcji generujTon wchodzi jako pierwszy parametr liczba 660, a wyniki są różne w zależności od tego skąd ta liczba pochodzi (wpisana ręcznie czy odczytana z pamięci programu). Funkcja odegrajMelodie() jest wywoływana tylko raz. Nie dzieje się tak przy wyłączonych optymalizacjach kompilatora, ale wtedy znowu źle działają funkcje opóźniające _delay_**.
Z góry serdecznie dziękuję za jakąś podpowiedź.
straciłem dzień na uporanie się z niesamowicie dziwnym zachowaniem programu. Otóż w pamięci programu mam zapisaną tablicę melodia[500][3] przechowującą w każdym wierszu odpowiednio częstotliwość tonu długość tonu i odstęp czasowy od następnego tonu.
Procedura odegrajMelodie() ma za zadanie wywołać dla każdego wiersza procedurę generującą ton o częstotliwości i czasie trwania odczytanej z pamięci programu. I teraz co dziwne: podczas debugowania, do poszczególnych (poniższych) zmiennych, ładowane są prawidłowe wartości:
Kod: C / C++
Skupmy się na zmiennej frequency i pierwszym tonie jaki generuje układ (zaraz na początku) - ton 660Hz. Gdy uruchomię powyższy kod, to pomimo wczytywania prawidłowej wartości do zmiennej (sprawdzałem prawidłowość wczytanej wartości przez debugger i poprzez warunek IF), generowany ton jest dużo niższy niż gdybym uruchomił taki kod:
Kod: C / C++
Dlaczego tak się dzieje? Jaka może być tego przyczyna. W obu wypadkach do funkcji generujTon wchodzi jako pierwszy parametr liczba 660, a wyniki są różne w zależności od tego skąd ta liczba pochodzi (wpisana ręcznie czy odczytana z pamięci programu). Funkcja odegrajMelodie() jest wywoływana tylko raz. Nie dzieje się tak przy wyłączonych optymalizacjach kompilatora, ale wtedy znowu źle działają funkcje opóźniające _delay_**.
Z góry serdecznie dziękuję za jakąś podpowiedź.
