Re: [HWnews] Došla RAM

Martin Krecmer krecmerhw@adash.cz
Pátek Duben 9 08:05:42 CEST 2004


> Žádám o rychlou radu.
>
> Nemám moc zkušeností s C, jde o následující problém :
> Mám AT89C52 (k*e*i*l*), zatím jsem všechny proměnné deklaroval
> jako " data char ..." apod. Dostal jsem se na hranici 128 ramu (DATA: 128).
> 8052 má mít 256.
>>Mozna by jste si to v tom (k*e*i*l*u) mel zapnout jako device 89C52.
>>Pak asi pochopi ze muze jit az do DATA: 256 .

Pametove prostory jsou (jak vyplyva z koncepce jadra 51) 4:
 DATA - pamet primo pristupna 0-128
IDATA - pamet neprimo pristupna - pres ukazatel - 0-256 pro 8052
XDATA - pamet externi pristupna pres MOVX 0-64kB a to strankove 8b adresou  nebo
celou 16b adresou
CODE - pamet programu - pouze cteni, pristup pres MOVC 0-64kB

Pokud nemate k 8052 pripojenu XRAM (nebo neni implementovana na cipu),
muzete pouzit pouze pamet typu DATA a IDATA.

Kompilatoru musite nastavit zakladni model SMALL ,tj. #pragma SMALL - to
znamena,
ze promenne bez udani typu pameti budou v oblasti DATA.

Potom pri definici promenne muzete napsat napr:

char c;    // promenna v default pameti, tj DATA
char data c1;    // promenna bude vzdy v pameti DATA nezavisle na modelu
char idata str[16];    // promenna bude vzdy v pameti IDATA
bit x;        // bit bude vzdy v pameti DATA nebot jinde bitove mapovana oblast
neni

Pamet DATA a IDATA se prekryva dolnimi 128 byty. Hornich 128 bytu pak pro primy
pristup jsou registry,
pro pristuyp neprimy pak dalsich 128B IDATA.
V prostredi je skutecne potreba sdelit linkeru, ze existuje pamet dat 256bytu:
RAMSIZE(256).
Pokud pracujete v MicroVision pak staci zvolit spravny procesor.
Jaxem uvedl v prikladu IDATA je nejlepsi pouzivat pro pole, protoze do pole se
vzdy pristupuje neprimo = pres index.
Jinak je to jedno, akorat vysledny kod bude o neco delsi.

Pri vyuzivani pameti je treba pamatovat na zasobnik (STACK), ktery se vzdy
umisti na uplny konec pameti IDATA.

Doufam, ze vam to k necemu bude ...
M.Krecmer





Další informace o konferenci Hw-list