RTV forum PL | NewsGroups PL

Jak zachować wartość komórek RAM przy starcie programu w CodeVision AVR?

CVAVR - jak nie inicjalizować wartości zm iennej

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zachować wartość komórek RAM przy starcie programu w CodeVision AVR?

Goto page Previous  1, 2

Adam Dybkowski
Guest

Wed Jan 28, 2009 8:00 pm   



T.M.F. pisze:

Quote:
Jeżeli zmienna wpadnie do sekcji .bss - to zostanie automatycznie
wyzerowana. Jeżeli potrzeba zmiennej, która nie będzie inicjowana,
trzeba skorzystać z dobrodziejstwa sekcji ".noinit".

W takim przykladzie:
void main()
{
int a;

if(a==costam) DoSomething();
}

Zmienna a nie bedzie inicjalizowana. Poniewaz za kazdym razem trafia w
to samo miejsce programu jej wartosc bedzie zachowana pomiedzy
uruchomieniami. Oczywiscie kompilator wyrzuci ostrzezenie, ze uzywamy
niezainicjalizowanej zmiennej, ale w koncu o to nam chodzi.

Zmienna "a" jest w powyższym przykładzie lokalna i oczywiście trafi na
stos lub zostanie upchnięta w rejestrze. W twoim przykładzie tak się
składa, że zawsze trafi w to samo miejsce (bo jest w funkcji main -
wywoływanej zawsze tak samo i z tego samego miejsca) ale gdyby była w
innej funkcji to już nie będzie tak różowo.

--
Adam Dybkowski
http://dybkowski.net/

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

EM
Guest

Thu Jan 29, 2009 12:12 pm   



Witam
Zgodnie z sugestiami zastosowałem coś takiego:

void main(void)
{
unsigned char short_off_indicator[2];


....

if (short_off_indicator[0] == ~ short_off_indicator[1]) {short_off())
else long_off()


....

short_off_indicator[0] = next_mode;
short_off_indicator[1] = ~ next_mode;

....
}




Ogólnie działa dobrze :)

Dziękuję za szybką i konkretną pomoc
--
Pozdrawiam
EM

jacek
Guest

Fri Jan 30, 2009 8:50 am   



EM pisze:
Quote:
Witam
Nie jestem biegły w programowaniu i mam taki problem odnośnie AVRka
programowanego za pomocą CodeVision AVR.

Otóż potrzebuję na początku programu sprawdzić wartość 2 komórek pamięci
RAM. Zakładam, że komórki te mają wartość taka jak poprzednio, jeśli
napięcie zasilania nie spadło poniżej pewnego poziomu. Podobnie robię w
PICach i to się dobrze sprawdza.


Umiem zmusić program do umieszczenia danych w konkretnym obszarze, robi
się dodając adres po nazwie zmiennej, np.
char data @0x60;
jednak z tego co widzę, to nawet pomimo wyłączonej opcji: clear global
variables at program startup w konfiguracji projektu - wygląda na to, że
te zmienne są zerowane.


To co mi przychodzi na myśl, to użyć jakiejś wstawki assemblerowej,
gdzie będę kopiował wartość z komórki RAM o konkretnym adresie do
jakiejś zmiennej w C.
Potrzebuję tak przekopiować dwie komórki, które mają nie być zerowane
przy inicjalizacji.

Proszę o pomoc
--
Pozdrawiam
EM
W przypadku PICa i kompilatora hitech słuzy do tego modyfikator

persistent umieszczony w deklaracji zmiennej; może u Ciebie podobnie będzie

Pozdr
jp


--
www.flowservice.pl

Adam Dybkowski
Guest

Sat Jan 31, 2009 12:36 am   



EM pisze:

Quote:
Zgodnie z sugestiami zastosowałem coś takiego:
void main(void)
{
unsigned char short_off_indicator[2];
[...]
Ogólnie działa dobrze Smile

Obyś się nie zdziwił, gdy po zmianie opcji optymalizatora wyjdzie co
innego, niż obecnie. Zdecydowanie polecam jeszcze doczytanie o sekcji
".noinit", chociażby w dokumentacji avr-libc.

--
Adam Dybkowski
http://dybkowski.net/

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

T.M.F.
Guest

Sat Jan 31, 2009 10:35 am   



Adam Dybkowski pisze:
Quote:
EM pisze:

Zgodnie z sugestiami zastosowałem coś takiego:
void main(void)
{
unsigned char short_off_indicator[2];
[...]
Ogólnie działa dobrze :)

Obyś się nie zdziwił, gdy po zmianie opcji optymalizatora wyjdzie co
innego, niż obecnie. Zdecydowanie polecam jeszcze doczytanie o sekcji
".noinit", chociażby w dokumentacji avr-libc.


Coz moze wyjsc. Zeby to sie nie zoptymalizowalo w jakis dziwny sposob
wystarczy dodac volatile.

Goto page Previous  1, 2

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zachować wartość komórek RAM przy starcie programu w CodeVision AVR?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map