RTV forum PL | NewsGroups PL

Jak wyzerować pamięć RAM w ATtiny2313 przy użyciu avr-gcc po resecie?

[avr] zerowanie ram-u

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wyzerować pamięć RAM w ATtiny2313 przy użyciu avr-gcc po resecie?

pv
Guest

Wed Jan 24, 2007 6:22 pm   



Czy jest jakaś funkcja w avr-gcc do wyzerowania pamięci
ram po resecie ?
W Franklin C 8051 widziałem coś takiego:

CLR A
MOV R0, #7F
002C:
MOV @R0, A
DJNZ R0, 002C

Jak zrobić coś takiego na ram-ie AVR (attiny2313) w avr-gcc ?
W dokumentacji attiny znalazłem tylko informację o automatycznym
ustawianiu początkowych wartości do I/O registers po resecie.
Przeglądałem avr-libc-user-manual, ale nic nie znalazłem.

Dziękuję. Paweł

T.M.F.
Guest

Wed Jan 24, 2007 6:35 pm   



Quote:
Jak zrobić coś takiego na ram-ie AVR (attiny2313) w avr-gcc ?
W dokumentacji attiny znalazłem tylko informację o automatycznym
ustawianiu początkowych wartości do I/O registers po resecie.
Przeglądałem avr-libc-user-manual, ale nic nie znalazłem.

Napisz lepiej co chcesz osiagnac, latwiej bedzie cos doradzic.
Zawsze mozesz myknac wlasna sekcje .init w ktorej bedziesz zerowal SRAM
po starcie programu. Albo ustawic pointer na poczatek SRAM i za pomoca
memcpy wyzerowac, z tym, ze na bank wykrzaczysz w ten sposob program.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

pv
Guest

Wed Jan 24, 2007 6:56 pm   



Quote:
Jak zrobić coś takiego na ram-ie AVR (attiny2313) w avr-gcc ?
W dokumentacji attiny znalazłem tylko informację o automatycznym
ustawianiu początkowych wartości do I/O registers po resecie.
Przeglądałem avr-libc-user-manual, ale nic nie znalazłem.

Napisz lepiej co chcesz osiagnac, latwiej bedzie cos doradzic.
Zawsze mozesz myknac wlasna sekcje .init w ktorej bedziesz zerowal SRAM
po starcie programu. Albo ustawic pointer na poczatek SRAM i za pomoca
memcpy wyzerowac, z tym, ze na bank wykrzaczysz w ten sposob program.

Chcę po prostu wyzerować wszystkie zmienne.
Nie chcę pisać w main, na początku:

zmienna1 = 0
zmienna2 = 0
itd.

Jeśli zmiennych jest np. 50 to tracę niepotrzebnie pamięć programu
(chyba przynajmniej ze 100 bajtów), żeby je na początku (po resecie)
zainicjować (wyzerować).

T.M.F.
Guest

Wed Jan 24, 2007 7:11 pm   



Quote:
Chcę po prostu wyzerować wszystkie zmienne.
Nie chcę pisać w main, na początku:

zmienna1 = 0
zmienna2 = 0
itd.

Jeśli zmiennych jest np. 50 to tracę niepotrzebnie pamięć programu
(chyba przynajmniej ze 100 bajtów), żeby je na początku (po resecie)
zainicjować (wyzerować).

Niekoniecznie, moze kompilator to sam zoptymalizuje.
Jesli jestes pewien, ze zmienne sa umieszczone kolejno w pamieci to
najprosciej ustawic wskaznik na pierwsza z nich i za pomoca memset
wpisac 0 w obszar pamieci zajmujacy tyle ile twoje zmienne. IMHO to
ryzykowne, chyba, ze to ma byc tablica.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

BartekK
Guest

Wed Jan 24, 2007 7:18 pm   



pv napisał(a):
Quote:
Jak zrobić coś takiego na ram-ie AVR (attiny2313) w avr-gcc ?
Chcę po prostu wyzerować wszystkie zmienne.
Jeśli zmiennych jest np. 50 to tracę niepotrzebnie pamięć programu
(chyba przynajmniej ze 100 bajtów), żeby je na początku (po resecie)
zainicjować (wyzerować).
Zobacz w kod wynikowy asm kompilacji, zauważ że na początku wcale nie ma

