• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Odtwarzanie trasy przejazdu robota - poprawność programu
#2
Zmienne A  i  B (zmiennym globalnym nadawaj dłuższe nazwy, bo ArduinoIDE to szmelc, który nie potrafi tego co KEIL czy Atolic i w ogóle Arduino, nie powinno być nazywane IDE tak jak i Windows systemem. Szukanie krótkich nazw zmiennych to katastrofa. Spróbuj wyszukać przez CTFL+F wystąpienia zmiennej "A".) używasz zarówno w przerwaniu jak i programie głównym.  Nie poinformowałeś o tym kompilatora.

Deklarujesz zmienne 16 bit
Kod:
for (int i = 39; i >= 0; i--)
a wystarczyło by 8-bit. AVR jest za szybki? Nie sądzę.
W ARM miałoby to sens. Operacje na zmiennych 32-bit wykonują się szybciej niż na 8-bit. W ARM typ int jest 32-bit a nie jak w przestarzałych AVR czy Intel286, 386 16-bit. W takiej sytuacji bezpieczniej deklarować taką zmienną jako int_fast8_t. Zależne od CPU zostanie użyty odpowiednia długość słowa, np w 64-bitowym CPU będą to 64-bity, ARM - 32-bit, AVR - 8-bit, MC68000/08/10 8-bit (68008 na pewno 8-bit, 00/10 może i 16-bit) a pewnie w MC68020/30/40/60 16 lub 32-bit. a może tylko 8-bit,


Co do
Kod:
Serial.println(A); // bez tego wiersza program  nie opuszcza pętli while. (???)
Serial.println działa jak delay.

AVR to nie ARM czy PC. Musisz nauczyć się oszczędzać RAM. Deklarujesz
Kod:
int macierz [40][4]
zmienne 16-bit, 40*4 elementów co pochłania 320bajtów RAM. Z pobieżnej analizy kodu wnioskuję, że wystarczy 8-bit, co pochłonie tylko 160bajtów. Dalej, po co aż 4 elementy na kierunki przód, tył, lewo, prawo?  Użyłeś wykluczeń
Kod:
else if (macierz[i][1] > 0) { // do przodu
co oznacza, że analizowany jest jeden z czterech elementów. Nie lepiej w jednym elemencie zapisać informację o wartości a w drugim o kierunku? Zużycie RAM zmniejszy się dwukrotnie. Zamiast 160bajtów po zaoszczędzeniu na deklaracji 8-bit a nie 16-bit zużyjesz 80 bajtów RAM. 4 razy mniej RAM! Nie analizowałem jakie wartości zapisujesz do tablicy ale może wystarczy  6 bitów, w takiej sytuacji, na pozostałych 2 kodujesz kierunek. Zużyjesz tylko 40 bajtów RAM. 8 razy mniej niż pierwotnie!

Napięcie baterii odczytujesz bez uśredniania. jednorazowy skok napięcia i wszystko się zatrzyma. Tak ma być? Raczej nie!


PS
Generalnie, Arduinowcy, nagminnie używają typów 16-bit tam gdzie wystarczy 8. Dlaczego nie wiem?
W deklaracjach PIO, używają zmiennych 16-bit. Po co skoro w 99% przypadkach mogą to być 8-bit stałe w FLASH a jeszcze lepiej, tak jak zrobiłeś, definicje. To chyba pierwszy kod na Arduino, w którym deklaracje PIO zrobiono z głową!
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Odtwarzanie trasy przejazdu robota - poprawność programu - przez es2 - 06-01-2019, 06:34

Skocz do:


Przeglądający: 1 gości