<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Store variables in flash at compile time</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/92519/store-variables-in-flash-at-compile-time</link><description>Hello I am using I am NRF SDK version 1.8.0 and nrf-zephyr v2.7.0-ncs1 (If a soultion exists on newer a rev, willing to upgrade now, otherwise it will happen some time in the future) and I am looking for a good way to store factory settings on nrf9160</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 18 Oct 2022 11:02:06 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/92519/store-variables-in-flash-at-compile-time" /><item><title>RE: Store variables in flash at compile time</title><link>https://devzone.nordicsemi.com/thread/391166?ContentTypeID=1</link><pubDate>Tue, 18 Oct 2022 11:02:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7903d448-a0db-4e09-b081-192ad8accc99</guid><dc:creator>y009</dc:creator><description>&lt;p&gt;In last message i said &amp;quot;&lt;span&gt;Changing the cmakelist file to only EXTFLASH_DATA, doesn&amp;#39;t result in this behaviour...&lt;/span&gt;&amp;quot; It does actually result in the same loop. I must have been&amp;nbsp;flashing something else.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Store variables in flash at compile time</title><link>https://devzone.nordicsemi.com/thread/391164?ContentTypeID=1</link><pubDate>Tue, 18 Oct 2022 10:56:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:dcbc8059-3039-4c4a-b84d-8b7b127082c4</guid><dc:creator>y009</dc:creator><description>&lt;p&gt;Hopefully i&amp;#39;ve been moving in the right direction.&lt;br /&gt;I modified my boards dts as:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;		storage_partition: partition@fa000 {
			label = &amp;quot;storage&amp;quot;;
			reg = &amp;lt;0x000fa000 0x00004000&amp;gt;;
		};

		settings_partition: partition@fe000 {
			label = &amp;quot;settings&amp;quot;;
			reg = &amp;lt;0x000fe000 0x00002000&amp;gt;;
		};&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And based on&amp;nbsp;&lt;span&gt;/samples/application_development/code_relocation_nocopy/&amp;nbsp;&lt;br /&gt;&lt;/span&gt;I&amp;#39;ve been trying to move it to my defined partition but to no avail.&lt;br /&gt;&lt;br /&gt;In my cmakelist I added the code relocate as:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;    target_sources(app PRIVATE ${app_sources})
    target_sources_ifdef(true app PRIVATE linker_arm_nocopy.ld)
    zephyr_code_relocate(src/hw_settings.c EXTFLASH) # move settings to correct partition&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I copied the linker code from&amp;nbsp;&amp;lt;arch/arm/aarch32/cortex_m/scripts/linker.ld&amp;gt; to linker_arm_nocopy:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;
/*
 * Copyright (c) 2013-2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file
 * @brief Linker command/script file
 *
 * Linker script for the Cortex-M platforms.
 */

#include &amp;lt;autoconf.h&amp;gt;
#include &amp;lt;linker/sections.h&amp;gt;
#include &amp;lt;devicetree.h&amp;gt;

#include &amp;lt;linker/devicetree_regions.h&amp;gt;
#include &amp;lt;linker/linker-defs.h&amp;gt;
#include &amp;lt;linker/linker-tool.h&amp;gt;

/* physical address of RAM */
#ifdef CONFIG_XIP
#define ROMABLE_REGION FLASH
#define RAMABLE_REGION SRAM
#else
#define ROMABLE_REGION SRAM
#define RAMABLE_REGION SRAM
#endif

#if USE_PARTITION_MANAGER

#include &amp;lt;pm_config.h&amp;gt;

#ifdef LINK_INTO_s1
/* We are linking against S1, create symbol containing the flash ID of S0.
 * This is used when writing code operating on the &amp;quot;other&amp;quot; slot.
 */
_image_1_primary_slot_id = PM_S0_ID;

#define ROM_ADDR PM_ADDRESS + PM_S1_ADDRESS - PM_S0_ADDRESS

#else /* ! LINK_INTO_s1 */

