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