Hi everyone,
I'm working on a flash driver for a K20 chip, and since it only has one page of memory I believe I have to move my sector erase function to RAM so I'm not accessing the bank while erasing part of it. I'm using GCC and a custom linker script for my project.
So far I've done this:
- Use the attribute label to tell the linker to put the function in RAM:
bool erase_sector(uint32_t address) __attribute__((long_call, section(".ramfunctions")));
- and in the linker script:
. = 0x1FFFE000;
.data () :
{
__data_start = . ;
__data_start__ = .;
*(.data .data.* .gnu.linkonce.d.*)
. = ALIGN(32 / 8);
SORT(CONSTRUCTORS)
. = ALIGN(32 / 8);
*(.ramfunctions) /* Place specified functions in RAM */
}
- Add -mlong-calls to my compiler arguments
However when I run my code, I get a hard fault as soon as I call my erase_sector function. Is there another step here that I'm missing?
Thanks!
Marlon