#ifdef PM_S1_ID
/* We are linking against S0, create symbol containing the flash ID of S1.
 * This is used when writing code operating on the &amp;quot;other&amp;quot; slot.
 */
_image_1_primary_slot_id = PM_S1_ID;
#endif /* PM_S1_ID */

#define ROM_ADDR PM_ADDRESS
#endif /* LINK_MCUBOOT_INTO_s1 */
#define ROM_SIZE PM_SIZE

#define RAM_SIZE PM_SRAM_SIZE
#define RAM_ADDR PM_SRAM_ADDRESS

#else /* ! USE_PARTITION_MANAGER */

#if !defined(CONFIG_XIP) &amp;amp;&amp;amp; (CONFIG_FLASH_SIZE == 0)
#define ROM_ADDR RAM_ADDR
#else
#define ROM_ADDR (CONFIG_FLASH_BASE_ADDRESS + CONFIG_FLASH_LOAD_OFFSET)
#endif

#if CONFIG_FLASH_LOAD_SIZE &amp;gt; 0
#define ROM_SIZE CONFIG_FLASH_LOAD_SIZE
#else
#define ROM_SIZE (CONFIG_FLASH_SIZE*1K - CONFIG_FLASH_LOAD_OFFSET)
#endif

#if defined(CONFIG_XIP)
#if defined(CONFIG_IS_BOOTLOADER)
#define RAM_SIZE (CONFIG_BOOTLOADER_SRAM_SIZE * 1K)
#define RAM_ADDR (CONFIG_SRAM_BASE_ADDRESS + \
	(CONFIG_SRAM_SIZE * 1K - RAM_SIZE))
#else
#define RAM_SIZE (CONFIG_SRAM_SIZE * 1K)
#define RAM_ADDR CONFIG_SRAM_BASE_ADDRESS
#endif
#else
#define RAM_SIZE (CONFIG_SRAM_SIZE * 1K - CONFIG_BOOTLOADER_SRAM_SIZE * 1K)
#define RAM_ADDR CONFIG_SRAM_BASE_ADDRESS
#endif

#endif /* USE_PARTITION_MANAGER */

#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_ccm), okay)
#define CCM_SIZE DT_REG_SIZE(DT_CHOSEN(zephyr_ccm))
#define CCM_ADDR DT_REG_ADDR(DT_CHOSEN(zephyr_ccm))
#endif

#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_itcm), okay)
#define ITCM_SIZE DT_REG_SIZE(DT_CHOSEN(zephyr_itcm))
#define ITCM_ADDR DT_REG_ADDR(DT_CHOSEN(zephyr_itcm))
#endif

#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_dtcm), okay)
#define DTCM_SIZE DT_REG_SIZE(DT_CHOSEN(zephyr_dtcm))
#define DTCM_ADDR DT_REG_ADDR(DT_CHOSEN(zephyr_dtcm))
#endif

#if defined(CONFIG_CUSTOM_SECTION_ALIGN)
_region_min_align = CONFIG_CUSTOM_SECTION_MIN_ALIGN_SIZE;
#else
/* Set alignment to CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE
 * to make linker section alignment comply with MPU granularity.
 */
#if defined(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE)
_region_min_align = CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE;
#else
/* If building without MPU support, use default 4-byte alignment. */
_region_min_align = 4;
#endif
#endif

#if !defined(CONFIG_CUSTOM_SECTION_ALIGN) &amp;amp;&amp;amp; defined(CONFIG_MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT)
#define MPU_ALIGN(region_size) \
    . = ALIGN(_region_min_align); \
    . = ALIGN( 1 &amp;lt;&amp;lt; LOG2CEIL(region_size))
#else
#define MPU_ALIGN(region_size) \
    . = ALIGN(_region_min_align)
#endif

