Hello
To get code from some function copied to RAM and executed from there I would try the following:
1- Define the functions to be copied to RAM in a user defined section.
This is done as follows:
Code:
#pragma define_section RAMCode ".RAMCode" far_code__declspec(RAMCode) unsigned int Fibonacci(unsigned int n) { unsigned fib1, fib2, fibo; int i; fib1 = 0; fib2 = 1; fibo = n; i = 2; while (i <= n) { fibo = fib1 + fib2; fib1 = fib2; fib2 = fibo; i++; } return(fibo);}
2- In your .lcf file specify you want to place the user defined section into ROM.
Code:
.main_application_data : AT(___DATA_ROM) { . = ALIGN(0x8); *(.exception) . = ALIGN(0x8); __exception_table_start__ = .; EXCEPTION __exception_table_end__ = .; ___sinit__ = .; STATICINIT __START_DATA = .; *(.data) . = ALIGN(0x8); __END_DATA = .; __START_SDATA = .; *(.sdata) . = ALIGN(0x8); __END_SDATA = .; . = ALIGN(0x8); StartCopiedCode = .; *(.RAMCode) EndCopiedCode = .; } > DATA
3. Initialize a copy down block in the linker command file with information about data to be copied into RAM:
Code:
# Locate the ROM copy table into ROM after the initialized data _romp_at = CodeToCopy + SIZEOF(.CodeInRAM); .romp : AT(_romp_at) { __S_romp = _romp_at; WRITEW(___DATA_ROM); WRITEW(ADDR(.main_application_data)); WRITEW(SIZEOF(.main_application_data)); WRITEW(0); WRITEW(0); WRITEW(0); }
This should do it
CrasyCat