<?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>S12 / MagniV Microcontrollers中的主题 Re: copy far function from flash to RAM</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637712#M13592</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Another approach different for creataing a function directly in RAM by means of CodeWarriror, as was suggested before, is to do it manually - in the cases it required.&lt;/P&gt;&lt;P&gt;I hope and believe the code I prepared a long time ago will help you to understand. (XDP512 - FCNTsInInRAM - LARGEMM-CW41) I think also XDP512 - FCNTsInInternalSRAM - CW45.zip should say the same.&lt;/P&gt;&lt;P&gt;I have to highlight that the function you want to copy from flash to ram must be PIC (position independent code) - I think it is clear if you consider jumps and call - absolute address would be problem....&lt;/P&gt;&lt;P&gt;The code was written in the past for CodeWarrior v4.1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//==============================================================================&lt;BR /&gt;// - The example copies block of the functions from FLASH to Internal RAM&lt;BR /&gt;// - The address of RAM where the block will be copied is given by definition&lt;BR /&gt;// - Special iRAM space is created inside the SofTec_linker.prm file in order to&lt;BR /&gt;//&amp;nbsp;&amp;nbsp; preserve variables used during block copying and auxiliary calculations&lt;BR /&gt;// - The pointers to the copied functions are created in order to the functions&lt;BR /&gt;//&amp;nbsp;&amp;nbsp; be able to call each other.&lt;BR /&gt;// - if the functions, to be copied, have to call some other functions then &lt;BR /&gt;//&amp;nbsp;&amp;nbsp; the pointer to the function has to be called.&lt;BR /&gt;// - If the block of the functions is independent from Flash functions then it is&lt;BR /&gt;//&amp;nbsp;&amp;nbsp; able to work independently from flash. &lt;BR /&gt;//==============================================================================&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Finally, I suggest you to step your final code to be sure it behaves as expected.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have added some more project for study purpose.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Ladislav&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 10 Mar 2017 10:07:07 GMT</pubDate>
    <dc:creator>lama</dc:creator>
    <dc:date>2017-03-10T10:07:07Z</dc:date>
    <item>
      <title>copy far function from flash to RAM</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637709#M13589</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear sir,&lt;/P&gt;&lt;P&gt;I am using &lt;SPAN style="color: black; font-size: 10pt;"&gt;ms9c12xdp512 16 bit mcu.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;Now I want to write data to flash. First i need to load the function&amp;nbsp;from flash to RAM. But the function is in the far place. Every time, the content in WB[i] is invalid. Can you help me how to copy far function to ram and make sure it can run in ram(it is near) correctly?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;My codes is :&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;main.c&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT8U data[2] = {48, 49};&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte(0xFA, (INT8U*)0xBFFE, data, 2); //failed&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;flash.c&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;INT8U* writeByte(INT8U page, INT8U* pDes, INT8U* pSou, INT16U len);&lt;BR /&gt;static INT16U WB[90];&lt;BR /&gt;INT8U*(*WriteByte)(INT8U page, INT8U* pDes, INT8U* pSou, INT16U len);&lt;/P&gt;&lt;P&gt;void FlashInit(){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT8U i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT16U *p;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCLKDIV = 0x13;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCNFG=0x00; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(FCLKDIV_FDIVLD == 0); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FPROT_FPOPEN=1; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FPROT_FPHDIS=1; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FPROT_FPLDIS=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = (INT16U*)writeByte;//0xEF827B is writeByte's absolute address,&amp;nbsp; use this, the content of WB[i] is right;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;90;i++){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WB[i] = *p++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteByte = (INT8U* (*)(INT8U page, INT8U* pDes, INT8U* pSou, INT16U len))WB;&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;BR /&gt;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;INT8U* writeByte(INT8U page, INT8U* pDes, INT8U* pSou, INT16U len){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT16U i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT8U flag, oldPage;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT16U data,address;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldPage =PPAGE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; address = (INT16U)pDes;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag = (INT16U)pDes&amp;amp;1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(FCLKDIV &amp;amp; 0x80)); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(FSTAT &amp;amp; 0x80)); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(FSTAT &amp;amp; 0x30){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT |= 0x30; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(FPROT &amp;amp; 0x80)); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PPAGE = page;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; page=page&amp;amp;0x0C;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; page=page&amp;gt;&amp;gt;2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCNFG = 3-page;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( i =0; i&amp;lt;len;i++){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(flag){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address = address&amp;amp;0xFFFE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (*pSou++)|0xFF00;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = ((*pSou++)&amp;lt;&amp;lt;8)|0x00FF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __DINT;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(INT16U*)address=data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCMD = 0x20;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT|=0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while( !FSTAT_CBEIF ); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while( !FSTAT_CCIF ); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __EINT;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(flag){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; address=address+2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag^=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PPAGE = oldPage;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return pDes;&lt;BR /&gt;}&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Mar 2017 09:29:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637709#M13589</guid>
      <dc:creator>liuweiwei</dc:creator>
      <dc:date>2017-03-09T09:29:17Z</dc:date>
    </item>
    <item>
      <title>Re: copy far function from flash to RAM</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637710#M13590</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can use pragmas, in .c file:&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG __NEAR_SEG MY_RAM&lt;/P&gt;&lt;P&gt;void yourFunction(void) {&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG DEFAULT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 11.0pt;"&gt;And then make space for MY_RAM in the linker file Project.prm&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;/*******************************************************************************/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //RAM&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; = READ_WRITE&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; 0x1400 TO&amp;nbsp;&amp;nbsp; 0x3FFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; // original&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RAM&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; = READ_WRITE&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; 0x1400 TO&amp;nbsp;&amp;nbsp; 0x3DFF;&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; RAM_ROUTINE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_WRITE&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; 0x3E00 TO&amp;nbsp;&amp;nbsp; 0x3FFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // reserve last bytes&lt;/P&gt;&lt;P&gt;/*******************************************************************************/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DEFAULT_RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; RAM;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MY_RAM&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; INTO&amp;nbsp; RAM_ROUTINE;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/*******************************************************************************/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Daniel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Mar 2017 20:05:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637710#M13590</guid>
      <dc:creator>danielmartynek</dc:creator>
      <dc:date>2017-03-09T20:05:34Z</dc:date>
    </item>
    <item>
      <title>Re: copy far function from flash to RAM</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637711#M13591</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;writeByte works now. Thank you very much.&lt;/P&gt;&lt;P&gt;But the function erase by sectors does not work.&amp;nbsp; The writeByte and eraserSector is in the same .c file.&lt;/P&gt;&lt;P&gt;I read this from the datasheet: &amp;nbsp;Fast sector erase and word program operation.&lt;/P&gt;&lt;P&gt;main.c&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;main.c&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT8U data[2] = {48, 49};&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeByte(0xFA, (INT8U*)0xBFFE, data, 2); // worked now&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; eraserSector(0xFA, 0x8000, 16);&amp;nbsp; //After calling this, it does not work, the data in 0XFABFFE is still there.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-size: 10pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//erase by sector(1024 bytes)&lt;/P&gt;&lt;P&gt;void eraserSector(INT8U page, INT16U address,&amp;nbsp; INT8U count){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT16U i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT8U d;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INT8U oldPage;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oldPage = PPAGE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(FCLKDIV &amp;amp; 0x80));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(PPAGE){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PPAGE = page;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d = page&amp;amp;0x0C;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d = d&amp;gt;&amp;gt;2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCNFG = 3-d;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;count;i++, address += 1024){&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(FSTAT &amp;amp; 0x80));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(FSTAT &amp;amp; 0x30){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT |= 0x30;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(FPROT &amp;amp; 0x80));&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __DINT;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(INT16U*)address = 0xFFFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCMD = 0x40;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT |= 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while( !FSTAT_CBEIF ); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while( !FSTAT_CCIF );&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __EINT;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PPAGE = oldPage;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Waiting for your response.&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Mar 2017 08:48:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637711#M13591</guid>
      <dc:creator>liuweiwei</dc:creator>
      <dc:date>2017-03-10T08:48:56Z</dc:date>
    </item>
    <item>
      <title>Re: copy far function from flash to RAM</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637712#M13592</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Another approach different for creataing a function directly in RAM by means of CodeWarriror, as was suggested before, is to do it manually - in the cases it required.&lt;/P&gt;&lt;P&gt;I hope and believe the code I prepared a long time ago will help you to understand. (XDP512 - FCNTsInInRAM - LARGEMM-CW41) I think also XDP512 - FCNTsInInternalSRAM - CW45.zip should say the same.&lt;/P&gt;&lt;P&gt;I have to highlight that the function you want to copy from flash to ram must be PIC (position independent code) - I think it is clear if you consider jumps and call - absolute address would be problem....&lt;/P&gt;&lt;P&gt;The code was written in the past for CodeWarrior v4.1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//==============================================================================&lt;BR /&gt;// - The example copies block of the functions from FLASH to Internal RAM&lt;BR /&gt;// - The address of RAM where the block will be copied is given by definition&lt;BR /&gt;// - Special iRAM space is created inside the SofTec_linker.prm file in order to&lt;BR /&gt;//&amp;nbsp;&amp;nbsp; preserve variables used during block copying and auxiliary calculations&lt;BR /&gt;// - The pointers to the copied functions are created in order to the functions&lt;BR /&gt;//&amp;nbsp;&amp;nbsp; be able to call each other.&lt;BR /&gt;// - if the functions, to be copied, have to call some other functions then &lt;BR /&gt;//&amp;nbsp;&amp;nbsp; the pointer to the function has to be called.&lt;BR /&gt;// - If the block of the functions is independent from Flash functions then it is&lt;BR /&gt;//&amp;nbsp;&amp;nbsp; able to work independently from flash. &lt;BR /&gt;//==============================================================================&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Finally, I suggest you to step your final code to be sure it behaves as expected.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have added some more project for study purpose.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Ladislav&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Mar 2017 10:07:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637712#M13592</guid>
      <dc:creator>lama</dc:creator>
      <dc:date>2017-03-10T10:07:07Z</dc:date>
    </item>
    <item>
      <title>Re: copy far function from flash to RAM</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637713#M13593</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for your answers. I had tried "&lt;A _jive_internal="true" class="" data-content-finding="Community" data-userid="293568" data-username="danielmartynek" href="https://community.nxp.com/people/danielmartynek" style="color: #5e89c1; background-color: #ffffff; border: 0px; font-weight: 200; text-decoration: underline; font-size: 1.286rem;"&gt;Daniel Martynek&lt;/A&gt;&lt;SPAN style="color: #5e89c1; background-color: #ffffff; font-weight: 500;"&gt;&amp;nbsp;" reply. writeByte works normally. But eraseSector is not right. &amp;nbsp;Your project for me is a little hard to understand.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Mar 2017 10:36:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/copy-far-function-from-flash-to-RAM/m-p/637713#M13593</guid>
      <dc:creator>liuweiwei</dc:creator>
      <dc:date>2017-03-10T10:36:01Z</dc:date>
    </item>
  </channel>
</rss>