MEMORY
    {
    FLASH (rx) : ORIGIN = ROM_ADDR, LENGTH = ROM_SIZE - 0x2000
    SRAM  (wx) : ORIGIN = RAM_ADDR, LENGTH = RAM_SIZE
    EXTFLASH (wx) : ORIGIN = 0xfe000, LENGTH = 0x2000

    /* TI CCFG Registers */
    LINKER_DT_REGION_FROM_NODE(FLASH_CCFG, rwx, DT_NODELABEL(ti_ccfg_partition))
    /* Data &amp;amp; Instruction Tightly Coupled Memory */
    LINKER_DT_REGION_FROM_NODE(ITCM, rw, DT_CHOSEN(zephyr_itcm))
    LINKER_DT_REGION_FROM_NODE(DTCM, rw, DT_CHOSEN(zephyr_dtcm))
    /* STM32 Core Coupled Memory */
    LINKER_DT_REGION_FROM_NODE(CCM, rw, DT_CHOSEN(zephyr_ccm))
    /* STM32WB IPC RAM */
    LINKER_DT_REGION_FROM_NODE(SRAM1, rw, DT_NODELABEL(sram1))
    LINKER_DT_REGION_FROM_NODE(SRAM2, rw, DT_NODELABEL(sram2))
    /* STM32 alternate RAM configurations */
    LINKER_DT_REGION_FROM_NODE(SRAM3, rw, DT_NODELABEL(sram3))
    LINKER_DT_REGION_FROM_NODE(SRAM4, rw, DT_NODELABEL(sram4))
    LINKER_DT_REGION_FROM_NODE(SDRAM1, rw, DT_NODELABEL(sdram1))
    LINKER_DT_REGION_FROM_NODE(SDRAM2, rw, DT_NODELABEL(sdram2))
    LINKER_DT_REGION_FROM_NODE(BACKUP_SRAM, rw, DT_NODELABEL(backup_sram))
    /* Used by and documented in include/linker/intlist.ld */
    IDT_LIST (wx) : ORIGIN = 0xFFFFF7FF, LENGTH = 2K
    }

ENTRY(CONFIG_KERNEL_ENTRY)

SECTIONS
    {

#include &amp;lt;linker/rel-sections.ld&amp;gt;

    /*
     * .plt and .iplt are here according to &amp;#39;arm-zephyr-elf-ld --verbose&amp;#39;,
     * before text section.
     */
    /DISCARD/ :
	{
	*(.plt)
	}

    /DISCARD/ :
	{
	*(.iplt)
	}

    GROUP_START(ROMABLE_REGION)

	__rom_region_start = ROM_ADDR;

    SECTION_PROLOGUE(rom_start,,)
	{

/* Located in generated directory. This file is populated by calling
 * zephyr_linker_sources(ROM_START ...). This typically contains the vector
 * table and debug information.
 */
#include &amp;lt;snippets-rom-start.ld&amp;gt;

	} GROUP_LINK_IN(ROMABLE_REGION)

#ifdef CONFIG_CODE_DATA_RELOCATION

#include &amp;lt;linker_relocate.ld&amp;gt;

#endif /* CONFIG_CODE_DATA_RELOCATION */

    SECTION_PROLOGUE(_TEXT_SECTION_NAME,,)
	{
	__text_region_start = .;

#include &amp;lt;linker/kobject-text.ld&amp;gt;

	*(.text)
	*(&amp;quot;.text.*&amp;quot;)
	*(&amp;quot;.TEXT.*&amp;quot;)
	*(.gnu.linkonce.t.*)

	/*
	 * These are here according to &amp;#39;arm-zephyr-elf-ld --verbose&amp;#39;,
	 * after .gnu.linkonce.t.*
	 */
	*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)

	} GROUP_LINK_IN(ROMABLE_REGION)

	__text_region_end = .;

#if defined (CONFIG_CPLUSPLUS)
	SECTION_PROLOGUE(.ARM.extab,,)
	{
	/*
	 * .ARM.extab section containing exception unwinding information.
	 */
	*(.ARM.extab* .gnu.linkonce.armextab.*)
	} GROUP_LINK_IN(ROMABLE_REGION)
