AVR - struktura v PROGMEM

Jaroslav Buchta jaroslav.buchta@gmail.com
Středa Listopad 11 06:54:08 CET 2009


Jo sorry, myslel jsem, ze se nic jinego, nez AVR-GCC nepouziva ;-)
Jen me to trosku prekvapilo, uz jsem s tim dlouho nic nedelal a povazoval
jsem to za automaticke. No nakonec jsem dal tabulku do SRAM, protoze jde jen
o nejaky pokus a pameti je dost. Jen me prekvapilo, ze prekladac to v pohode
prelozil blbe... Mimochodem, jde o tento kod (cast):

typedef struct _OUTSEQ {		
	BYTE pb;
	BYTE pc;
	BYTE pd;
} OUTSEQ;



#define MASKSEQ_B  0x06
#define MASKSEQ_C  0x3f
#define MASKSEQ_D  0xfc


const OUTSEQ OutSeq[] = {		// tady byl attribut PROGMEM
	{0x00, 0x00, 0x04},
	{0x00, 0x00, 0x08},
	{0x00, 0x00, 0x10},
	{0x00, 0x00, 0x20},
	{0x00, 0x00, 0x40},
	{0x00, 0x00, 0x80}
};


volatile WORD	ticks1ms=0;
volatile BYTE 	ticksIlv=0;

volatile BYTE	tim10ms_1 = 0;
volatile BYTE 	timIdxSeq = 0;
ISR(TIMER1_CAPT_vect)
{
	GID;
	const OUTSEQ  *ps  = &OutSeq[timIdxSeq];
	PORTB = (PORTB & ~MASKSEQ_B) | ps->pb;
	PORTC = (PORTC & ~MASKSEQ_C) | ps->pc;
	PORTD = (PORTD & ~MASKSEQ_D) | ps->pd;

	if (++timIdxSeq >= sizeof(OutSeq)/sizeof(OutSeq[0])) timIdxSeq = 0;

	ticks1ms++;
	if (ticksIlv-- == 0)
	{	// low precision timming counters 
		ticksIlv = 9;
		if (tim10ms_1 != 0) tim10ms_1--;
	}
	if (CommRxTimer != 0) CommRxTimer--;	// serial communication Rx
timer
}

... 
-----Original Message-----
From: hw-list-bounces@list.hw.cz [mailto:hw-list-bounces@list.hw.cz] On
Behalf Of Jan Waclawek
Sent: Tuesday, November 10, 2009 11:52 PM
To: HW-news
Subject: Re: AVR - struktura v PROGMEM


On Tue, 10 Nov 2009 22:32:10 +0100
"Jaroslav Buchta" <jaroslav.buchta@gmail.com> wrote:

> Zdravim, po roce jsem se dostal k praci s ATMEGA8 a hned me na hodku 
> zabavila banalni chyba - pole struktur v PROGMEM a jak se k tomu 
> dostat - asi jen pres funkce cteni BYTE, WORD... specialnimi funkcemi, 
> ze?

Mno, mohli ste si dat namahu a napisat, ze pouzivate avr-gcc. Niektore ine
prekladace  pre AVR toto ovladaju nativne.

Nieco ako pgm_read_byte(addr) apod.
Prototypy su v <avr/pgmspace.h>, dokumentacia v ... hmmm.... dokumentacii.

> Neco jako
> pstruct->x stale nejde, ze?

Nechapem, preco prave takto, to je minimalne taky isty vopruz ako cez tie
funkcie. Ale pracuje sa na "named data space", co je riesenie. Odhadovany
casovy horizont je asi dva roky; na avrfreaks.net si mozete dohladat vlakno
kde mi na moje otazky v tomto smere odpovedal momentalny veduci vyvojar
projektu avr-gcc a spol.(EW).


> V pohode si to cetlo ze SRAM na adrese ve FLASH
> a nejak jsem se divil, ze to nefunguje - no pak jsem se podival, co 
> dela instrukce LD a ze potrebuju LPM a bylo jasno. Jenze zadny warning 
> pri prekladu, kupodivu.

Ak rozumiete logike sections v gcc a spol., urcite chapete aj to, preco nie
je ziadny warning.

JW
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list



More information about the Hw-list mailing list