RTV forum PL | NewsGroups PL

Jak zadeklarować zmienne globalne w AVR GCC, aby nie były zerowane przy startu?

AVR GCC zmienne globalne

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zadeklarować zmienne globalne w AVR GCC, aby nie były zerowane przy startu?

Paweł Kurzawa
Guest

Wed May 26, 2004 2:39 pm   



Pytanie z innej beczki,
Jak zadeklarowac zmienne globalne, ale zeby nie byly
zerowane, poniewaz na samym poczatku odtwarzam ich wartosci z eepromu ...

--

--
Best regards
K@pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------

Andy
Guest

Wed May 26, 2004 2:48 pm   



Użytkownik "Paweł Kurzawa" <groups@kpw.qs.pl> napisał w wiadomości news:c92dr8$q2a$1@nemesis.news.tpi.pl...
Quote:
Pytanie z innej beczki,
Jak zadeklarowac zmienne globalne, ale zeby nie byly
zerowane, poniewaz na samym poczatku odtwarzam ich wartosci z eepromu ...


ale odtwarzasz je zanim wywola sie main() ?

bo jesli odtwarzasz je z eeproma na poczatku maina to nic juz ich nie wyzeruje

poza tym zmienne niezainicjowane chyba nie sa zerowane
(sekcja .bss)


--
Andrzej

Paweł Kurzawa
Guest

Wed May 26, 2004 3:02 pm   



Quote:
ale odtwarzasz je zanim wywola sie main() ?
w main().


Quote:
bo jesli odtwarzasz je z eeproma na poczatku maina to nic juz ich nie
wyzeruje

wlasnie zalezy mi na tym zeby pominac automatyczne funkcje inicjowania
bo po co ma byc najpierw zerowana a potem odtwarzana przeze mnie ...
szkoda czasu i zbednego kodu...

Quote:
poza tym zmienne niezainicjowane chyba nie sa zerowane
(sekcja .bss)
static sa zawsze inicjowane (zerowane) na samym poczatku ...


a moze ponizsza deklaracja bedzie OK?

static u08 seek __attribute__ ((section (".noinit")));



--

--
Best regards
K@pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------

Jan Dubiec
Guest

Wed May 26, 2004 6:24 pm   



Paweł Kurzawa wrote:
Quote:
ale odtwarzasz je zanim wywola sie main() ?

w main().


bo jesli odtwarzasz je z eeproma na poczatku maina to nic juz ich nie

wyzeruje
wlasnie zalezy mi na tym zeby pominac automatyczne funkcje inicjowania
bo po co ma byc najpierw zerowana a potem odtwarzana przeze mnie ...
szkoda czasu i zbednego kodu...
IMO zupełnie niepotrzebnie tracisz czas na zabawę z tym problemem.

Zazwyczaj kod "startowy" aplikacji oprócz kilka innych rzeczy ma dwie
pętle - jedna kopiuje zawartość sekcji .data (czyli zmienne
zainicjalizowane) z Flasha/ROM w odpowiednie miejsce RAM-u (określone
adresami _data i _edata) a druga zeruje sekcję .bss (zmienne
zainicjalizowane) czyli kawałek RAM pomiędzy adresami _bss i _end. To
zerowanie w zasadzie nie jest potrzebne/wymagane, ale tak się przyjęło i
wielu koderów tak robi - bo korzystają z przykładów dostarczonych z
kompilatorem. Wink Co do czasu wykonania i bajtów to nie widzę problemu -
taka pętla zerująca to jest ze 20-30 bajtów kodu (dla adresów 32 bitowych)
i jest wykonywana tylko raz podczas startu urządzenia/aplikacji. Chyba dla
większości typowych sterowników nie będzie miało znaczenia czy aplikacja
startuje 5 czy też 6ms. Jeśli koniecznie chcesz uniknąć zerowania .bss to
po prostu zamiast kodu startowego z avr-libc wstaw swój własny.

Quote:
poza tym zmienne niezainicjowane chyba nie sa zerowane
(sekcja .bss)

static sa zawsze inicjowane (zerowane) na samym poczatku ...
Słówko kluczowe "static" w zasadzie ma niewiele wspólnego ze zmiennymi

globalnymi.

Regards,
/J.D.

Jurek Szczesiul
Guest

Wed May 26, 2004 8:18 pm   



Wed, 26 May 2004 18:02:57 +0200, na pl.misc.elektronika, Paweł Kurzawa
napisał(a):

Quote:
wlasnie zalezy mi na tym zeby pominac automatyczne funkcje inicjowania
bo po co ma byc najpierw zerowana a potem odtwarzana przeze mnie ...
szkoda czasu i zbednego kodu...


static u08 seek __attribute__ ((section (".noinit")));

Dobrze mówisz - właśnie atrybut noinit to robi
( chociaż static nie ma tu nic do rzeczy ).
Tylko w takim zastosowaniu to nie ma IMHO zupełnie
znaczenia - strata czasu jest praktycznie przy starcie
niezauważalna, a kod pętli i tak jest generowany.
Sekcja noinit przydaje się natomiast radykalnie gdy
chcesz zachować wartości zmiennych przy restarcie
po zadziałaniu watchdoga.

--
Pozdrowienia
Jurek Szczesiul

Paweł Kurzawa
Guest

Thu May 27, 2004 8:34 am   



Quote:
Dobrze mówisz - właśnie atrybut noinit to robi
( chociaż static nie ma tu nic do rzeczy ).
z tym static sie zagalopowalem ...


Quote:
Tylko w takim zastosowaniu to nie ma IMHO zupełnie
znaczenia - strata czasu jest praktycznie przy starcie
niezauważalna, a kod pętli i tak jest generowany.
Sekcja noinit przydaje się natomiast radykalnie gdy
chcesz zachować wartości zmiennych przy restarcie
po zadziałaniu watchdoga.
chyba sobie odpuszcze na tych noinit sie juz przejechalem

w bascomie ...

dzieki za podpowiedz ...


--

--
Best regards
K@pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zadeklarować zmienne globalne w AVR GCC, aby nie były zerowane przy startu?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map