[WinAVR] dostęp do struktury w pamięci programu

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

[WinAVR] dostęp do struktury w pamięci programu

Post autor: gwozdex » 17 paź 2011, 18:15

Witam!
Mam pewien problem. Mianowicie, zadeklarowałem sobie strukturę w pamięci programu oraz zainicjowałem ją:

Kod: Zaznacz cały

typedef struct stringg
{
	uint8_t screen_cnt;		// ilość ekranów 
	char napis[];			// tekst do wyświetlania 
}string_struct PROGMEM;

string_struct strr = {1, "avc"};
oraz procedurę piszącą na moim wyświetlaczu:

Kod: Zaznacz cały

void print_str(prog_char* str)
{
	int n=0;
	char znak;
	while (0 != (znak= pgm_read_byte(str++)) )
	{
		chose_disp(n/4);
		chose_digit(n%4);
		send_data(znak);
		n++;
	}
}
Problem w tym że nie potrafię się dostać do tej struktury... próbowałem na różne sposoby, korzystając z operatora "&" oraz makra pgr_read_byte i nic.

Odwołanie się w sposób jak poniżej:

Kod: Zaznacz cały

print_str(strr.napis);
skutkuje błędem: "main.c:42: error: request for member `napis' in something not a structure or union", natomiast odwołanie takie:

Kod: Zaznacz cały

print_str(strr[0].napis);
przynosi pożądany efekt tylko nie wiem dlaczego.
Problem w tym ze docelowo chcę zadeklarować takie coś:

Kod: Zaznacz cały

string_struct strr[5] = 

{
	{1,"gitara1"},
	{1,"gitara2"},
	{1,"gitara3"},
	{1,"gitara4"},
	{1,"gitara5"},
};
i jak do tego się odwołać to już nie mam pojęcia...
Za okazaną- dla początkującego w GCC- pomoc serdeczne dzięki...
gwozdex.

ODPOWIEDZ