Placing code/rodata into different FLASH blocks

显示  仅  | 搜索替代 

Placing code/rodata into different FLASH blocks

6,286 次查看
Senior Contributor I

Most of the LPC18 and LPC43xx parts containing internal flash (such as LPC1857 and LPC4357) actually provide dual banks of flash. By default the managed linker script mechanism will place all of the application code and rodata (consts) into the first bank of FLASH.

However it is also possible to place specific functions or rodata items into the second bank of FLASH as displayed in:

Project Properties ->  C/C++ Build -> MCU settings

This placement is controlled via macros provided in an LPCXpresso header file which can be pulled into your project using:

#include <cr_section_macros.h> 

For simplicity, the *additional* FLASH region can be referenced as Flash2 (as well as using its "formal" region name - for example MFlashB512 - which will vary depending upon part).

For example, to place a rodata item into this section, you can use the __RODATA macro, thus:

__RODATA(Flash2) const int roarray[] = {10,20,30,40,50};

Or to place a function into it you can use __TEXT macro:

__TEXT(Flash2) void systick_delay(uint32_t delayTicks) { 

In addition the __RODATA_EXT and __TEXT_EXT macros can be used to place functions/rodata into a more specifically named section, for example:

__TEXT_EXT(Flash2,systick_delay) void systick_delay(uint32_t delayTicks) { 

will be placed into the section ".text.$Flash2.systick_delay" rather than ".text.$Flash2".

Related FAQs

标签 (1)
标记 (2)
0 项奖励
0 回复数