diff --git a/Demo/ARM7_AT91SAM7S64_IAR/resource/at91SAM7S64_FLASH.icf b/Demo/ARM7_AT91SAM7S64_IAR/resource/at91SAM7S64_FLASH.icf
index def0cf0a1..ad5a19e94 100644
--- a/Demo/ARM7_AT91SAM7S64_IAR/resource/at91SAM7S64_FLASH.icf
+++ b/Demo/ARM7_AT91SAM7S64_IAR/resource/at91SAM7S64_FLASH.icf
@@ -4,8 +4,8 @@
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
-define symbol __ICFEDIT_region_ROM_start__ = 0x00000100;
-define symbol __ICFEDIT_region_ROM_end__ = 0x0000FFFF;
+define symbol __ICFEDIT_region_ROM_start__ = 0x100000;
+define symbol __ICFEDIT_region_ROM_end__ = 0x10FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x00200000;
define symbol __ICFEDIT_region_RAM_end__ = 0x00203FFF;
/*-Sizes-*/
@@ -16,27 +16,37 @@ define symbol __ICFEDIT_size_fiqstack__ = 0x4;
define symbol __ICFEDIT_size_undstack__ = 0x4;
define symbol __ICFEDIT_size_abtstack__ = 0x4;
define symbol __ICFEDIT_size_heap__ = 0x4;
+/*-Exports-*/
+export symbol __ICFEDIT_region_ROM_start__;
+export symbol __ICFEDIT_region_ROM_end__;
+export symbol __ICFEDIT_region_RAM_start__;
+export symbol __ICFEDIT_region_RAM_end__;
+export symbol __ICFEDIT_size_startup__;
+export symbol __ICFEDIT_size_vectors__;
+export symbol __ICFEDIT_size_cstack__;
+export symbol __ICFEDIT_size_sysstack__;
+export symbol __ICFEDIT_size_irqstack__;
+export symbol __ICFEDIT_size_heap__;
/**** 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 region STA_region = mem:[from __ICFEDIT_region_ROM_start__ size __ICFEDIT_size_startup__];
+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_ROM_end__];
+define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
-define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };
+define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
-define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
-define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };
-define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
initialize by copy { readwrite };
+initialize by copy { section .vectors };
do not initialize { section .noinit };
-place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+place in STA_region { section .cstartup };
+place in ROM_region { readonly };
+place in VEC_region { section .vectors };
+place in RAM_region { readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP };
-place in ROM_region { readonly };
-place in RAM_region { readwrite,
- block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
- block UND_STACK, block ABT_STACK, block HEAP };
diff --git a/Demo/ARM7_AT91SAM7S64_IAR/rtosdemo.ewd b/Demo/ARM7_AT91SAM7S64_IAR/rtosdemo.ewd
index 0512e23af..8bb1b2733 100644
--- a/Demo/ARM7_AT91SAM7S64_IAR/rtosdemo.ewd
+++ b/Demo/ARM7_AT91SAM7S64_IAR/rtosdemo.ewd
@@ -41,7 +41,7 @@