#endif

	SECTION_PROLOGUE(.ARM.exidx,,)
	{
	/*
	 * This section, related to stack and exception unwinding, is placed
	 * explicitly to prevent it from being shared between multiple regions.
	 * It  must be defined for gcc to support 64-bit math and avoid
	 * section overlap.
	 */
	__exidx_start = .;
#if defined (__GCC_LINKER_CMD__)
	*(.ARM.exidx* gnu.linkonce.armexidx.*)
#endif
	__exidx_end = .;
	} GROUP_LINK_IN(ROMABLE_REGION)

	__rodata_region_start = .;

#include &amp;lt;linker/common-rom.ld&amp;gt;
#include &amp;lt;linker/thread-local-storage.ld&amp;gt;

    SECTION_PROLOGUE(_RODATA_SECTION_NAME,,)
	{
	*(.rodata)
	*(&amp;quot;.rodata.*&amp;quot;)
	*(.gnu.linkonce.r.*)

/* Located in generated directory. This file is populated by the
 * zephyr_linker_sources() Cmake function.
 */
#include &amp;lt;snippets-rodata.ld&amp;gt;

#include &amp;lt;linker/kobject-rom.ld&amp;gt;

	/*
	 * For XIP images, in order to avoid the situation when __data_rom_start
	 * is 32-bit aligned, but the actual data is placed right after rodata
	 * section, which may not end exactly at 32-bit border, pad rodata
	 * section, so __data_rom_start points at data and it is 32-bit aligned.
	 *
	 * On non-XIP images this may enlarge image size up to 3 bytes. This
	 * generally is not an issue, since modern ROM and FLASH memory is
	 * usually 4k aligned.
	 */
	. = ALIGN(4);
	} GROUP_LINK_IN(ROMABLE_REGION)

#include &amp;lt;linker/cplusplus-rom.ld&amp;gt;

	__rodata_region_end = .;
	MPU_ALIGN(__rodata_region_end -__rom_region_start);
	__rom_region_end = .;

    GROUP_END(ROMABLE_REGION)

    /*
     * These are here according to &amp;#39;arm-zephyr-elf-ld --verbose&amp;#39;,
     * before data section.
     */
    /DISCARD/ : {
	*(.got.plt)
	*(.igot.plt)
	*(.got)
	*(.igot)
	}

    GROUP_START(RAMABLE_REGION)

	. = RAM_ADDR;
	/* Align the start of image SRAM with the
	 * minimum granularity required by MPU.
	 */
	. = ALIGN(_region_min_align);
	_image_ram_start = .;

/* Located in generated directory. This file is populated by the
 * zephyr_linker_sources() Cmake function.
 */
#include &amp;lt;snippets-ram-sections.ld&amp;gt;

#if defined(CONFIG_USERSPACE)
#define APP_SHARED_ALIGN . = ALIGN(_region_min_align);
#define SMEM_PARTITION_ALIGN MPU_ALIGN

#include &amp;lt;app_smem.ld&amp;gt;

	_app_smem_size = _app_smem_end - _app_smem_start;
	_app_smem_rom_start = LOADADDR(_APP_SMEM_SECTION_NAME);

    SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
	{
        /*
         * For performance, BSS section is assumed to be 4 byte aligned and
         * a multiple of 4 bytes
         */
        . = ALIGN(4);
	__bss_start = .;
	__kernel_ram_start = .;

	*(.bss)
	*(&amp;quot;.bss.*&amp;quot;)
	*(COMMON)
	*(&amp;quot;.kernel_bss.*&amp;quot;)

#ifdef CONFIG_CODE_DATA_RELOCATION
#include &amp;lt;linker_sram_bss_relocate.ld&amp;gt;
#endif

        /*
         * As memory is cleared in words only, it is simpler to ensure the BSS
         * section ends on a 4 byte boundary. This wastes a maximum of 3 bytes.
		 */
	__bss_end = ALIGN(4);
	} GROUP_DATA_LINK_IN(RAMABLE_REGION, RAMABLE_REGION)

#include &amp;lt;linker/common-noinit.ld&amp;gt;

