Jak przechowywać tekst w pamięci programu z użyciem AVRGCC bez RAM?
avrgcc i tekst w pamieci programu
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
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
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
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
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
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:
- w sekcji .text lokujesz stringi albo tak jak
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
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
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