RTV forum PL | NewsGroups PL

Praca z pamięcią flash AT45B011 w AVRGCC: Wskazniki i sekcje pamięci

AVRGCC wskazniki a dodatkowy flash

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Praca z pamięcią flash AT45B011 w AVRGCC: Wskazniki i sekcje pamięci

Paweł Kurzawa
Guest

Tue May 25, 2004 1:13 pm   



Witam,
mam zewnetrzna pamiec flash AT45B011 (SPI)
chcialbym w programie stworzyc zmienne oraz wskazniki
odwolujace sie do danych zawartych w tej pamieci.
Czy da sie to jakos zrobic tak jak w przypadku eeprom???
Mam nawet stworzone przez siebie odpowiednie procedury
identyczne z tymi do obslugi eeprom'u. Wartosc wskaznika
jest odpowiednio dekodowana na adres wewnetrzny
strony i buffora .....

Czy ponizsza definicja wymaga jakis zabiegow w pliku make ????

#define FLASH_SECTION __attribute__ ((section(".flash")))
const u08 FlashData[100] FLASH_SECTION;

--

--
Best regards
K@pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------

Krzysztof Rudnik
Guest

Tue May 25, 2004 3:06 pm   



Paweł Kurzawa wrote:

Quote:
Witam,
mam zewnetrzna pamiec flash AT45B011 (SPI)
chcialbym w programie stworzyc zmienne oraz wskazniki
odwolujace sie do danych zawartych w tej pamieci.
Czy da sie to jakos zrobic tak jak w przypadku eeprom???
Mam nawet stworzone przez siebie odpowiednie procedury
identyczne z tymi do obslugi eeprom'u. Wartosc wskaznika
jest odpowiednio dekodowana na adres wewnetrzny
strony i buffora .....

Czy ponizsza definicja wymaga jakis zabiegow w pliku make ????

#define FLASH_SECTION __attribute__ ((section(".flash")))
const u08 FlashData[100] FLASH_SECTION;

Chyba trzeba jakos zdefiniowac linkerowi gdzie jest
sekcja .flash. Niekoniecznie musi to byc w make'u,
mozna podac do linkera dodatkowy plik z instrukcjami.


Krzysiek Rudnik

Paweł Kurzawa
Guest

Tue May 25, 2004 3:45 pm   



Quote:
Chyba trzeba jakos zdefiniowac linkerowi gdzie jest
sekcja .flash. Niekoniecznie musi to byc w make'u,
mozna podac do linkera dodatkowy plik z instrukcjami.

tylko jak to zrobic???
--

--
Best regards
K@pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------

Krzysztof Rudnik
Guest

Tue May 25, 2004 4:23 pm   



Paweł Kurzawa wrote:

Quote:
Chyba trzeba jakos zdefiniowac linkerowi gdzie jest
sekcja .flash. Niekoniecznie musi to byc w make'u,
mozna podac do linkera dodatkowy plik z instrukcjami.

tylko jak to zrobic???

Co prawda to jest m68k ale sadze ze linker wiele sie nie rozni:

/* najpierw deklaracja jak mamy podzielona pamiec */
MEMORY
{
/* najpierw flash - podzielony na rozne obszary */
sflash : org = 0x02000000, len = 0x001000
/* zarezerwowane 16MB by mozna bylo wlaczyc cache */
/* odszar ramu dzielimy na kawalki */
sdata : org = 0x02000000, len = 0x001000
stack : org = 0x02001000, len = 0x37F000
/* potem od 0x40000000 dodatkowa, pamiec DRAM max 256+256 MB (min 16MB) */
/* (pierwsze 0x1000 zarezerwowane dla boota ) */
/* pelna, szybka 32 bitowa DRAM */
/* automatycznie okreslamy jej wielkosc daje tutaj max */

ram : org = 0x40000000, len = 0xFF0000
}

