<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: how to load function in flash while execute in ram in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299012#M12418</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;sorry to disturb all of you.&lt;/P&gt;&lt;P&gt;It's my problem don't know much about scatter file.Now I tried as below,and succeed :&lt;/P&gt;&lt;P&gt;LR_IROM2&amp;nbsp; 0x00007000&amp;nbsp;&amp;nbsp; 0X100 &lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ER_RAM&amp;nbsp; 0x20000000&amp;nbsp; 0x00000100&lt;/P&gt;&lt;P&gt; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Test.o&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 19 Mar 2014 13:33:01 GMT</pubDate>
    <dc:creator>fugrace</dc:creator>
    <dc:date>2014-03-19T13:33:01Z</dc:date>
    <item>
      <title>how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299011#M12417</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi ,everyone,I'm using KL under KEIL environment.&lt;/P&gt;&lt;P&gt;I want to&amp;nbsp; load function in flash while execute in ram.Though I can place the code in ram ,But I don't &lt;/P&gt;&lt;P&gt;know where it loads in flash,and that's important for me.&lt;/P&gt;&lt;P&gt;So can you tell me how to arrange the scatter file to load the function at a absolute address(or session)&lt;/P&gt;&lt;P&gt;and meanwhile place its execute address in ram?&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Mar 2014 07:47:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299011#M12417</guid>
      <dc:creator>fugrace</dc:creator>
      <dc:date>2014-03-19T07:47:57Z</dc:date>
    </item>
    <item>
      <title>Re: how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299012#M12418</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;sorry to disturb all of you.&lt;/P&gt;&lt;P&gt;It's my problem don't know much about scatter file.Now I tried as below,and succeed :&lt;/P&gt;&lt;P&gt;LR_IROM2&amp;nbsp; 0x00007000&amp;nbsp;&amp;nbsp; 0X100 &lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ER_RAM&amp;nbsp; 0x20000000&amp;nbsp; 0x00000100&lt;/P&gt;&lt;P&gt; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Test.o&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Mar 2014 13:33:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299012#M12418</guid>
      <dc:creator>fugrace</dc:creator>
      <dc:date>2014-03-19T13:33:01Z</dc:date>
    </item>
    <item>
      <title>Re: how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299013#M12419</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Please check below link about how to place function and data at dedicated address of Keil:&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.keil.com/support/man/docs/armlink/armlink_BABDJCAA.htm" title="http://www.keil.com/support/man/docs/armlink/armlink_BABDJCAA.htm"&gt;Linker User Guide: Placing functions and data at specific addresses&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Wish it helps.&lt;BR /&gt; &lt;BR /&gt;Best regards,&lt;BR /&gt;Ma Hui&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 24 Mar 2014 07:13:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299013#M12419</guid>
      <dc:creator>Hui_Ma</dc:creator>
      <dc:date>2014-03-24T07:13:32Z</dc:date>
    </item>
    <item>
      <title>Re: how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299014#M12420</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi FU grace,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The following example show how to load code in flash to ram and run it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/************************************************************************&lt;/P&gt;&lt;P&gt;* NAME: ftfl_command_inram&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* DESCRIPTION: Launch the command. It must be in RAM.&lt;/P&gt;&lt;P&gt;************************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void ftfl_command_inram(volatile unsigned char *ftfe_fstat)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *ftfe_fstat = MK_FTFL_FSTAT_CCIF_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(*ftfe_fstat &amp;amp; MK_FTFL_FSTAT_CCIF_MASK)) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static void ftfl_command_32bit( unsigned char command, unsigned long *address, char *data )&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *pdata = data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void (*fnRAM_code)(volatile unsigned char *) = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Adequate space for the small program */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define PROG_SIZE (50)&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!fnRAM_code)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char *pCodeStart = (unsigned char *)ftfl_command_inram;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Make space for the routine on stack (this will have an even boundary) */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if defined(__IAR_SYSTEMS_ICC__) || defined(__IASMARM__)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #pragma data_alignment=2&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile static unsigned char ProgRamSpace[PROG_SIZE];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile static unsigned char ProgRamSpace[PROG_SIZE] __attribute__ ((aligned (2)));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Thumb 2 address */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pCodeStart =&amp;nbsp; (unsigned char *)(((unsigned int)pCodeStart) &amp;amp; ~0x1);&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Copy program to SRAM */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (i &amp;lt; PROG_SIZE) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProgRamSpace[i] = pCodeStart[i];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Create a thumb 2 call */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fnRAM_code = (void(*)(volatile unsigned char *))(ProgRamSpace + 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisableInterrupts;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* The CCIF flag must read 1 to verify that any previous command has&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * completed. If CCIF is zero, the previous command execution is still active, a new&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * command write sequence cannot be started, and all writes to the FCCOB registers are&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * ignored.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(MK_FTFL_FSTAT &amp;amp; MK_FTFL_FSTAT_CCIF_MASK))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Ensure that the ACCERR and FPVIOL bits in the FSTAT register are cleared prior to&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp; starting the command write sequence.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FSTAT = (MK_FTFL_FSTAT_ACCERR_MASK | MK_FTFL_FSTAT_FPVIOL_MASK);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* The FCCOB register group uses a big endian addressing convention. */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write a valid command to the FCCOB0 register. */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FCCOB0 = command;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Flash address.*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FCCOB1 = (uint8)(((uint32)address) &amp;gt;&amp;gt; 16);&amp;nbsp;&amp;nbsp; /* Flash address [23:16] */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FCCOB2 = (uint8)(((uint32)address) &amp;gt;&amp;gt; 8);&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Flash address [15:8] */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FCCOB3 = (uint8)((uint32)address);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Flash address [7:0] */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Data.*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FCCOB4 = (uint8)(pdata[3]);&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Data Byte 0.*/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FCCOB5 = (uint8)(pdata[2]);&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Data Byte 1.*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FCCOB6 = (uint8)(pdata[1]);&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Data Byte 2.*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MK_FTFL_FCCOB7 = (uint8)(pdata[0]);&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Data Byte 3.*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fnRAM_code(&amp;amp;MK_FTFL_FSTAT);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 25 Mar 2014 06:14:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299014#M12420</guid>
      <dc:creator>xiaodong_zhang</dc:creator>
      <dc:date>2014-03-25T06:14:14Z</dc:date>
    </item>
    <item>
      <title>Re: how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299015#M12421</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi,Ma hui.&lt;/P&gt;&lt;P&gt;actually I had seen the link about how to place at specific address ,and I tried both place function at flash or ram.&lt;/P&gt;&lt;P&gt;But now my question is a little different.Not only do I want to place my function in flash ,but the most important,I want to &lt;/P&gt;&lt;P&gt;execute it in RAM,so it's a difference between load address and execute address.My upper reply gives my tried solution,&lt;/P&gt;&lt;P&gt;I thought it works,but these days I tried another more complex file(not only simple test file) to do as the test,and find it works not&lt;/P&gt;&lt;P&gt;stable.That' s sometimes it works ,but more often it runs to hard Fault.&lt;/P&gt;&lt;P&gt;Can you give me more hints?Thanks very much!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Mar 2014 02:12:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299015#M12421</guid>
      <dc:creator>fugrace</dc:creator>
      <dc:date>2014-03-26T02:12:56Z</dc:date>
    </item>
    <item>
      <title>Re: how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299016#M12422</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,xiaodong,Thank you very much .You've really got what I want to do.And the answer maybe a solution.But it's a little too complex for me,I can understand what your function wants to do ,that's copy function from flash to ram and protect the FCCOB&amp;nbsp; register.I guess it may be what the __main in KEIL completes which I don't know where its source code locates.&lt;/P&gt;&lt;P&gt;But I really want other more easy way to solve it,like using scatter file in KEIL to place the function in different load address and execute address.&lt;/P&gt;&lt;P&gt;Anyway,Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Mar 2014 02:31:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299016#M12422</guid>
      <dc:creator>fugrace</dc:creator>
      <dc:date>2014-03-26T02:31:17Z</dc:date>
    </item>
    <item>
      <title>Re: how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299017#M12423</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,Ma hui.&lt;/P&gt;&lt;P&gt;I've solved the problem,it's ok to do like my fist reply for this question.My later hard fault problem occured because the code&amp;nbsp; placed in that special&lt;/P&gt;&lt;P&gt;session has some illegal operation.&lt;/P&gt;&lt;P&gt;Thanks anyway!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Mar 2014 09:00:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299017#M12423</guid>
      <dc:creator>fugrace</dc:creator>
      <dc:date>2014-03-26T09:00:27Z</dc:date>
    </item>
    <item>
      <title>Re: how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299018#M12424</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I would just like to add an 'application note' regarding this technique to get a 'small function' moved temporarily out to RAM.&amp;nbsp; The ARM architecture, and compilers, require 32-bit constants, like 'fixed' peripheral addresses (MK_FTFL_FSTAT, etc) to be loaded from program-space at a 'relative' offset to the program counter.&amp;nbsp; A compiler will place these numbers in program space at the end of an 'object' file, so 'following' the source code.&amp;nbsp; This means two things:&amp;nbsp; Firstly, that the 'routine' you are going to copy out to RAM MUST be at the 'end' of the associated source-file, AND that 'PROG_SIZE' must include not only the actual code, but ALSO these 'constants' off the end.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Mar 2014 22:36:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299018#M12424</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2014-03-26T22:36:17Z</dc:date>
    </item>
    <item>
      <title>Re: how to load function in flash while execute in ram</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299019#M12425</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;In your example I could not understand why&amp;nbsp; the last significant bit should be 0 (&lt;SPAN style="color: #3d3d3d; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;&amp;nbsp;&amp;nbsp; pCodeStart =&amp;nbsp; (unsigned char *)(((unsigned int)pCodeStart) &amp;amp; ~0x1). As I read the in cortex M processors for thump-2 instructions , the lsb bit for PC should be 1 ,right?? And then you use this instruction &lt;SPAN style="color: #3d3d3d; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt; (void(*)(volatile unsigned char *))(ProgRamSpace + 1) to create thumb -2 call. Can you explain me the reason for this?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #3d3d3d; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;Thank you &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #3d3d3d; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;Best regards&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 01 Jun 2014 19:40:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/how-to-load-function-in-flash-while-execute-in-ram/m-p/299019#M12425</guid>
      <dc:creator>getsoubl</dc:creator>
      <dc:date>2014-06-01T19:40:42Z</dc:date>
    </item>
  </channel>
</rss>

