Witam.
Poniżej przedstawiam dość specyficzny problem.
Mamy np zmienną k zadeklarowaną następująco:
Jest ona zadeklarowana nie w głównej funkcji main tylko w funkcji bitin();
Na początku jest ona zerowana.
I tu zaczyna się ciekawie.
W programowej symulacji działa wszystko ok. Natomiast gdy odpalam na rzeczywistym układzie zmienna nie jest zerowana.
Idźmy dalej.
Przeanalizujmy kod asemblera który odpowiada za czynność zerowania tej zmiennej:
Jak widzimy zawartość rejestru R1 (równa 0) jest zapisywana do pamięci pod adresem Y+2 i Y+3.
Y w podanym przykładzie ma wartość wskazującą na komórki pod koniec pamięci danych (0x10F4). Niestety przy sprzętowej symulacji nie jest zmieniana wartość komórek Y+2 i Y+3.
Co leprze region ten jest wypełniony, nie wiedząc dlaczego, wartościami 0x18 i nie można go w żaden sposób zmienić.
Jakieś pomysły??
Pozdrawiam.
Poniżej przedstawiam dość specyficzny problem.
Mamy np zmienną k zadeklarowaną następująco:
volatile int k;Jest ona zadeklarowana nie w głównej funkcji main tylko w funkcji bitin();
Na początku jest ona zerowana.
k = 0;I tu zaczyna się ciekawie.
W programowej symulacji działa wszystko ok. Natomiast gdy odpalam na rzeczywistym układzie zmienna nie jest zerowana.
Idźmy dalej.
Przeanalizujmy kod asemblera który odpowiada za czynność zerowania tej zmiennej:
55: k = 0;
+00000060: 821B STD Y+3,R1 Store indirect with displacement
+00000061: 821A STD Y+2,R1 Store indirect with displacement
Jak widzimy zawartość rejestru R1 (równa 0) jest zapisywana do pamięci pod adresem Y+2 i Y+3.
Y w podanym przykładzie ma wartość wskazującą na komórki pod koniec pamięci danych (0x10F4). Niestety przy sprzętowej symulacji nie jest zmieniana wartość komórek Y+2 i Y+3.
Co leprze region ten jest wypełniony, nie wiedząc dlaczego, wartościami 0x18 i nie można go w żaden sposób zmienić.
Jakieś pomysły??
Pozdrawiam.
