Zapis długiej liczby ze znakiem do EEPROM w '8252' - problem z operatorem >>

8051, Keil C i dlugie liczby





Poprzedni Następny
Wiadomość
Spis treści
From: "Artur Miller" <armi_at_nospam_poczta.onet.pl>
Subject: 8051, Keil C i dlugie liczby
Date: Wed, 18 Apr 2001 12:13:23 +0200


7 :)

Probuje zapisac dluga liczbe ze znakiem do eeproma w '8252. Robie to tak:

adres = (...);

for (i = 1; i <= 4; i++)
{
c = liczba & 0xFF;
zapisz_eeprom(adres, c);
adres++;
liczba = liczba >> 8;
}

Problem w tym, ze w czterech kolejnych komorkach eeproma znajduje sie ta
sama wartosc i jest to najmlodszy bajt zapisywanej liczby. Czy operator ">>"
dziala tylko w obrebie jednego bajtu ? Jesli tak, to jak zapisac dluga
liczbe do eeproma ?

_at_nospam_



Poprzedni Następny
Wiadomość
Spis treści
From: "peters" <peters_at_nospam_poczta.onet.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Wed, 18 Apr 2001 12:18:26 +0200


adres = (...);

for (i = 1; i <= 4; i++)
{
c = liczba & 0xFF;
zapisz_eeprom(adres, c);
adres++;
liczba = liczba >> 8;
}

Nie podoba mi sie: c = liczba & 0xFF. Uzyles typu char i long.
Zrob to inaczej. Wiesz co to sa unie? Zadeklaruj unie zmiennej long i
czterobajtowej tablicy char


--
pozdrawiam, peters
peters_at_nospam_poczta.onet.pl
http://peters.republika.pl (strona Petersa dla elektroników)






Poprzedni Następny
Wiadomość
Spis treści
From: "Artur Miller" <armi_at_nospam_poczta.onet.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Wed, 18 Apr 2001 12:27:21 +0200



Użytkownik "peters" <peters_at_nospam_poczta.onet.pl> napisał w wiadomości
news:9bjpvb$fdj$1_at_nospam_news.tpi.pl...
adres = (...);

for (i = 1; i <= 4; i++)
{
c = liczba & 0xFF;
zapisz_eeprom(adres, c);
adres++;
liczba = liczba >> 8;
}

Nie podoba mi sie: c = liczba & 0xFF. Uzyles typu char i long.
Zrob to inaczej. Wiesz co to sa unie?

Jeszcze nie wiem ale pewnie zaraz sie dowiem :) Ale nawet jak zrobie c =
liczba & 0xFFL; to tez nic z tego :(

_at_nospam_



Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anok_at_nospam_ceti.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Wed, 18 Apr 2001 12:34:01 +0200


Artur Miller napisał(a) w wiadomości: <9bjq5m$ghg$1_at_nospam_news.onet.pl>...

...
Jeszcze nie wiem ale pewnie zaraz sie dowiem :) Ale nawet jak zrobie c =
liczba & 0xFFL; to tez nic z tego :(


zrob "c" takiego typu jak "liczba" powiedzmy long
i "cc" typu char

c = liczba;
c &= 0xffL;

cc = c;

oczywiscie unie sa rozwazaniem eleganckim
ale ciekaw jestem czy to pomoze ???

Andrzej






Poprzedni Następny
Wiadomość
Spis treści
From: "Artur Miller" <armi_at_nospam_poczta.onet.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Wed, 18 Apr 2001 12:52:53 +0200



Użytkownik "Andy" <anok_at_nospam_ceti.pl> napisał w wiadomości
news:9bjqn2$ik4$1_at_nospam_news.tpi.pl...
Artur Miller napisał(a) w wiadomości: <9bjq5m$ghg$1_at_nospam_news.onet.pl>...

...
Jeszcze nie wiem ale pewnie zaraz sie dowiem :) Ale nawet jak zrobie c =
liczba & 0xFFL; to tez nic z tego :(

zrob "c" takiego typu jak "liczba" powiedzmy long
i "cc" typu char

c = liczba;
c &= 0xffL;

cc = c;

oczywiscie unie sa rozwazaniem eleganckim
ale ciekaw jestem czy to pomoze ???

Wyglada na to, ze pomoglo ... :D

_at_nospam_



Poprzedni Następny
Wiadomość
Spis treści
From: "peters" <peters_at_nospam_poczta.onet.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Wed, 18 Apr 2001 12:54:18 +0200


Wyglada na to, ze pomoglo ... :D

A nie mowilem, ze C jest trudnym jezykiem?! :))
Teraz zrob to uzywając unii Zastosowane przez Ciebie rozwiazanie jest
bardzo nieeleganckie i nieefektywne.

