title: How do I execute a function from RAM on a Cortex-M3 (STM32)?
body: <p>I'm trying to execute a function from RAM on a Cortex-M3 processor (STM32). The function erases the and rewrites the internal flash, so i definitely needs to be in RAM but how do I do that? </p>
  
  <p>What I have tried is this: Copy the function to a byte array in RAM using memcpy (checking that it gets aligned correctly), setting a function pointer to point to the byte array an then calling the the function(pointer). </p>
  
  <p>This works fine for maybe 10 instructions (I can follow the execution with the debugger) but then I get a buss error and the processor resets. The buss error occurs on the second pass through a loop so the code should be fine (as it works the first pass). I'm thinking that the faster RAM access mucks up the buss timing in some way... </p>
  
  <p>Anyway is there a correct way to do this? How would a scatter file look like that places a function in RAM automatically (I'm using Keil uVision for Cortex-M3)?     </p>
  
  <p>Edit: More info:
  Toolchain: RealView MDK-ARM V 4.10
  Compiler: Armcc v4.0.0.728
  Assembler: Armasm v4.0.0.728
  Linker: ArmLink v4.0.0.728
  Processor: STM32F103ZE</p>
  
  <p>The IMPRECISERR bit is set in the buss fault register when the reset happens.</p>