#endif  /* CONFIG_USERSPACE */

    GROUP_START(DATA_REGION)

    SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
	{
	__data_region_start = .;
	__data_start = .;
	*(.data)
	*(&amp;quot;.data.*&amp;quot;)
	*(&amp;quot;.kernel.*&amp;quot;)

/* Located in generated directory. This file is populated by the
 * zephyr_linker_sources() Cmake function.
 */
#include &amp;lt;snippets-rwdata.ld&amp;gt;

#ifdef CONFIG_CODE_DATA_RELOCATION
#include &amp;lt;linker_sram_data_relocate.ld&amp;gt;
#endif
	__data_end = .;

	} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
    __data_size = __data_end - __data_start;
    __data_load_start = LOADADDR(_DATA_SECTION_NAME);

    __data_region_load_start = LOADADDR(_DATA_SECTION_NAME);

#include &amp;lt;linker/common-ram.ld&amp;gt;
#include &amp;lt;linker/kobject-data.ld&amp;gt;

#include &amp;lt;linker/cplusplus-ram.ld&amp;gt;

/* Located in generated directory. This file is populated by the
 * zephyr_linker_sources() Cmake function.
 */
#include &amp;lt;snippets-data-sections.ld&amp;gt;

    __data_region_end = .;

#ifndef CONFIG_USERSPACE
   SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
	{
        /*
         * For performance, BSS section is assumed to be 4 byte aligned and
         * a multiple of 4 bytes
         */
        . = ALIGN(4);
	__bss_start = .;
	__kernel_ram_start = .;

	*(.bss)
	*(&amp;quot;.bss.*&amp;quot;)
	*(COMMON)
	*(&amp;quot;.kernel_bss.*&amp;quot;)

#ifdef CONFIG_CODE_DATA_RELOCATION
#include &amp;lt;linker_sram_bss_relocate.ld&amp;gt;
#endif

        /*
         * As memory is cleared in words only, it is simpler to ensure the BSS
         * section ends on a 4 byte boundary. This wastes a maximum of 3 bytes.
		 */
	__bss_end = ALIGN(4);
	} GROUP_DATA_LINK_IN(RAMABLE_REGION, RAMABLE_REGION)

    SECTION_PROLOGUE(_NOINIT_SECTION_NAME,(NOLOAD),)
        {
        /*
         * This section is used for non-initialized objects that
         * will not be cleared during the boot process.
         */
        *(.noinit)
        *(&amp;quot;.noinit.*&amp;quot;)
	*(&amp;quot;.kernel_noinit.*&amp;quot;)

/* Located in generated directory. This file is populated by the
 * zephyr_linker_sources() Cmake function.
 */
#include &amp;lt;snippets-noinit.ld&amp;gt;

        } GROUP_LINK_IN(RAMABLE_REGION)
#endif /* CONFIG_USERSPACE */

    /* Define linker symbols */

    _image_ram_end = .;
    _end = .; /* end of image */

    __kernel_ram_end = RAM_ADDR + RAM_SIZE;
    __kernel_ram_size = __kernel_ram_end - __kernel_ram_start;

    GROUP_END(RAMABLE_REGION)

#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_itcm), okay)
GROUP_START(ITCM)

	SECTION_PROLOGUE(_ITCM_SECTION_NAME,,SUBALIGN(4))
	{
		__itcm_start = .;
		*(.itcm)
		*(&amp;quot;.itcm.*&amp;quot;)
		__itcm_end = .;
	} GROUP_LINK_IN(ITCM AT&amp;gt; ROMABLE_REGION)

	__itcm_size = __itcm_end - __itcm_start;
	__itcm_load_start = LOADADDR(_ITCM_SECTION_NAME);

GROUP_END(ITCM)
#endif