--
pozdrawiam, peters
peters_at_nospam_poczta.onet.pl
http://peters.republika.pl (strona Petersa dla elektroników)




Poprzedni Następny
Wiadomość
Spis treści
From: "Tomasz Gumny" <tgumny_at_nospam_idn.org.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Wed, 18 Apr 2001 13:04:27 +0200


oczywiscie unie sa rozwazaniem eleganckim
ale ciekaw jestem czy to pomoze ???

Wyglada na to, ze pomoglo ... :D


A nie masz zwyczaju sprawdzac jak kompilator przeklada niektore konstrukcje?
Mozna sie z tego sporo nauczyc, a przy okazji troche zoptymalizowac zapis. Tak
przy okazji: ja uzywam definicji:
union
{
unsigned int i;
struct { char highbyte, lowbyte; } s;
} x;
Oczywiscie mozna to zastosowac do dluzszych liczb niz int.
TG



Poprzedni Następny
Wiadomość
Spis treści
From: =?iso-8859-2?Q?Marek_Szyma=F1ski?= <maras_at_nospam_cso.com.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Fri, 20 Apr 2001 15:26:58 +0200


Tak
przy okazji: ja uzywam definicji:
union
{
unsigned int i;
struct { char highbyte, lowbyte; } s;
} x;
Oczywiscie mozna to zastosowac do dluzszych liczb niz int.

A można zrobić tak ???

union {
unsigned long liczba;
unsigned char bajty[4];
} u;

i odwoływać się:

u.liczba = 0; jak chcę mieć liczbę
lub
u.bajty[n] = 0; jak chcę mieć n-ty bajt liczby

????

Marek Szymański


Poprzedni Następny
Wiadomość
Spis treści
From: "Artur Miller" <armi_at_nospam_poczta.onet.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Fri, 20 Apr 2001 16:02:02 +0200



Użytkownik "Marek Szymański" <maras_at_nospam_cso.com.pl> napisał w wiadomości
news:9bpdhk$2hs$1_at_nospam_news.tpi.pl...

A można zrobić tak ???

union {
unsigned long liczba;
unsigned char bajty[4];
} u;

i odwoływać się:

u.liczba = 0; jak chcę mieć liczbę
lub
u.bajty[n] = 0; jak chcę mieć n-ty bajt liczby


Pewnie mozna bo i tak probowalem, ale jakos programik sie zwieszal i nie
mialem czasu dochodzic dlaczego ... zreszta nie jest to jakis krytyczny
moment w programie, zeby nie mialoby byc wolniej. A urzadzonko poszlo juz do
klienta ... po temacie, ale dzieki za odzew.

_at_nospam_




Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Wolcendorf <wolcendo_at_nospam_free.polbox.pl>
Subject: Re: 8051, Keil C i dlugie liczby
Date: Wed, 18 Apr 2001 16:58:00 +0200




Andy wrote:

Artur Miller napisał(a) w wiadomości: <9bjq5m$ghg$1_at_nospam_news.onet.pl>...

...
Jeszcze nie wiem ale pewnie zaraz sie dowiem :) Ale nawet jak zrobie c =
liczba & 0xFFL; to tez nic z tego :(

zrob "c" takiego typu jak "liczba" powiedzmy long
i "cc" typu char

c = liczba;
c &= 0xffL;

cc = c;

oczywiscie unie sa rozwazaniem eleganckim
ale ciekaw jestem czy to pomoze ???

A gdyby tak, a może by:

((unsigned char*)(&liczba))[i]
gdzie 'i' jest licznikiem pętli.

Tylko nie piszcie, ile to-to zajmuje i dlaczego operacje na wskaźnikach
są takie długie... ;-).




--
The yellow jester does not play,
But gently pulls the strings
And smiles, as the puppets dance
In... ( (C) McDonald-Sinfield )