Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 01:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 16 paź 2018, o 19:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Cześć chciałbym zapytać , bo trochę mam problem ze stosem dlatego ,że za dużo mam zmiennych globalnych i program zajmuje mi za dużo pamięci .
Przedstawię kod programu:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zmienna licz_cyfral określa odczytaną wartość z EPROMA następnie w funkcji test() jest rozdzielana przy pomocy zmiennych niestety globalnych uint8_t cy1,cy2,cy3,cy4,cy0;
zmienne określają liczbę dziesiątek , setek itd .
Odczyt zmiennej wygląda tak w momencie załączenia zasilania z wciśniętym przyciskiem miga raz dioda żółta rozdziela ona odczytywaną liczbę , następnie jeśli jest wartosią 0 miga czerwona , jeśli jest dodatnia to miga zielona tyle razy jaka jest wartość , następnie znowu miga żółta i określa następną cyfę.
Chyba napisałem trochę chaotycznie , przedstawię to na przykładzie :
liczba 20471 kolejność migania diody:
- żółta
- zielona dwa razy "2"
- żółta
- czerwona bo jest "0"
- żółta
- zielona cztery razy "4"
- żółta
- zielona siedem razy "7"
- żółta
- zielona 1 raz "1"

Pytanie polega na tym jak zmienne uint8_t cy1,cy2,cy3,cy4,cy0; przerobić na lokalne bo wynik kompilacji jest taki i trochę zajmuje:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2018, o 20:55 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Można też tak uprościć nieco obliczenia i ilość zmiennych globalnych, które wykorzystujesz do przenoszenia informacji pomiędzy funkcjami:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

PS.
static EEMEM uint32_t liczym_w_eepromie jest 4 bajtową zmienną, a odczytujesz słowo 2 bajtowe. Zmieniłbym na uint16_t


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2018, o 21:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Dzięki za rozjaśnienie wrzucę do programu i poinformuje o wynikach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 paź 2018, o 09:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Bardzo dziękuję koledze Krauser , proszę o to wynik kompilacji:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Problemu ze stosem nie będzie program hula jak tralala, tochę przekombinowałem z tą funkcją rozdziel, bo po co faktycznie rozdzielać jak można zmienne raz określić.
A z tymi zmiennymi d jako wrzucanie argumentów do funkcji to pomysł mi chodził po głowie , ale kolega Krauser jest WIELKI DZIĘKI.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO