=?iso-8859-2?Q?=5BC_lang=5D_obs=B3uga_wy=B6wietlacza_LCD_od_Nokii_pod_Avr?=



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: =?iso-8859-2?Q?=5BC_lang=5D_obs=B3uga_wy=B6wietlacza_LCD_od_Nokii_pod_Avr?=
Date: Wed, 5 Oct 2005 20:07:07 +0200


Pytanie kieruję do osób, które korzystały z drivera tego wyświetlacza,
gdzieś krążącego po sieci.
Dlaczego wzorce liter są zapisywane w RAM'ie, a nie w kodzie programu.
Deklaracja tablicy z wzorcami jest następująca

static const byte FontLookup [][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
(...)

Te wzorce plus pamięć ekranu zajmują aż coś koło 960 B. W ATmega8 nie
zostaje już prawie nic na program... Co z tym zrobić? Jak wymusić
umieszczenie tej tablicy w kodzie programu, a nie w RAM'ie? Jakieś
sugestie ?

Pzdr.
Krzysztof.


Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_bzdury.poczta.onet.pl>
Subject: Re: [C lang] =?iso-8859-2?q?obs=B3uga_wy=B6wietlacza?= LCD od Nokii pod Avr-Gcc
Date: Wed, 05 Oct 2005 21:05:13 +0200


On Wed, 05 Oct 2005 20:07:07 +0200, Krzysztof wrote:
Dlaczego wzorce liter są zapisywane w RAM'ie, a nie w kodzie programu.
Deklaracja tablicy z wzorcami jest następująca

static const byte FontLookup [][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
(...)

Ja mam tak:

static unsigned char PROGMEM ascii[] = {
0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x5F,0x00,0x00,0x00, ... }

A odczyt tak:

void charLCD(unsigned char ch)
{
unsigned int i;
unsigned char akt;

if(ch>31)
for(i=0;i<6;i++) {
memcpy_P(&akt, ascii + (((ch-32)*6)+i), sizeof(char));
dataLCD(akt);
}
}

Przy czym dataLCD() to funkcja przesyłająca daną do LCD.

Pozdrawiam
--
Marcin Stanisz

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"


Poprzedni Następny
Wiadomość
Spis treści
From: "Piotrek Sz." <zumek.SKASUJ_at_nospam_gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_[C_lang]_obs=B3uga_wy=B6wietl?= =?ISO-8859-2?Q?acza_LCD_od_Nokii_pod_Avr-Gcc?=
Date: Wed, 5 Oct 2005 19:14:46 +0000 (UTC)


Krzysztof <krzysztof.gedroyc_at_nospam_wp.pl> napisał(a):

Pytanie kieruję do osób, które korzystały z drivera tego wyświetlacza,
gdzieś krążącego po sieci.
Dlaczego wzorce liter są zapisywane w RAM'ie, a nie w kodzie programu.
Deklaracja tablicy z wzorcami jest następująca

static const byte FontLookup [][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
(...)

Te wzorce plus pamięć ekranu zajmują aż coś koło 960 B. W ATmega8 nie
zostaje już prawie nic na program... Co z tym zrobić? Jak wymusić
umieszczenie tej tablicy w kodzie programu, a nie w RAM'ie? Jakieś
sugestie ?

Pzdr.
Krzysztof.

Należy użyć odpowiednich atrybutów ;)
#define ATRYBUT _attribute_ ((section (".progmem.gcc"))) //zaraz za
tablicą wektorów
lub
#define ATRYBUT _attribute_ ((section (".fini9"))) //zaraz za ... ???
(sprawdź gdzie ;) )
lub
#define ATRYBUT _attribute_ ((section (".eeprom"))) //w eepromie też się
da ;)

char FontLookup [][5] ATRYBUT =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 } // #
};

Proponuję zajrzeć do pliku *.map .

Piotrek

PS
Można też umieścić dane w pliku *.S , wolna wola ;)
I nie próbuj odczytywać takich danych , jak "zwykłych" zmiennych.
Reszta o tym , w manualach AVR-GCC.


--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: =?iso-8859-2?Q?Re:_=5BC_lang=5D_obs=B3uga_wy=B6wietlacza_LCD_od_Nokii_pod?=
Date: Thu, 6 Oct 2005 14:58:51 +0200


Należy użyć odpowiednich atrybutów ;)
#define ATRYBUT _attribute_ ((section (".progmem.gcc"))) //zaraz za
tablicą wektorów

Ta część poszła!

I nie próbuj odczytywać takich danych , jak "zwykłych" zmiennych.
Reszta o tym , w manualach AVR-GCC.

Help, help!!
Tu jest link do deklaracji atrybutów, ale co dalej...?
http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Function-Attributes.html#Functio
n-Attributes
Jak odczytać dane z tej tablicy...??

Pzdr.
Krzysztof.


Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof" <krzysztof.gedroyc_at_nospam_wp.pl>
Subject: =?iso-8859-2?Q?Re:_=5BC_lang=5D_obs=B3uga_wy=B6wietlacza_LCD_od_Nokii_pod?=
Date: Thu, 6 Oct 2005 15:16:36 +0200


Help, help!!

Chyba coś mam:
http://www.freepgs.com/robkry/?t=avrgcc/progmem

Pzdr.
Krzysztof.