Witam
mam taki problem, otóż mój STM32F4 bardzo dziwnie się zachowuje.
Mój program ma odczytywać z 3 różnych czujników przez I2C dane i przeliczać je. I2C zrealizowane jest na przerwaniach (z najwyższym priorytetem), dodatkowo używam timera 2, by odmierzał czas.
Oto kod:
Jak go puszczę w debuggerze to zawiesza się w pierwszej : "while(czas<1000);", na podglądzie widać, że czas jest znacznie większy od tego 1000, a jak go akurat zatrzymam w miejscu w którym realizowane jest przerwanie od timera, to po dojściu przez "step" do końca przerwania zawiesza się.
To niestety nie koniec problemów, aby ominąć ten problem po prostu po każdym zainicjalizowaniu czujnika (inicjalizacje są bez przerwań) dawałem break pointa i to działało (nie używałem w tym miejscu w ogóle timera.
W pętli głównej programu, w której sprawdzam czy minął czas i można już odebrać dane w zależności od ustawionych czasów, albo odbieram dane tylko z przyspieszeniomierza (BMA180), albo jeden pomiar z żyroskopów (ITG) i żadnego pomiaru z magnetometru (HMC), a czasem odbieram poprawnie wszystkie dane.
W dwóch pierwszych przypadkach jak zatrzymam program po kilku sekundach, to okazuje się, że licznikITG i licznikHMC mają bardzo duże wartości.
W pętli głównej są tylko 4 warunki if (zazwyczaj nie spełnione) a i tak nic się nie dzieje, tylko jak zatrzymam program i dam step to w ogóle nie wiem gdzie jest kursor. Co dziwne pierwszy warunek (z BMA180) jest sprawdzany i wykonywany - co prawna nie po 0.5 ms, ale jakoś mikrokontroler to widzi, a innych warunków już nie.
Czy robię jakiś podstawowy błąd? Może mam coś źle skonfigurowane? Z góry dziękuję za pomoc i pozdrawiam
Maciek
mam taki problem, otóż mój STM32F4 bardzo dziwnie się zachowuje.
Mój program ma odczytywać z 3 różnych czujników przez I2C dane i przeliczać je. I2C zrealizowane jest na przerwaniach (z najwyższym priorytetem), dodatkowo używam timera 2, by odmierzał czas.
Oto kod:
Code: c
Jak go puszczę w debuggerze to zawiesza się w pierwszej : "while(czas<1000);", na podglądzie widać, że czas jest znacznie większy od tego 1000, a jak go akurat zatrzymam w miejscu w którym realizowane jest przerwanie od timera, to po dojściu przez "step" do końca przerwania zawiesza się.
To niestety nie koniec problemów, aby ominąć ten problem po prostu po każdym zainicjalizowaniu czujnika (inicjalizacje są bez przerwań) dawałem break pointa i to działało (nie używałem w tym miejscu w ogóle timera.
W pętli głównej programu, w której sprawdzam czy minął czas i można już odebrać dane w zależności od ustawionych czasów, albo odbieram dane tylko z przyspieszeniomierza (BMA180), albo jeden pomiar z żyroskopów (ITG) i żadnego pomiaru z magnetometru (HMC), a czasem odbieram poprawnie wszystkie dane.
W dwóch pierwszych przypadkach jak zatrzymam program po kilku sekundach, to okazuje się, że licznikITG i licznikHMC mają bardzo duże wartości.
W pętli głównej są tylko 4 warunki if (zazwyczaj nie spełnione) a i tak nic się nie dzieje, tylko jak zatrzymam program i dam step to w ogóle nie wiem gdzie jest kursor. Co dziwne pierwszy warunek (z BMA180) jest sprawdzany i wykonywany - co prawna nie po 0.5 ms, ale jakoś mikrokontroler to widzi, a innych warunków już nie.
Czy robię jakiś podstawowy błąd? Może mam coś źle skonfigurowane? Z góry dziękuję za pomoc i pozdrawiam
Maciek