Portál AbcLinuxu, 8. května 2025 06:57

Dotaz: tabulka na misto v pameti

rofl.rofl avatar 15.8.2011 21:04 rofl.rofl | skóre: 10
tabulka na misto v pameti
Přečteno: 211×
Odpovědět | Admin
Zdravím, mam začátečnický dotaz, týká se C pro procesory AVR. Mám tabulku viz. kód, přeložím program a ona se zapíše na nějaké paměťové místo do flash pameti AVR.

Teď za 1) jak zjistím adresu, na kterém místě v paměťovém prostoru ta tabulka začíná?

2) můžu nějak zajistit, aby se zapsala napevno na paměťové místo, řekneme třeba 0x2000 a dál?

Děkuji.
const uint8_t sinus256[] PROGMEM=      //16 bit square wave
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
};
Mozek je aparát, jehož pomocí si myslíme, že myslíme.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.8.2011 22:30 chrono
Rozbalit Rozbalit vše Re: tabulka na misto v pameti
Odpovědět | | Sbalit | Link | Blokovat | Admin
1) &sinus256 (alebo myslíš ako to zistíš priamo z toho skompilovaného súboru?)

2) teoreticky je možné pohrať sa s linkerom tak, aby údaje dával na konkrétnu adresu (minimálne s binutils sa to urobiť dá a ak má zmysel pri AVR niečo také robiť, určite už niekto potrebný linker script urobil)
16.8.2011 09:07 Ales
Rozbalit Rozbalit vše Re: tabulka na misto v pameti
Odpovědět | | Sbalit | Link | Blokovat | Admin
1) &sinus256[0] = adresa prvniho prvku pole

2)Ve zdrojaku si urcim symbolicky nazev pro umisteni v pameti: int vari __attribute__((section(".hexfilesignature")));

Potom linkovat s parametrem: -Wl,--section-start,.hexfilesignature=0x2000.

Takto dostanu promennou "vari" na adresu 0x2000.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.