-
Data: 2012-07-30 10:45:44
Temat: Re: wskaźniki do flash w WinAVR
Od: max441 <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2012-07-27 11:18, Artur M. Piwko pisze:
> In the darkest hour on Fri, 27 Jul 2012 07:45:33 +0200,
> max441 <m...@w...pl> screamed:
>>> 2. Czy tab powinna mieć dwie deklaracje umieszczające łańcuch we Flash? czy albo
używa się prog_char czy albo PROGMEM?
>>
>> Można tak:
>> prog_char tab[] = {"inny tekst"};
>> albo tak:
>> char PROGMEM tab[] = {"inny tekst"};
>>
>
> Nie można ani tak ani tak. W GCC atrybuty dotyczą tylko elementu, przy
> którym występują. Dzięki powyższym deklaracjom umieścisz tab w program
> space, ale "inny tekst" nadal będzie w data space. Trzeba to zrobić
> dwuetapowo:
>
> char string[] PROGMEM = "inny tekst";
> PGM_P tab[] PROGMEM = { string };
Bardzo ciekawe, a niby dlaczego przytoczone przeze mnie przykłady mają
umieszczać "inny tekst" w data space a przytoczone przez kolegę:
char string[] PROGMEM = "inny tekst";
już nie, skoro to jest dokładnie to samo co moje:
prog_char tab[] = {"inny tekst"};
lub
char PROGMEM tab[] = {"inny tekst"};
Nie rozumiem po co dodatkowo tworzyć jednoelementową tablicę wskaźników
do program space, skoro już takim wskaźnikiem jest samo string. Czyli w
przytoczonym przez kolegę przykładzie tab[0]=string i możemy skopiować
tekst do zmiennej w data space na 2 sposoby:
char buffer[20];
strcpy_P(buffer, (PGM_P)pgm_read_word(&(tab[0]))); //lub zamiast
&(tab[0]) w tym przypadku można użyć samo tab
lub dużo prościej bez używania tab
char buffer[20];
strcpy_P(buffer, string);
Przytoczony przez kolegę przykład ma sens jeśli chcemy zadeklarować
tablicę wskaźników do kilku stringów w program space. Wtedy taka
konstrukcja:
char *string_table[] PROGMEM =
{
"String 1",
"String 2",
"String 3",
"String 4",
"String 5"
};
faktycznie umieści "String 1", "String 2" itd. w data space i w tym
przypadku trzeba zrobić to dwuetapowo:
char string_1[] PROGMEM = "String 1";
char string_2[] PROGMEM = "String 2";
char string_3[] PROGMEM = "String 3";
char string_4[] PROGMEM = "String 4";
char string_5[] PROGMEM = "String 5";
PGM_P string_table[] PROGMEM =
{
string_1,
string_2,
string_3,
string_4,
string_5
};
Jednak pytanie w wątku dotyczyło umieszczania jednego stringa w program
space.
Następne wpisy z tego wątku
- 31.07.12 09:04 Artur M. Piwko
Najnowsze wątki z tej grupy
- "Teleportacja" polskich statków na pd. Bałtyku - rosyjska zabawa w zakłócanie GPS, Galileo, Beidou i GLONASS
- W trakcie porwania prez. Maduro wojsko USONA użyło tajnej broni masowego rażenia: Discombobulator
- antena gsm - kabel - antena gsm
- PID - jeszcze raz
- Zlacze w mikrofonie z lat 80-tych
- Żywica żółknie od UV i wody :(
- Zawory termostatyczne
- Schemat automatyki
- Teoretyczne zagadnienie - ogrzewanie budynku
- Zagadka radiowa
- Prostownik
- Nowy akumulator Donut Lab
- Pilot do zamka/bramy
- Jaka myjka ultradźwiękowa?
- Retro organizer ale współcześnie
Najnowsze wątki
- 2026-01-29 KSeF - 13 wątpliwości
- 2026-01-29 A ja się pochwalę
- 2026-01-29 Warszawa => Mid/Senior IT Recruiter <=
- 2026-01-29 Warszawa => Senior Java Developer <=
- 2026-01-29 Warszawa => IT Recruiter <=
- 2026-01-28 Degradacja
- 2026-01-28 Wysoki Sąd poinstruował czego unikać wyzywając Owsiaka "Równiejszego"
- 2026-01-28 Białystok => Solution Architect (Workday) - Legal Systems <=
- 2026-01-28 Białystok => Preseles Inżynier (background baz danych) <=
- 2026-01-28 Wrocław => Konsultant wdrożeniowy ERP <=
- 2026-01-28 Łódź => Microsoft Engineer <=
- 2026-01-28 Białystok => Tester manualny <=
- 2026-01-27 Tradycja ciągania posłów po sądach za wystąpienia w Sejmie będzie kontynuowana [Lepper 2]
- 2026-01-27 Pierwszy raz sprzedano więcej samochodów zeeletryfikowanych niż ice
- 2026-01-27 Elektryczny Kałasznikow




Jak kupić pierwsze mieszkanie? Eksperci podpowiadają