2008-02-06 07:21 AM
2011-05-17 12:48 AM
Do nobody knows how to run code from ram? (Using RIDE from raisonance) I have read a lot about the attribute ''__ramfunc'', but i think it's a functionality which is implementet in IAR workbench only...i'm right?
best regards2011-05-17 12:48 AM
Code:
MEMORY { FLASH (rx) : ORIGIN = 0, LENGTH = 448K USERSPACE (xrw) : ORIGIN = 0x00070000, LENGTH = 64K /*space between 448 - 512 KB in FLASH bank0*/ FLASHB1 (rw) : ORIGIN = 0x00080000, LENGTH = 32K EXTMEMB0 (rx) : ORIGIN = 0x30000000, LENGTH = 64M EXTMEMB1 (rx) : ORIGIN = 0x34000000, LENGTH = 64M EXTMEMB2 (rx) : ORIGIN = 0x38000000, LENGTH = 64M EXTMEMB3 (rx) : ORIGIN = 0x3C000000, LENGTH = 64M RAM (xrw) : ORIGIN = 0x50000000, LENGTH = 96K }this is for my USERSPACE section >>>Code:
.usertext : { . = ALIGN(4); *(.usertext) . = ALIGN(4); } >USERSPACE for example to use this : int __attribute__((section(''.usertext''))) flash_var; for my ram function i have adapted the .data section in this way >>>Code:
.data : AT ( _sidata ) { . = ALIGN(4); /* This is used by the startup in order to initialize the .data secion */ _sdata = . ; *(.data) *(.data.*) . = ALIGN(4); *(.gnu.linkonce.d*)
*(.fastrun) /* !!!! ''RAM-Function'' example */
. = ALIGN(4); /* This is used by the startup in order to initialize the .data secion */ _edata = . ; } >RAMexample of function declaration:__attribute__((section(''.fastrun''))) void FMI_BANK0_Write(void) But when i want to run my program code, the linker reports an error like section.data[000037fc -> 00003a37] overlaps section .fastrun [000037fc -> 00003867]map report from linker >>>
Code:
*(.glue_7t) 0x000037fc . = ALIGN (0x4) 0x000037fc _etext = . 0x000037fc _sidata = _etext.fastrun 0x000037fc 0x6c
.fastrun 0x000037fc 0x6c e:/torsten dittrich/raisonance_st9/scpi_arm/ramfunc.o
0x000037fc FMI_BANK0_Write .data 0x50000000 0x23c load address 0x000037fc 0x50000000 . = ALIGN (0x4) 0x50000000 _sdata = . *(.data) .data 0x50000000 0x4 e:/torsten dittrich/raisonance_st9/scpi_arm/main.o 0x50000000 str_pt .data 0x50000004 0x1a4 e:/torsten dittrich/raisonance_st9/scpi_arm/para.o 0x50000004 para_table .data 0x500001a8 0x90 e:/torsten dittrich/raisonance_st9/scpi_arm/scpi.o 0x500001a8 cmd1_table .data 0x50000238 0x4 /cygdrive/c/programme/gnuarm/bin/../lib/gcc/arm-elf/4.1.0/../../../../arm-elf/lib/libc.a(ctype_.o) 0x50000238 __ctype_ptr *(.data.*) 0x5000023c . = ALIGN (0x4) 0x5000023c _edata = .I'm not an expert in view of linker syntax, but i don't understand why the .fastrun section is located in adresses which belongs to the flash (000037fc...). Maybe there is a simple mistake i made. Hope anyone can help me. thanks a lot in advance... best regards T.Dittrich
2011-05-17 12:48 AM
Does anyone have a C function to do the same?
thanks. -jeremy2011-05-17 12:48 AM
Hi,
please refer to this topic: http://www.st.com/mcu/forums-cat-5047-21.html regarding the __ramfunc it can be used only with IAR. Rgds2011-05-17 12:48 AM
I did not find that link helpful. Perhaps I didn't understand it. The Keil uVision kit provides a nice example of running function from ram. It is small and easy to understand. So I'm starting there.
What I would like is an example program of how to write (and rewrite) data to some area of flash (say Bank 0 Sector 3), that is persistent between resets. For example: user sends data over serial port. data is stored to flash. User powers down processor. 3 days later processor is powered up. Data is read from flash. Repeat. If anyone has an example it would be very much appreciated.2011-05-17 12:48 AM
FYI: I am using the Keil uVision IDE and Realview ARM toolchain.
I think the basic problem is something like: 1. Reserve a sector of flash in bank 0 2. inform the linker that this is for data 3. create methods that executes from RAM that read and write to this reserved sector. This should be a simple problem to solve. I think it is mostly a problem of configuration. Anyone have a small sample to do this that they would like to share? Is Mirou still around? ;)