Wielkość stosów Atmega1284P

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
maximus_kr
Posty: 4
Rejestracja: 02 lip 2017, 20:57

Wielkość stosów Atmega1284P

Post autor: maximus_kr » 02 lip 2017, 21:11

Czy za bardzo ustawiony stos ( za duże wartości ) może powodować problemy ?
Bo mam
  1. $hwstack = 256 ' rozmiar stosu sprzętowego
  2. $swstack = 192 ' rozmiar stosu programowego
  3. $framesize = 192
a dopisałem kilka linijek z help'a Bascom, które mają pokazać wartości stosu i jako ostatni Case ( po wywołaniu wszystkich czujników i zapisie na SD ) pokazują:
  1. hw_lowest: 16622
  2. HW stack needed : 17
  3. fw_highest:16044
  4. Frame space needed : 149
  5. sw_lowest: 16368
  6. SW stack needed : 15
Co prawda HW mam trochę za duży, ale przy obsłudze kart SD zalecają 128, a do tego mam trochę podprogramów i funkcji.
Pytam dlatego, że po dodaniu do mojego projektu wysyłania danych do Domoticz losowo mi się blokuje Atmega1284P - wszystkie czujniki i zapis mam w 45 Case'ach, ale blokowanie występuje losowo - czasem na początku, a czasem pod koniec Select Case. Na początku robiłem wysyłanie każdego Case na programowy UART, ale to tylko pokazało, że program zawiesza się losowo. Teraz zostaje mi poprawność ustawień stosów i usunięcie części Case'ów - czyli start prawie od zera.

Cały plik w załączniku, może jakieś rozwiązania się komuś przydadzą.
Atmega1284P_ESP8266_domoticz_Test_v.7.zip
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Wielkość stosów Atmega1284P

Post autor: niveasoft » 03 lip 2017, 17:23

Program jest długi i trochę trudny przez to w analizie.
Niemniej stosy nie powinny stanowić tu problemu zważywszy, że w programie masz wpisane inaczej niż tu w poście :D

Zauważyłem że ESP czasem wyśle jakiś śmieć nie kończąc go CRLF
Dlatego u siebie dodaję Timeout dla odbieranych stringów. Każdy nadchodzący znak przedłuża Timeout. Kiedy jednak otrzymano jakąś jedną literkę i nic po za tym to po jakimś czasie program ustawia flagę Got_str i analizuje co dostał.
Nie kasuję wiec śmieci tylko się najpierw im przyglądam.

Taka obsługa będzie pokazana w kodzie do MQTT na ESP8266 :D
Często mnie coś goni czasowo i dlatego pisze na raty :D
maximus_kr
Posty: 4
Rejestracja: 02 lip 2017, 20:57

Re: Wielkość stosów Atmega1284P

Post autor: maximus_kr » 04 lip 2017, 0:05

W programie mam inaczej, bo zacząłem sprawdzać inne możliwości.
Podpiąłem do pinu TXd ESP konwerter i podglądałem wysyłanie do Atmegi - wszystko ładnie przebiega - najpierw jest +IPD,213:HTTP/1.1 200 OK, później CLOUSED. Najczęściej zatrzymuje się po
  1.  Disable Interrupts
  2.    1wreset                                                  'reset magistrali 1-Wire
  3.    1wwrite &HCC                                             'rozkaz funkcyjny SKIP ROM
  4.    1wwrite &H44
  5.    Enable Interrupts


Zmieniłem płytkę na inną + nowa Atmega ( zawsze robię dwie lub trzy płytki tego samego rodzaju ) i nic.

Mam jeszcze jeden trop.
Otóż zapisuję na karcie SD także CRC i statusy czujników.
Niepokoi mnie coś taki wpis:
"0108 23:27:35 03/07/2017 Pompa 1: Off Pompa 2: Off Pompa 3: Off Pompa 4: Off Status Dht: Dht Blad
Napis błąd pojawia się gdy:
  1. If Error_dht = 1 Then                                       'Oznacza to, że dane nie są poprawne
  2.   Dht_error_str = "Dht Blad"
  3.   Else
  4.   Dht_error_str = "Dht Ok"
  5. End If
stan tej zmiennej wynika z obliczeń podprogramu obsługującego DHT22 - jego fragment
  1.    S16_dht = Right(sensor_data_dht , 8)
  2.    Crc_dht = Binval(s16_dht)
  3.    Mybyte_dht = T_dht + H_dht                               'dodajemy wartości temperatury i wilgotności
  4.    If Mybyte_dht <> Crc_dht Then                            'jeśli suma kontrolna się nie zgadza
  5.       Error_dht = 1                                         'Oznacza to, że dane nie są poprawne
  6.    End If
Ale co ciekawe odczytane wartości są poprawne ( tzn. nie wiem, czy są poprawne, po prostu są )
Wpis o tym samym numerze i dacie/czasie
"0108 23:27:35 03/07/2017 DS Temp 1: (-)19.0 DS Temp 2: (-)20.0 DS Temp 3: (-)18.9 DS Temp 4: (-)18.9 DS Temp 7: (-)18.9 DS Temp 8: (-)18.9 DHT Temp: 19,2 DHT Hum: 41,7"

Chyba na początek wyłączę pomiar DHT22. Pamiętam, że w przypadku awarii (odpięcia ), czujnika DHT11 cały program się zatrzymywał.
maximus_kr
Posty: 4
Rejestracja: 02 lip 2017, 20:57

Re: Wielkość stosów Atmega1284P

Post autor: maximus_kr » 04 lip 2017, 10:54

Niestety DHT22 to nie to. No to za komentowałem w każdym Case linie, które wywołują czujnik i w każdym Case mam Print'a z nazwą wykonywanej czynności, jak teraz się zawiesi to klops.
Przy okazji zrobiłem sprawdzanie, czy serwer jest włączony - zamiast wysyłać AT, wysyłam
  1.    Ciag1 = "AT+PING=" + Chr(34) + Domoticz_ip + Chr(34)
  2.    Print Ciag1
jak jest OK to jest wysyłane, jak ERROR, to wyjście.
maximus_kr
Posty: 4
Rejestracja: 02 lip 2017, 20:57

Re: Wielkość stosów Atmega1284P

Post autor: maximus_kr » 04 lip 2017, 16:01

Timeout 3000 mam w Serial0charmatch.

Niestety głównym podejrzanym jest ESP8266, zapuszczę jeszcze na noc płytkę z odłączonym ESP - dane pójdą w kosmos. Ciekawe, czy wtedy też się powiesi.

W nocy "wytrzymał" od 00:30 do 04:37 - ostatni wpis w Domoticz jest o tej godzinie. Teraz wytrzymał 1,5 godziny.
Może faktycznie ESP coś czasem przysyła, może źle robię, że to ignoruję.
Może to problem w konfiguracji ESP ? Ja po zalogowaniu daję:
  1. Print "AT+CWMODE=1"                                         ' ustawienie trybu - tryb stacji
  2. Print "AT+CIFSR"  ' pobranie adresu
  3.  
ODPOWIEDZ