/* potem przydzielany kolejne sekcje programu do odpowiednich
obszarow pamieci */
SECTIONS
{
.text :
{
*(.text)
. = ALIGN (16);

*(.eh_frame)
. = ALIGN (16);

*(.gnu.linkonce.t.*)
*(.gnu.linkonce.r.*)

. = ALIGN(0x4);
__CTOR_LIST__ = .;
___CTOR_LIST__ = .;
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
*(.ctors)
LONG(0)
__CTOR_END__ = .;
__DTOR_LIST__ = .;
___DTOR_LIST__ = .;
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
*(.dtors)
LONG(0)
__DTOR_END__ = .;
*(.rodata)
*(.gcc_except_table)

. = ALIGN(0x2);
__INIT_SECTION__ = . ;
LONG (0x4e560000) /* linkw %fp,#0 */
*(.init)
SHORT (0x4e5e) /* unlk %fp */
SHORT (0x4e75) /* rts */

__FINI_SECTION__ = . ;
LONG (0x4e560000) /* linkw %fp,#0 */
*(.fini)
SHORT (0x4e5e) /* unlk %fp */
SHORT (0x4e75) /* rts */

*(.lit)
. = ALIGN(16);
_etext = .;
etext = .;
} > flash

.data :
{
__DATA_RAM = .;
__DATA_ROM = .;
copy_start = .;
*(.shdata)
*(.data)
*(.gnu.linkonce.d.*)
. = ALIGN (16);
_edata = .;
copy_end = .;
__DATA_END = .;
} > ram

.bss :
{
. = ALIGN(0x4);
__BSS_START = .;
__bss_start = . ;
*(.shbss)
*(.bss)
*(COMMON)
_end = ALIGN (0x8);
__end = _end;
__BSS_END = .;
} > ram

.stab 0 (NOLOAD) :
{
*(.stab)
}

.stabstr 0 (NOLOAD) :
{
*(.stabstr)
}
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* These must appear regardless of . */

}

/* definicje stalych adresow */
RAM2 = 0x02001000;
PORTIO = 0x50000000;

To wyzej zapisac w pliku txt i dac ten plik jako
argument do linkera z kluczem -T.

Krzysiek Rudnik

Paweł Kurzawa
Guest

Thu May 27, 2004 10:02 am   



Quote:
Można inicjować takie stałe w programie, a w makefile'u
wygenerować obraz binarny sekcji .flash do zapisania
w pamięci - analogicznie jak w przypadku .eeprom
(wywołanie objcopy).
to juz mam zrobione.


Quote:
BTW adresy danych w AVRGCC są 16-bitowe:
ale adresowanie flasha w 128ce jest 32 bitowe to jak

to w koncu jest?



Quote:
const u08 OverFFFF[100]; // Adres powyżej 0xFFFF
void go( const u08 *data ); // Przykładowa funkcja

a jak funkcja bedzie wygladac tak:
void go( const void *data );
go( OverFFFF );


--

--
Best regards
K@pW from Poland

kpw(at)qs.pl
http://kpw.qs.pl
UIN: 8017753
GG: 1263183
---------------- end ----------------

JS
Guest

Thu May 27, 2004 10:09 am   



W artykule <c8vk9r$6mv$1@atlantis.news.tpi.pl>
autorem którego mieni się Paweł Kurzawa, napisano:

Quote:
Witam,
mam zewnetrzna pamiec flash AT45B011 (SPI)
chcialbym w programie stworzyc zmienne oraz wskazniki
odwolujace sie do danych zawartych w tej pamieci.
Czy da sie to jakos zrobic tak jak w przypadku eeprom???
[...]
Czy ponizsza definicja wymaga jakis zabiegow w pliku make ????

#define FLASH_SECTION __attribute__ ((section(".flash")))
const u08 FlashData[100] FLASH_SECTION;

Można inicjować takie stałe w programie, a w makefile'u
wygenerować obraz binarny sekcji .flash do zapisania
w pamięci - analogicznie jak w przypadku .eeprom
(wywołanie objcopy).

BTW adresy danych w AVRGCC są 16-bitowe:

const u08 OverFFFF[100]; // Adres powyżej 0xFFFF
void go( const u08 *data ); // Przykładowa funkcja

go( FlashData ); // OK
go( OverFFFF ); // go dostanie zły adres

--
Pozdrawiam
Jarosław Szynal

JS
Guest

Fri May 28, 2004 8:17 am   



W artykule <c94hvb$jhb$1@nemesis.news.tpi.pl>
autorem którego mieni się Paweł Kurzawa, napisano:

Quote:
BTW adresy danych w AVRGCC są 16-bitowe:
ale adresowanie flasha w 128ce jest 32 bitowe to jak
to w koncu jest?

Są funkcje do odczytu flasha, które przyjmują adres 32-bitowy,
jednak trzeba sobie go wypracować samodzielnie.

Quote:
const u08 OverFFFF[100]; // Adres powyżej 0xFFFF
void go( const u08 *data ); // Przykładowa funkcja

a jak funkcja bedzie wygladac tak:
void go( const void *data );
go( OverFFFF );

Dalej to samo. Adres jest daną 16-bitową ze znakiem
(co widać przy próbie rzutowania jej na long).

--
Pozdrawiam
Jarosław Szynal

elektroda NewsGroups Forum Index - Elektronika Polska - Praca z pamięcią flash AT45B011 w AVRGCC: Wskazniki i sekcje pamięci

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map