• 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
Problem z tablicami char
#5
(10-12-2018, 02:51)sitevnic napisał(a): nasunęło mi się pytanie:
"nie wiadomo ile RAM pożera kod" - czy kod nie jest umiejscowiony w zupełnie innej pamięci? w pamięci flash 32kb?
o ile dobrze wiem dane, tablice itp. są umieszczone w pamięci ulotnej - 2kb i z tego co mi się wydaje po kompilacji kodu ta zajętość pamięci ulotnej na zmienne powinna się nie zmieniać.

Czytając z czym masz problem i jak go rozumiesz nie potrafisz określić zajętości RAM ani bezpiecznej granicy. Nie jest to łatwe z kilku powodów:
- ile RAM zużywa uC w czasie przerwania?
- czy przerwania są zagnieżdżone?
- ile RAM zajmuje sterta w czasie działania programu?
Jeśli nie znasz odpowiedzi na powyższe pytania, to nie wiesz, czy 1 czy 99% jest bezpieczną granicą. Przykład dałem wcześniej, teraz dam jeszcze bardziej dosadny. Skompiluj kod:
Kod:
void setup() {
  // put your setup code here, to run once:
  DDRB |= _BV(PB3);
}

void loop() {
  // put your main code here, to run repeatedly:
char t[3000];

  for(uint16_t x=0; x<3000;x++) t[x] = x;
  PORTB ^= _BV(PB3);
  delay( 500 );  
}
Na UNO zajętość RAM 0% - 9 bajtów (ekran w załączniku).
Program powinien zmieniać stan portu PB3 co 500ms. Uruchom go. I co? Działa? Możesz dodać jakiś serial.print. Nie działa! Dlaczego? RAM przecież full a właśnie problemem jest brak pamięci RAM.

Jak chcesz,to mogę napisać kod, gdzie freemem pokazuje full wolnej ram a będzie jej brakować. Jeszcze inny przykład, problem zarządzania RAM w Arduino (tu zachowuje się jak Windows) spowodowany przez użycie C++ zamiast C gdzie możesz tak posiatkować pamięć, że masz wolne 7kB (w Mega2560) a nie możesz zarezerwować 256 bajtów.


PS
Do końca życia nie zrozumie dlaczego Arduino używa C++. To nie język na małe uC. Aby używać C++ na małych uC trzeba bardzo dobrze znać ten język a początkujący, bo dla nich powstało Arduino, nie znają dobrze C++, przeważnie, nie znają go wcale.


Załączone pliki Miniatury
   
 
Odpowiedź
  


Wiadomości w tym wątku
Problem z tablicami char - przez sitevnic - 17-11-2018, 19:31
RE: Problem z tablicami char - przez es2 - 17-11-2018, 21:18
RE: Problem z tablicami char - przez sitevnic - 10-12-2018, 02:51
RE: Problem z tablicami char - przez es2 - 10-12-2018, 09:52
RE: Problem z tablicami char - przez kaczakat - 10-12-2018, 03:49
RE: Problem z tablicami char - przez sitevnic - 10-12-2018, 12:10
RE: Problem z tablicami char - przez es2 - 10-12-2018, 12:18
RE: Problem z tablicami char - przez sitevnic - 10-12-2018, 12:22

Skocz do:


Przeglądający: 1 gości