AVR GCC, umiestnenie premennej na zadanu adresu

Pavel_t pavel_t@centrum.cz
Sobota Srpen 16 13:02:38 CEST 2008


> Jedine co chcem dosiahnut je to, ze ked pouzivam premenne v EEPROM, 
> napriklad
> char str_prog[] PROGMEM = "Retazec vo FLASH";
> tak aby v pripade zmeny retazca alebo pridani dalsich compiler 
> neprepisal to urcene miesto. Viem ze zapisat alebo citat mozem lubovolnu 
> adresu, ale to compileru nezabrani na tu adresu nieco umiestnit a to je 
> prave to co chcem osetrit.

GCC znam jen velmi povrchne, ale u kompileru a linkeru pro Zilog mohu 
nastavit adresni prostory a mohu v nich delat i urcite mezery do kterych 
potom neni umistovan program nebo data. Tim zamezim aby zde bylo neco 
alokovano a pristupuji k tomu pres pointery treba tak jak uz napsal 
Jakub Ladman:

> #define KEYB_REG 		( *((volatile unsigned int *) 0x1104) )
> 
> a = KEYB_REG;

Ma to ale tu nevyhodu, ze program musi pri 1. startu tuto pamet vyplnit 
cili mate tam ten retezec nakonec 2x. To by slo treba obejit tak ze 
retezce pridate az do vysledneho hex souboru ktery budete ve vyrobe palit.
Nektere kompilery/linkery maji moznost definovat urcite pamatove 
segmenty a jejich absolutni adresy, zkuste jestli toto nema AVR GCC 
(jestli jsem pochopil co napsal Wek tak bohuzel nema) a tyto retezce 
definovat v tomto segmentu misto v PROGMEM.
Pak pokud si dobre vzpominam tak snad Keil C51 mel u promenych moznost 
napsat _at adresa.

Pavel



Další informace o konferenci Hw-list