Difference between revisions of "How to place a function in RAM"
(Changed redirect target from SEGGER Embedded Studio to Create a RAM Function) (Tag: Redirect target changed) |
|||
(7 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | #REDIRECT [[Create_a_RAM_Function]] |
||
− | In some instances it is beneficial to run certain code parts in RAM instead of ROM. For this e.g. a function from ROM needs to be copied at some point into RAM for later usage. |
||
− | The following article will explain how this can be accomplished using Embedded Studio. |
||
− | |||
− | __attribute__ ((section(".fast"))) |
||
− | void _Delay(void) { |
||
− | } |
||
− | |||
− | void main(void) { |
||
− | do { |
||
− | Delay(); |
||
− | } while (1); |
||
− | } |
||
− | |||
− | |||
− | |||
− | |||
− | __TOC__ |
||
− | |||
− | == Example Setup == |
||
− | The setup guide will be based on the following hardware and software components: |
||
− | * J-Link Software Package V6.30b or later |
||
− | * Embedded Studio V3.34 or later |
||
− | * [https://shop.segger.com/Cortex_M_Trace_Reference_Board_p/6.68.18.htm Cortex-M Trace Reference Board], for other target devices the reference project needs to be adjusted respectively |
||
− | * Any J-Link/J-Trace hardware |
||
− | * Reference Project: [[Media:Generic_RAM_to_ROM_Example.zip | Generic_RAM_to_ROM_Example.zip]] |
||
− | |||
− | == Setup Guide== |
||
− | |||
− | The general procedure is as follows: |
||
− | |||
− | # Generate new project in Embedded Studio using the project wizard or use your already set up project. |
||
− | # Edit the section placement file by right clicking your project in the project explorer and selecting "Edit Section Placement". |
||
− | # Make sure that your section placement file has RAM and ROM memory segments. If not recreate the project or add them manually. |
||
− | # For reference section .fast can be used. |
||
− | # Create a new ROM (Flash) section where to place your future ROM to RAM code in. |
||
− | # Create a new RAM (SRAM) section that has the name you selected in the newly created ROM section for the value runin=".RAMSectionName". |
||
− | # Now the sections have been created. |
||
− | # Go to your application and create e.g. a function that should run in RAM. Place it in your ROM section with the attribute section caller e.g.: void __attribute__((section(".ROMSectionName"))) RunInRAM(int var1, int var2) {} |
||
− | # Before calling the function the first time in your application you first need to move it manually into RAM with the function memcpy: memcpy((void*)&__RAMSectionName_start__, (const void*)&__ROMSectionName_load_start__, (size_t)&__ROMSectionName_size__); |
||
− | # If you now call RunInRAM somewhere in your application the function will run in RAM instead of ROM. |
||
− | |||
− | For reference the project from section "Example Setup" can be used. |
Latest revision as of 11:38, 20 May 2020
Redirect to: