AVR-GCC i tablice

Witam Mam zadeklarowana tablice z 1344 elementow. Dane z tej tablicy wzucane sa na LCD graficzny i tu zaczyna sie problem. Do jakies 1/3 wyswietlacza wyszytko ladowane jest poprawnie a nastepnie podawana jest ta sama wartosc. W zwiazku z tym pytanie: Czy AVR-GCC ma jakies ograniczenia co do wielkosci tablicy? Czy popelnilem jakis blad w kodzie? Tablica zadeklarowana jest jako:

unsigned char rys[1344]={ 0x3f,0x3f,0x3f,....,0x00 };

Petla glowna: int main(void) { int z=0; char xb,temp; TOSHIBA_init (0x80); for (z=0;z<1344;z++) { TOSHIBA_write_word(0x24,0x100+z); for (xb=0;xb<6;xb++) { temp=(rys[1344]>>xb); if((temp&0x01)==0x01){_write_control(0xf8+xb);} } } while(1) { } }

Serdecznie dziekuja za wszelkie sugetie i odpowiedzi Michal

Reply to
invalid unparseable
Loading thread data ...

mala poprawka w kodzie: temp=(rys[z]>>xb); Pzdr Michal

Reply to
invalid unparseable

tak zadeklarowana tablica zostanie umieszczona w segmencie danych, więc najwyraźniej szybko kończy Ci się wolna pamięć RAM. powinno być coś w stylu:

#include <avr/pgmspace.h>

unsigned char rys[1344] PROGMEM = { 0x37,0x3f,0x3f,...,0x00 };

a zamiast tego:

temp = pgm_read_byte(rys + z) >> xb;

najlepiej przyjrzeć się dokumentacji avr-libc. tam w FAQ tłumaczą dokładnie dlaczego tak trzeba.

w.

Reply to
Wojtek Kaniewski

A masz tyle pamieci ram ? Moze po prostu ~600 bajtow uzywasz na inne rzeczy, 400 bajtow zostaje na "rys" i koniec.

Poza tym jak slusznie zauwazono - skorzystaj z przestrzenii programu - i tak te dane musza byc tam zapisane, i na poczatku przepisane do ram - czyli czyste marnotrawstwo, o ile maja zawierac jakis staly obrazek.

sugeruje:

temp=(rys[1344]); for (xb=0;xb<6;xb++) { if((temp&0x01)==0x01){_write_control(0xf8+xb);} temp>>=1 ; }

albo nawet

xb=0; temp=(rys[1344]); while (temp !=0) { if((temp&0x01)==0x01){_write_control(0xf8+xb);} ++xb; temp>>=1 ; }

[o ile temp jest "unsigned char", zeby przypadkiem z 0x80 po >> nie zrobilo sie 0xC0, a w ogole to ile jest tam bitow, bo na oko 7 ]

J.

Reply to
J.F.

Dziekuje za pomoc. Wszytko oczywiscie ruszylo :) Pzdr Michal

Reply to
invalid unparseable

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.