Portál AbcLinuxu, 7. května 2025 07:23

Dotaz: C tabulka

rofl.rofl avatar 15.8.2011 21:08 rofl.rofl | skóre: 10
C tabulka
Přečteno: 358×
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.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Luboš Doležel (Doli) avatar 15.8.2011 23:35 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C tabulka
Odpovědět | | Sbalit | Link | Blokovat | Admin
sinus256 se dá z hlediska C považovat také za ukazatel, takže sinus256 zároveň nese adresu toho pole...
Luboš Doležel (Doli) avatar 15.8.2011 23:36 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C tabulka
A co se zápisu týče, co takhle memcpy((void*) 0x2000, sinus256, sizeof(sinus256));
16.8.2011 08:37 benn
Rozbalit Rozbalit vše Re: C tabulka
Tady pozor. U AVR platí, že pokud je proměná vytvořena s atributem PROGMEM, tak nelze k ní přímo přistupovat. Takže například zápis nebude fungovat:
uint8_t val = sinus256[10];
K přístupu je pak nutné používat funkce z knihovny <avr/pgmspace.h>

Takže zápis se změní na:
// platí pro 8bitové pole a MCU s flashí do 64kB
uint8_t val = pgm_read_byte_near(&sinus256[10]);
// nebo 
uint8_t val = pgm_read_byte_near(sinus256 + 10);

Určit vlastní adresu by možná šlo vytvořením další sekce na konkrétní adrese. Ono PROGMEM je makrovaná funkce __attribute__((__progmem__)), kde __progmem__ je název sekce. Pro AVR procesory jsem nepotřeboval vytvářet nové sekce, takže zde už neporadím.

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.