LPC812 - placing data on specific address in flash

cancel
Showing results for 
Search instead for 
Did you mean: 

LPC812 - placing data on specific address in flash

Jump to solution
1,122 Views
vojtechhavlicek
Contributor III

Hi,

I need to place specific data (default values which could be changed via IAP) into specific address on flash when I program the MCU.

I found cr_section_macros.h  - Placing code/rodata into different FLASH blocks 

There is macro 

#define __RODATA_EXT(bank,name) __SECTION_EXT(rodata, bank, name)

It´s ok but there is no option to define specific address where the data will be placed.

Is there any option/approach How I can complete this task?

Is it possible to create variable in flash somehow via pointer?

There is another solution which could work but I would prefer something which is easier... 

Defining Variables at Absolute Addresses with gcc | MCU on Eclipse 

1 Solution
404 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi vojtech havlicek,

    If you want to change it in the future, you still can add the flash IAP function to modify that flash area.


Have a great day,
Kerry

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

View solution in original post

5 Replies
404 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi vojtech havlicek,

  I don't know what the data type you want to write it in the flash.

  Do you want to define some constant data in the flash, and you don't need to modify it in the code?

If yes, you can use these ways, just like the method in your :

Defining Variables at Absolute Addresses with gcc | MCU on Eclipse 

1. IAR

Define the constant data in flash address 0x10000000, the detail address you can modified it by your own solution.

#pragma location = 0x10000000
__root const char  Data_config[] = {…}
take an example:
#pragma location = 0x10000000
__root const char Data_config[] = //@ ".intvec" =
{
0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
};
2. MDK
Define the constant data in flash address 0x10000000, the detail address you can modified it by your own solution.
const char  Data_config[] __attribute__((at(0x10000000))) ={…};
take an example:
const char  Data_config[] __attribute__((at(0x10000000))) =
{
0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
};
3, LPCXpresso or MCUXpresso IDE
 Just like the method in your post. You can use attribute, and modify it in the linker file.
But if you still want to modify the data in the flash from the code.
You also can use the flash IAP function, but at first, you need to erase the flash that address already have data.
About the IAP operation, you can refer to our official code:
The periph_flashiap project, you can use the flash sector directly as your data storage area.
Wish it helps you!
If you still have question about it, please kindly let me know!


Have a great day,
Kerry

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

404 Views
vojtechhavlicek
Contributor III

Hi,

thank you for your reply.

Data in flash are intended for system setting and can be changed via IAP in life cycle.

I had system via IAP which inits these data on first run of device but there was some problems with reading of flash. So I would prefer to write data with setting into flash when the image is loaded into flash.

As I see I will use 3rd option - change linker section and save data via attribute.

0 Kudos
404 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi Vojtech,

   You are welcome!

   If you don't need to modify the data with setting, you totally can use the linker and place it in the specific flash address, don't need to use the IAP to operate it.

  If you still have question about it, please kindly let me know!

  If your question is solved, please help me to mark the correct answer, just to close this case, thank you~


Have a great day,
Kerry

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

404 Views
vojtechhavlicek
Contributor III

Hi Kerry,

I need to change this data in future.

0 Kudos
405 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi vojtech havlicek,

    If you want to change it in the future, you still can add the flash IAP function to modify that flash area.


Have a great day,
Kerry

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

View solution in original post