slawek7
Guest
Tue Jan 10, 2012 1:49 pm
Czesc.
Program pisany na STM32 w Keil
Jak rozroznic umieszczenie tablic w pamieci Flash i RAM?
Dla przykładu chce w pamieci flash umiescic tablice z obrazem dla
wyswietlacza LCD, ktora jest tylko do odczytu i mają być to wartosci
uint8_t OBRAZ[] = {0x08, //itd
oraz inna w pamieci RAM: uint8_t ch0[8]={24, 4, 4, 10, 18, 18, 17,
0}; //własne znaki
Jak je rozroznic aby trafily do FLASH a druga do RAM i jak je potem
odczyta?
Mario
Guest
Tue Jan 10, 2012 1:50 pm
W dniu 2012-01-10 12:49, slawek7 pisze:
Quote:
Czesc.
Program pisany na STM32 w Keil
Jak rozroznic umieszczenie tablic w pamieci Flash i RAM?
Dla przykładu chce w pamieci flash umiescic tablice z obrazem dla
wyswietlacza LCD, ktora jest tylko do odczytu i mają być to wartosci
uint8_t OBRAZ[] = {0x08, //itd
Te mające być we flaszu deklaruj jako const.
Na przykład
const char http_content_type[15] =
{0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65,
0x3a, 0x20, };
Quote:
oraz inna w pamieci RAM: uint8_t ch0[8]={24, 4, 4, 10, 18, 18, 17,
0}; //własne znaki
A te powędrują do RAM.
Po kompilacji zobaczysz w pliku .map gdzie powędrowały. Jeśl
i Keil używał do kompilacji gcc a zdaje mi się ze tak jest.
blok .text to flash, d.data - dane zainicjowane, .bss dane niezainicjowane.
--
pozdrawiam
MD
Ukaniu
Guest
Tue Jan 10, 2012 2:25 pm
Użytkownik "slawek7" <sholojda@wp.pl> napisał w wiadomości
news:8277f37b-322a-431c-8da4-2b04bcbe07a7@i26g2000vbt.googlegroups.com...
Quote:
Jak je rozroznic aby trafily do FLASH a druga do RAM i jak je potem
odczyta?
W gcc pisałem kiedys tak
uint8_t const moja_tablica_rom[]={1,1,1,1} PROGMEM;
pgm_read_byte(*); // dostępne w pgmspace.h
--
Pozdrawiam, Łukasz
slawek7
Guest
Tue Jan 10, 2012 3:09 pm
Tylko jak zoabczyc gdzie sa umieszczone te tablice?
Otwieram plik .map cos tam jest tylko jak z tego wylonic to co
potrzeba?
Jak to bedzie opisane?
Znalazlem na samyk koncu takie sekcje: RO Size, RW Size, ROM Size. Nie
wiem czy dobrze rozumiem, ale czy RO znaczy Read Only? a RW Read/
Write? To czym sie rozni ROM od RO? jedno tylko do czytania i drugie?
Grzegorz Kurczyk
Guest
Tue Jan 10, 2012 5:52 pm
W dniu 10.01.2012 14:25, Ukaniu pisze:
Quote:
Użytkownik "slawek7"<sholojda@wp.pl> napisał w wiadomości
news:8277f37b-322a-431c-8da4-2b04bcbe07a7@i26g2000vbt.googlegroups.com...
Jak je rozroznic aby trafily do FLASH a druga do RAM i jak je potem
odczyta?
W gcc pisałem kiedys tak
uint8_t const moja_tablica_rom[]={1,1,1,1} PROGMEM;
pgm_read_byte(*); // dostępne w pgmspace.h
Ale to raczej w AVR, a nie ARM ;-)
Pozdrawiam
Grzegorz
slawek7
Guest
Tue Jan 10, 2012 7:35 pm
To jak w Keilu sprawdzic ilosc zajetych pamieci (Ram, Flash)?
Zbych
Guest
Wed Jan 11, 2012 8:54 am
W dniu 2012-01-11 08:45, slawek7 pisze:
Quote:
Się popsuł. Spróbuj ten:
http://www.keil.com/forum/10624/
slawek7
Guest
Wed Jan 11, 2012 9:45 am
Quote:
Link nie dziala
AS
Guest
Wed Jan 11, 2012 12:48 pm
Quote:
Zastanawiam sie dlaczego dla ROM podaja "ROM Size = Code + RO Data +
RW Data" i w takim razie co znacza skroty RO i RW?
http://stackoverflow.com/questions/5430284/rom-and-ram-in-arm
Michoo
Guest
Wed Jan 11, 2012 1:14 pm
W dniu 11.01.2012 12:28, slawek7 pisze:
Quote:
Ten jest ok.
Zastanawiam sie dlaczego dla ROM podaja "ROM Size = Code + RO Data +
RW Data" i w takim razie co znacza skroty RO i RW?
kod wykonywalny + dane Read Only (stałe) + dane Read and Write(kopiowane
do ram na starcie)
w ramie będzie RW, stack i obszary inicjalizowane zerami
--
Pozdrawiam
Michoo
slawek7
Guest
Wed Jan 11, 2012 1:28 pm
Ten jest ok.
Zastanawiam sie dlaczego dla ROM podaja "ROM Size = Code + RO Data +
RW Data" i w takim razie co znacza skroty RO i RW?
slawek7
Guest
Wed Jan 11, 2012 2:13 pm
To wyjasnilo, dzieki.
A jaki poziom kompilacji nalezy wybrac. W keilu sa od 0 do 3 natomiast
w WinAVR zawsze ustawialo sie na -Os. Jest tu jakis odpowiednik?