#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_dtcm), okay)
GROUP_START(DTCM)

	SECTION_PROLOGUE(_DTCM_BSS_SECTION_NAME, (NOLOAD),SUBALIGN(4))
	{
		__dtcm_start = .;
		__dtcm_bss_start = .;
		*(.dtcm_bss)
		*(&amp;quot;.dtcm_bss.*&amp;quot;)
		__dtcm_bss_end = .;
	} GROUP_LINK_IN(DTCM)

	SECTION_PROLOGUE(_DTCM_NOINIT_SECTION_NAME, (NOLOAD),SUBALIGN(4))
	{
		__dtcm_noinit_start = .;
		*(.dtcm_noinit)
		*(&amp;quot;.dtcm_noinit.*&amp;quot;)
		__dtcm_noinit_end = .;
	} GROUP_LINK_IN(DTCM)

	SECTION_PROLOGUE(_DTCM_DATA_SECTION_NAME,,SUBALIGN(4))
	{
		__dtcm_data_start = .;
		*(.dtcm_data)
		*(&amp;quot;.dtcm_data.*&amp;quot;)
		__dtcm_data_end = .;
	} GROUP_LINK_IN(DTCM AT&amp;gt; ROMABLE_REGION)

	__dtcm_end = .;

	__dtcm_data_load_start = LOADADDR(_DTCM_DATA_SECTION_NAME);

GROUP_END(DTCM)
#endif

/* Located in generated directory. This file is populated by the
 * zephyr_linker_sources() Cmake function.
 */
#include &amp;lt;snippets-sections.ld&amp;gt;

#include &amp;lt;linker/debug-sections.ld&amp;gt;

    /DISCARD/ : { *(.note.GNU-stack) }

    SECTION_PROLOGUE(.ARM.attributes, 0,)
	{
	KEEP(*(.ARM.attributes))
	KEEP(*(.gnu.attributes))
	}

/* Must be last in romable region */
SECTION_PROLOGUE(.last_section,(NOLOAD),)
{
} GROUP_LINK_IN(ROMABLE_REGION)

/* To provide the image size as a const expression,
 * calculate this value here. */
_flash_used = LOADADDR(.last_section) - __rom_region_start;

    }
&lt;/pre&gt;&lt;br /&gt;changing the MEMORY section to try to accomodate for my partition:&lt;br /&gt;&lt;br /&gt; FLASH (rx) : ORIGIN = ROM_ADDR, LENGTH = ROM_SIZE - 0x2000&lt;br /&gt; SRAM (wx) : ORIGIN = RAM_ADDR, LENGTH = RAM_SIZE&lt;br /&gt; EXTFLASH (wx) : ORIGIN = 0xfe000, LENGTH = 0x2000&lt;br /&gt;&lt;br /&gt;The hw_settings.c file im trying to test with:&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#include &amp;lt;stdint.h&amp;gt;

const uint32_t var_ext_settings = 666U; 

