添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Hi Sir,

I am use S132 softdevice and it converted to binary file using srecord tool, the add binary file into IAR project seems not working for softdevice.

Below is my ICF file in IAR, the softdevice address from 0x00000 to 0x25fff,

Does anyone knows why I setting does not working?

Much appreciated.

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/

define symbol __ICFEDIT_intvec_start__ = 0x26000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x26000;
/* Below for 52832 S132 */
define symbol __ICFEDIT_region_ROM_end__ = 0x7ffff;

define symbol __ICFEDIT_region_SOFTDEVICE_start__ = 0x00000;
define symbol __ICFEDIT_region_SOFTDEVICE_end__ = 0x25fff;


define symbol __ICFEDIT_region_RAM_start__ = 0x20002a98;
/* Below for 52832 */
define symbol __ICFEDIT_region_RAM_end__ = 0x2000ffff;
export symbol __ICFEDIT_region_RAM_start__;
export symbol __ICFEDIT_region_RAM_end__;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 8192;
define symbol __ICFEDIT_size_heap__ = 8192;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region SOFTDEVICE_region = mem:[from __ICFEDIT_region_SOFTDEVICE_start__ to __ICFEDIT_region_SOFTDEVICE_end__];
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];

define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
define block RO_END with alignment = 8, size = 0 { };

initialize by copy { readwrite };
do not initialize { section .noinit };

keep { section .intvec };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in ROM_region { readonly,
block RO_END };
place in RAM_region { readwrite,
block CSTACK,
block HEAP };
place in SOFTDEVICE_region { section .SOFTDEVICE_Section };

Sorry, there maybe confuse to you about my question.

The image add successfully but it does not work to nRF52832, if I do programming softdevice in nRFGO or command line then everything works fine.

I don't know why softdevice could not be an image file add into IAR. does anyone did try it before?

I suspect that you have been following the oldest answers in Integrate SoftDevice Stack into IAR Workbench 7.10.1 for ARM . It seems some people have had problems getting that to work. Have you tried the suggestion by in that same thread instead? I.e. flash the SoftDevice as part of a build event .

Regards,
Terje

Actually there is a missing step in previous advice for IAR and using a combined programming action with application and SoftDevice. The build steps are as before, and the Softdevice is added via the following but Flash Loader does not work and so must be unchecked:

Options->Debugger->Images:

Download Extra Image [ Checked ]

Path: blah\blah\s132_nrf52_5.1.0_softdevice.hex

Offset: 0

Options->Debugger->Download:

Verify Download [ Checked ]

Use Flash Loader: [ Un-Checked ]

This works as-is with the vanilla linker icf file and standard SoftDevice settings (Nordic Uart example based) which doesn't need editing:

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x26000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x26000;
define symbol __ICFEDIT_region_ROM_end__     = 0x7ffff;
define symbol __ICFEDIT_region_RAM_start__   = 0x20002a98;
define symbol __ICFEDIT_region_RAM_end__     = 0x2000ffff;
export symbol __ICFEDIT_region_RAM_start__;
export symbol __ICFEDIT_region_RAM_end__;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__   = 8192;
define symbol __ICFEDIT_size_heap__     = 8192;
/**** End of ICF editor section. ###ICF###*/
define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
define block RO_END    with alignment = 8, size = 0     { };
initialize by copy { readwrite };
do not initialize  { section .noinit };
keep { section .intvec };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in ROM_region   { readonly,
                        block RO_END };
place in RAM_region   { readwrite,
                        block CSTACK,
                        block HEAP };