Jak optymalnie ustawić tryb pamięci dla zmiennych w xdata w AT89s8252 w Keilu?

zmienne w pamieci xdata 8051





Poprzedni Następny
Wiadomość
Spis treści
From: "Daniel Kamiński" <dkamin_at_nospam_o2.pl>
Subject: zmienne w pamieci xdata 8051
Date: Tue, 24 Sep 2002 12:04:29 +0200


Mam pytanko jezeli zapisze zmienna tak:
unsigned char xdata TxBuf[256];
to czy ona domysłnie bedzie umieszczana we wewnętrznej czy zewnętrznej
pamięci uC.

Wyczytalem gdzieś ze bez uzycia zewnętrznego ramu i romu mozna uzywać tylko
pamięci data i code tak ( #pragma small) ? Ale wyczytałm także że tryb ten
jest niebardzo dla uzywania w takim programie tablic i struktur.

Jak tryb pamięci ustawić dla AT89s8252 ( 8kB ROM, 256 RAM) aby Keil
optymalnie mi kompilował program w którym są użyte niewielkie strujtury i
tablice?





Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: zmienne w pamieci xdata 8051
Date: Tue, 24 Sep 2002 12:46:08 +0200


Użytkownik "Daniel Kamiński" <dkamin_at_nospam_o2.pl> napisał w wiadomości
news:ampdbb$1oj$1_at_nospam_korweta.task.gda.pl...
Mam pytanko jezeli zapisze zmienna tak:
unsigned char xdata TxBuf[256];
to czy ona domysłnie bedzie umieszczana we wewnętrznej czy zewnętrznej
pamięci uC.

Jawnie zażądałeś umieszczenia zmiennej w XDATA

Wyczytalem gdzieś ze bez uzycia zewnętrznego ramu i romu mozna uzywać
tylko
pamięci data i code tak ( #pragma small) ? Ale wyczytałm także że tryb ten
jest niebardzo dla uzywania w takim programie tablic i struktur.

W modelach compact i large zmienne są domyślnie umieszczane w zewnętrznej
pamięci danych XDATA (tryby różnią się sposobem adresowania). Jeżeli mimo
to chcesz umieścić jakąś zmienną w wewn. pamieci danych to musisz tego
jawnie zażądać:
char data aqq1; // tylko w pierwszych 128 bajtach wewn. RAMu
char idata aqq2; // (indirect - dostęp przez _at_nospam_R0) - w całym obszarze 256
bajtow wewn. RAMu
Zajmujesz (deficytową) wewn. pamięć danych, ale znacznie zyskujesz na czasie
dostępu do tych zmiennych.

No i oczywiście wszelkie stałe (skalarne, tablice, struktury...) powinny
wylądowac jawnie w pamięci programu, np:
unsigned char code stala = 0x33;

Model small jak najbardziej nadaje się do stosowania tablic - tyle, że
niewielkich. ;-) Zwłaszcza, że koszt odwołania do elementu takiej tablicy
przez _at_nospam_R0 jest znacznie mniejszy niż do xdata przez DPTR.


Jak tryb pamięci ustawić dla AT89s8252 ( 8kB ROM, 256 RAM) aby Keil
optymalnie mi kompilował program w którym są użyte niewielkie strujtury i
tablice?
Masz podłączoną zewnętrzną pamięć danych (XDATA), dostępną prze MOVX? Jeśli
nie, to nie może być mowy o modelach compact i large.

Wszystko to o co pytasz jest ładnie opisane w C51_primer.

MDz