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.

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 ----------------