Jak przechowywać tekst w pamięci programu z użyciem AVRGCC bez RAM?

avrgcc i tekst w pamieci programu





Poprzedni Następny
Wiadomość
Spis treści
From: "Grzegorz Kurczyk" <control_at_nospam_post.pl>
Subject: avrgcc i tekst w pamieci programu
Date: Sat, 1 Feb 2003 13:03:27 +0000 (UTC)


Witam.
Na wstepie przytaczam fragmencik programu:
--------------
void lcd_str(unsigned char s[])
{
char *c = s;
for (;;)
if (*c)
break;
else {
lcd_write_data(*c);
c++;
}
}

int main(void)
{
lcd_str("abcdefgh");
}
-----------------------
Program dziala prawidlowo, ale mam taki problem. Jak zmusić avrgcc aby
tekst przekazywany do procedury lcd_str byl tylko w pamieci programu.
Analizujac kod wynikowy tekst ten na poczatku (przed skokiem do main) jest
kopiowany z pamieci programu do pamieci RAM. Klopot w tym, ze tekstow mam
sporo, a sporo RAM-u potrzebuje do innych celow.

Z góry dziękuję
Grzegorz Kurczyk
control_at_nospam_post.pl



========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news-stoc.telia.net!news-stoa.telia.net!telia.net!newsfeed.tpinternet.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "jerry1111" <jerry1111_at_nospam_wp.pl>
Subject: Re: avrgcc i tekst w pamieci programu
Date: Sat, 1 Feb 2003 14:19:38 +0100


tekst przekazywany do procedury lcd_str byl tylko w pamieci programu.

Nie znam avrgcc, ale moze jest cos o nazwie podobnej
do 'writeable strings' i da sie to-to wylaczyc?

Albo teksty deklarowac jako stale w ROM i uzywac
wskaznikow.

jerry



========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.atman.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "drozdu" <lbajger_at_nospam_wp.pl>
Subject: Re: avrgcc i tekst w pamieci programu
Date: Sat, 1 Feb 2003 15:17:21 +0100


http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/

sekcja Modules->Program Space Strings

pozdr.
LB



========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.atman.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <mehamerla_at_nospam_pro.onet.pl>
Subject: Re: avrgcc i tekst w pamieci programu
Date: Sat, 01 Feb 2003 15:14:40 +0100


Grzegorz Kurczyk napisal(a):

Na wstepie przytaczam fragmencik programu:
--------------
void lcd_str(unsigned char s[])
{
char *c = s;
for (;;)
if (*c)
break;
else {
lcd_write_data(*c);
c++;
}
}

int main(void)
{
lcd_str("abcdefgh");
}
-----------------------
Program dziala prawidlowo, ale mam taki problem. Jak zmusić avrgcc aby
tekst przekazywany do procedury lcd_str byl tylko w pamieci programu.
Analizujac kod wynikowy tekst ten na poczatku (przed skokiem do main) jest
kopiowany z pamieci programu do pamieci RAM. Klopot w tym, ze tekstow mam
sporo, a sporo RAM-u potrzebuje do innych celow.

Nie robilem nic pod gcc, ale to co napisze powinno pomoc. Zrob tak:

void lcd_str(char *s)
{
while(*s)
lcd_write_data(*s++);
}

int main(void)
{
MOD char dupa[] = "abcdefgh";

lcd_str(dupa);
}

MOD - modyfikator obszaru pamieci, wskazuje w ktorym obszarze pamieci
ma byc zmienna, np: flash, idata, bit, itd, itp. Zapewne w gcc
skladnia jest inna, ale cos takiego na pewno powinno byc.

--
Pozdrowienia, Marcin E. Hamerla

"Płoń, płoń, płoń parlamencie, spali Cię ogień na historii zakręcie."

========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Grzegorz Kurczyk" <control_at_nospam_post.pl>
Subject: Re: avrgcc i tekst w pamieci programu
Date: Sat, 1 Feb 2003 17:35:29 +0000 (UTC)


Witam ponownie
Niestety problemu nie udało mi się rozwiązać tymi metodami
Jedno co udało mi sie ustalic to, ze

int main(void)
{
lcd_str(PTRS("abcdef");
}

powoduje, ze tekst jest tylko w pamieci programu, a do procedury
przekazywany jest wskaznik, ale nijak nie wiem jak w samą procedure lcd_str
zmusic do czytania danych z pamieci programu, a nie z RAMu

Pozdrawiam
Grzegorz

========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!lublin.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Jerzy Szczesiul" <jerzy.szczesiul_at_nospam_ep.com.pl>
Subject: Re: avrgcc i tekst w pamieci programu
Date: Sat, 1 Feb 2003 22:03:23 +0100


Czesc

Kilka sposobow jest:

napisales albo przez zadeklarowanie atrybutu

char tekst[] _attribute_((progmem)) = {"To jest testowy napis"};

czytasz to po bajcie funkcja PRG_RDB(adres)

np. CzwartyZnak= PRG_RDB(tekst+3);

albo kopiujesz do przygotowanego bufora np.

char Bufor[25];
strcpy_P(Bufor,tekst);


--
Pozdrowienia
Jurek Szczesiul

========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.intelink.pl!news.infinity.net.pl!szmaragd.futuro.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Romuald Bialy <romek_b_at_nospam_o2.pl>
Subject: Re: avrgcc i tekst w pamieci programu
Date: Sun, 02 Feb 2003 00:53:26 +0100


Grzegorz Kurczyk wrote:

Witam ponownie
Niestety problemu nie udało mi się rozwiązać tymi metodami
Jedno co udało mi sie ustalic to, ze

int main(void)
{
lcd_str(PTRS("abcdef");
}

powoduje, ze tekst jest tylko w pamieci programu, a do procedury
przekazywany jest wskaznik, ale nijak nie wiem jak w samą procedure lcd_str
zmusic do czytania danych z pamieci programu, a nie z RAMu

Bo musisz miec inna procedure do wypisywania takiego tekstu, ktora
bedzie korzystac z PRG_RDB. Np:


void lcd_str_p(unsigned char* p) // print string from flash on lcd
{
unsigned char b;
while ((b = PRG_RDB(p++)))
{
lcd_write_data(b);
}
}

No i uzywasz tego tak:

lcd_str_p(PSTR("abcdef"));

--
Pozdrawiam Romuald Bialy
E'mail: romek_b_at_nospam_o2.pl
yampp-WWW: http://www.yamppsoft.prv.pl

========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Grzegorz Kurczyk" <control_at_nospam_post.pl>
Subject: Re: avrgcc i tekst w pamieci programu
Date: Sun, 2 Feb 2003 15:54:28 +0000 (UTC)




Romuald Bialy <romek_b_at_nospam_o2.pl> napisał(a) w artykule
<3E3C5DF6.FE52A6FC_at_nospam_o2.pl>...
void lcd_str_p(unsigned char* p) // print string from flash on lcd
{
unsigned char b;
while ((b = PRG_RDB(p++)))
{
lcd_write_data(b);
}
}

WIELKIE DZIEKI !!!
to jest to !!!

Jeszcze raz dziękuję i serdecznie pozdrawiam
Grzegorz Kurczyk


========
Path: news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news-stoc.telia.net!news-stoa.telia.net!telia.net!newsfeed.tpinternet.pl!news.tpi.pl!not-for-mai