void function_in_ext_flash(void)
{
	printk(&amp;quot;Address of %s %p\n&amp;quot;, __func__, &amp;amp;function_in_ext_flash);
	printk(&amp;quot;Address of var_ext_sram_data %p (%d)\n&amp;quot;, &amp;amp;var_ext_settings, var_ext_settings);
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Building it show some memory getting used&amp;nbsp;&lt;br /&gt;EXTFLASH:&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;160 B&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8 KB&amp;nbsp; &amp;nbsp; &amp;nbsp; 1.95%&lt;br /&gt;&lt;br /&gt;But currently I&amp;#39;m getting a boot loop with a message:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Non-secure callable region 0 placed in flash region 3 with size 32.&lt;br /&gt;&lt;br /&gt;Changing the cmakelist file to only EXTFLASH_DATA, doesn&amp;#39;t result in this behaviour, but the data is still in the main app memory region and the generated code_relocation.c file has empty functions:&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;void data_copy_xip_relocation(void)
{
void;
}

void bss_zeroing_relocation(void)
{
return;
}
&lt;/pre&gt;&lt;br /&gt;And memory region after buillding shows&amp;nbsp;&amp;nbsp;&lt;br /&gt;EXTFLASH:&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 GB&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8 KB&amp;nbsp; &amp;nbsp; &amp;nbsp; 0.00%&lt;br /&gt;&lt;br /&gt;Any suggestions would be highly appreciated.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Store variables in flash at compile time</title><link>https://devzone.nordicsemi.com/thread/390941?ContentTypeID=1</link><pubDate>Mon, 17 Oct 2022 09:52:10 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:845d9efd-36fe-4a0f-af36-78cac582dd4a</guid><dc:creator>y009</dc:creator><description>&lt;p&gt;Sorry for the late reply (probably shouldnt have asked before going on vacation).&lt;br /&gt;&lt;br /&gt;I looked the PM before a little bit, also, and hopefully made it clear to myself.&lt;br /&gt;To check:&lt;br /&gt;By default the &lt;span class="pre"&gt;$&lt;/span&gt;&lt;em&gt;&lt;span class="pre"&gt;BUILD_DIR&lt;/span&gt;&lt;/em&gt;&lt;span class="pre"&gt;/partitions.yml for nrf9160&amp;nbsp;has EMPTY_0, -1 and -2, which look like prime real-estate for me.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;EMPTY_0:
  address: 0xc000
  end_address: 0x10000
  placement:
    before:
    - mcuboot_pad
  region: flash_primary
  size: 0x4000
EMPTY_1:
  address: 0xfe000
  end_address: 0x100000
  placement:
    after:
    - littlefs_storage
  region: flash_primary
  size: 0x2000
EMPTY_2:
  address: 0xf0000
  end_address: 0xf8000
  placement:
    after:
    - mcuboot_secondary
  region: flash_primary
  size: 0x8000
app:
  address: 0x20200
  end_address: 0x80000
  region: flash_primary
  size: 0x5fe00
littlefs_storage:
  address: 0xf8000
  end_address: 0xfe000
  placement:
    align:
      start: 0x8000
    before:
    - end
  region: flash_primary
  size: 0x6000
mcuboot:
  address: 0x0
  end_address: 0xc000
  placement:
    before:
    - mcuboot_primary
  region: flash_primary
  size: 0xc000
mcuboot_pad:
  address: 0x10000
  end_address: 0x10200
  placement:
    align:
      start: 0x8000
    before:
    - mcuboot_primary_app
  region: flash_primary
  size: 0x200
mcuboot_primary:
  address: 0x10000
  end_address: 0x80000
  orig_span: &amp;amp;id001
  - mcuboot_pad
  - spm
  - app
  region: flash_primary
  sharers: 0x1
  size: 0x70000
  span: *id001
mcuboot_primary_app:
  address: 0x10200
  end_address: 0x80000
  orig_span: &amp;amp;id002
  - app
  - spm
  region: flash_primary
  size: 0x6fe00
  span: *id002
mcuboot_secondary:
  address: 0x80000
  end_address: 0xf0000
  placement:
    after:
    - mcuboot_primary
    align:
      start: 0x8000
  region: flash_primary
  share_size:
  - mcuboot_primary
  size: 0x70000
nrf_modem_lib_ctrl:
  address: 0x20010000
  end_address: 0x200104e8
  inside:
  - sram_nonsecure
  placement:
    after:
    - spm_sram
    - start
  region: sram_primary
  size: 0x4e8
nrf_modem_lib_rx:
  address: 0x200124e8
  end_address: 0x200144e8
  inside:
  - sram_nonsecure
  placement:
    after:
    - nrf_modem_lib_tx
  region: sram_primary
  size: 0x2000
nrf_modem_lib_sram:
  address: 0x20010000
  end_address: 0x200144e8
  orig_span: &amp;amp;id003
  - nrf_modem_lib_ctrl
  - nrf_modem_lib_tx
  - nrf_modem_lib_rx
  region: sram_primary
  size: 0x44e8
  span: *id003
nrf_modem_lib_tx:
  address: 0x200104e8
  end_address: 0x200124e8
  inside:
  - sram_nonsecure
  placement:
    after:
    - nrf_modem_lib_ctrl
  region: sram_primary
  size: 0x2000
otp:
  address: 0xff8108
  end_address: 0xff83fc
  region: otp
  size: 0x2f4
spm:
  address: 0x10200
  end_address: 0x20200
  inside:
  - mcuboot_primary_app
  placement:
    before:
    - app
  region: flash_primary
  size: 0x10000
spm_sram:
  address: 0x20000000
  end_address: 0x20010000
  inside:
  - sram_secure
  placement:
    after:
    - start
  region: sram_primary
  size: 0x10000
sram_nonsecure:
  address: 0x20010000
  end_address: 0x20040000
  orig_span: &amp;amp;id004
  - sram_primary
  - nrf_modem_lib_ctrl
  - nrf_modem_lib_tx
  - nrf_modem_lib_rx
  region: sram_primary
  size: 0x30000
  span: *id004
sram_primary:
  address: 0x200144e8
  end_address: 0x20040000
  region: sram_primary
  size: 0x2bb18
sram_secure:
  address: 0x20000000
  end_address: 0x20010000
  orig_span: &amp;amp;id005
  - spm_sram
  region: sram_primary
  size: 0x10000
  span: *id005
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Changing for example empty_1 to my setting area&lt;br /&gt;pm_static.yml:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;EMPTY_0:
  address: 0xc000
  end_address: 0x10000
  placement:
    before:
    - mcuboot_pad
  region: flash_primary
  size: 0x4000
EMPTY_1:
  address: 0xf0000
  end_address: 0xf8000
  placement:
    after:
    - mcuboot_secondary
  region: flash_primary
  size: 0x8000
settings:
  address: 0xfe000
  end_address: 0x100000
  placement:
    after:
    - littlefs_storage
  region: flash_primary
  size: 0x2000
app:
...
...
...&lt;/pre&gt;&lt;br /&gt;Should be ok?&lt;br /&gt;&lt;br /&gt;Though Im confused about the dts definitions still.&lt;br /&gt;Do I have to change them for my board? &lt;br /&gt;The generated .yml and the dts dont quite add up, or is it OK to leave it as is?&lt;br /&gt;&amp;nbsp;&lt;pre class="ui-code" data-mode="text"&gt;&amp;amp;flash0 {

	partitions {
		compatible = &amp;quot;fixed-partitions&amp;quot;;
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;1&amp;gt;;

		boot_partition: partition@0 {
			label = &amp;quot;mcuboot&amp;quot;;
			reg = &amp;lt;0x00000000 0x10000&amp;gt;;
		};
		slot0_partition: partition@10000 {
			label = &amp;quot;image-0&amp;quot;;
		};
		slot0_ns_partition: partition@50000 {
			label = &amp;quot;image-0-nonsecure&amp;quot;;
		};
		slot1_partition: partition@80000 {
			label = &amp;quot;image-1&amp;quot;;
		};
		slot1_ns_partition: partition@c0000 {
			label = &amp;quot;image-1-nonsecure&amp;quot;;
		};
		scratch_partition: partition@f0000 {
			label = &amp;quot;image-scratch&amp;quot;;
			reg = &amp;lt;0x000f0000 0xa000&amp;gt;;
		};
		storage_partition: partition@fa000 {
			label = &amp;quot;storage&amp;quot;;
			reg = &amp;lt;0x000fa000 0x00006000&amp;gt;;
		};
	};
};&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Store variables in flash at compile time</title><link>https://devzone.nordicsemi.com/thread/389116?ContentTypeID=1</link><pubDate>Tue, 04 Oct 2022 06:43:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d9bfb4e3-2b0c-47a5-8569-79ffbed7f3b3</guid><dc:creator>Priyanka</dc:creator><description>&lt;p&gt;Hi Henry,&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The post that you mentioned was for baremetal and with softdevice. With&amp;nbsp;the nRF Connect SDK, you can create a new partition accessible for the application.&amp;nbsp;I guess you need to give the partition data in yml file. You need to use partition manager &lt;em&gt;pm_static.yml&lt;/em&gt; to configure what&amp;nbsp;you wish.&amp;nbsp;You can refer &lt;a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/scripts/partition_manager/partition_manager.html#configuring-static-partitions"&gt;this&amp;nbsp;documentation&lt;/a&gt;&amp;nbsp;as a starting point.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Best Regards,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Priyanka&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>