zerowania po kolei wszystkich komórek na zmienne (przeważnie, zalezy
jaka optymalizacja i co jest dalej). Jesli kompilator znajduje najpierw
podstawianie czegos pod dana zmienna, nim znajdzie jakiekolwiek jej
uzycie - to nie zeruje/inicjuje jej, bo wie ze zostanie wypelniona
wartoscia (np obliczona w trakcie dzialania programu). Jesli masz
zmienna ktora "od razu" jest do czegos pobierana jako parametr - to jest
zerowana.

--
| Bartlomiej Kuzniewski
| sibi@drut.org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338173

pv
Guest

Thu Jan 25, 2007 12:28 am   



Zrobiłem eksperyment - jednak zeruje.
Utworzyłem 13 zmiennych unsigned char
(w pamięci przyporządkował to: 0x60 - 0x6C)
i kasuje (zeruje) te 13 zmiennych na początku:

CLR R1
...
...
ST X+,R1 Store indirect and postincrement
CPI R26,0x6D Compare with immediate
CPC R27,R17 Compare with carry
BRNE PC-0x03 Branch if not equal

Virus_7
Guest

Thu Jan 25, 2007 12:54 am   



pv napisał(a):
Quote:
Czy jest jakaś funkcja w avr-gcc do wyzerowania pamięci ram po resecie?

A jest jakiś sposób, żeby tej pamięci nie zerował? W BASCOMie niby
jest... :P

--
__ ___ * Pozdrawiam * ____
\ \ / (_)_ _ _ _ ___ |__ | mailto://rot13.ivehf_7@b2.cy/
\ V /| | '_| || (_-< ___ / / http://www.b3d.pl/
\_/ |_|_| \_,_/__/|___|/_/ gg://2812776/

Adam Dybkowski
Guest

Thu Jan 25, 2007 2:02 am   



pv napisał(a):

Quote:
Chcę po prostu wyzerować wszystkie zmienne.
Nie chcę pisać w main, na początku:

zmienna1 = 0
zmienna2 = 0
itd.

Biblioteka standardowa dołączana do każdego programu kompilowanego w
avr-gcc automatycznie zeruje całą sekcję zmiennych (.bss) przed skokiem
do funkcji main. Jest to opisane w dokumentacji.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

J.F.
Guest

Thu Jan 25, 2007 11:33 am   



On Wed, 24 Jan 2007 18:22:13 +0100, pv wrote:
Quote:
Czy jest jakaś funkcja w avr-gcc do wyzerowania pamięci
ram po resecie ?

Hm, standard C niby zaklada ze wszystkie zmienne statyczne
beda wyzerowane, wiec moze robi .. ale w praktyce to po co ci to ?

Tym co naprawde musza byc wyzerowane nadaj jawny inicjator,
reszta nie powinna ci przeszkadzac.

J.

T.M.F.
Guest

Thu Jan 25, 2007 12:22 pm   



Quote:
Hm, standard C niby zaklada ze wszystkie zmienne statyczne
beda wyzerowane, wiec moze robi .. ale w praktyce to po co ci to ?

Wydaje mi sie, ze w standardzie jezyka nie jest zagwarantowane zerowanie
zmiennych statycznych niezainicjowanych, np.
static int zmienna;
wcale nie musi byc zainicjowana na 0. AVR-gcc akurat tak robi, ale
bazowanie na tym chyba nie jest dobrym pomyslem.



--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

J.F.
Guest

Thu Jan 25, 2007 1:09 pm   



On Thu, 25 Jan 2007 12:22:07 +0100, T.M.F. wrote:
Quote:
Hm, standard C niby zaklada ze wszystkie zmienne statyczne
beda wyzerowane, wiec moze robi .. ale w praktyce to po co ci to ?

Wydaje mi sie, ze w standardzie jezyka nie jest zagwarantowane zerowanie
zmiennych statycznych niezainicjowanych, np.
static int zmienna;
wcale nie musi byc zainicjowana na 0

Jesli mnie pamiec nie myli to wlasnie musi, tzn standard tak wymaga.
Lekka glupota, ale coz ..


J.

T.M.F.
Guest

Thu Jan 25, 2007 4:37 pm   



Quote:
wcale nie musi byc zainicjowana na 0

Jesli mnie pamiec nie myli to wlasnie musi, tzn standard tak wymaga.
Lekka glupota, ale coz ..

Chyba istotnie masz racje.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

pv
Guest

Thu Jan 25, 2007 6:09 pm   



Dziękuję za odpowiedzi

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wyzerować pamięć RAM w ATtiny2313 przy użyciu avr-gcc po resecie?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map