diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf
index 7cfc9cc1..eb5e17c1 100644
Binary files a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf and b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf differ
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map
index 47af06a5..80493108 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map
@@ -7,6 +7,9 @@ Discarded input sections
.text 0x00000000 0x0 ARM Flash Debug/../../obj/main.o
.data 0x00000000 0x0 ARM Flash Debug/../../obj/main.o
.bss 0x00000000 0x0 ARM Flash Debug/../../obj/main.o
+ .text 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o
+ .data 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o
+ .bss 0x00000000 0x0 ARM Flash Debug/../../obj/extflash.o
.text 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o
.data 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o
.bss 0x00000000 0x0 ARM Flash Debug/../../obj/cstart.o
@@ -32,8 +35,6 @@ Discarded input sections
.text 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o
.data 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o
.bss 0x00000000 0x0 ARM Flash Debug/../../obj/timer.o
- .text.TimerSet
- 0x00000000 0x10 ARM Flash Debug/../../obj/timer.o
.text 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o
.data 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o
.bss 0x00000000 0x0 ARM Flash Debug/../../obj/uart.o
@@ -179,131 +180,141 @@ Linker script and memory map
0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .init is too large to fit in FLASH memory segment)
0x00000370 __text_load_start__ = ALIGN (__init_end__, 0x4)
-.text 0x00000370 0xef0
+.text 0x00000370 0x110c
0x00000370 __text_start__ = .
*(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table)
.glue_7 0x00000000 0x0 linker stubs
.glue_7t 0x00000000 0x0 linker stubs
- .text.startup.main
- 0x00000370 0x104 ARM Flash Debug/../../obj/main.o
+ .text.main 0x00000370 0x98 ARM Flash Debug/../../obj/main.o
0x00000370 main
.text.FlashGetSector
- 0x00000474 0x60 ARM Flash Debug/../../obj/flash.o
+ 0x00000408 0x64 ARM Flash Debug/../../obj/flash.o
.text.FlashWriteBlock
- 0x000004d4 0xf0 ARM Flash Debug/../../obj/flash.o
+ 0x0000046c 0x110 ARM Flash Debug/../../obj/flash.o
+ .text.FlashInitBlock
+ 0x0000057c 0x38 ARM Flash Debug/../../obj/flash.o
.text.FlashSwitchBlock
- 0x000005c4 0x84 ARM Flash Debug/../../obj/flash.o
+ 0x000005b4 0x6c ARM Flash Debug/../../obj/flash.o
.text.FlashAddToBlock
- 0x00000648 0xc8 ARM Flash Debug/../../obj/flash.o
+ 0x00000620 0xdc ARM Flash Debug/../../obj/flash.o
.text.FlashInit
- 0x00000710 0x20 ARM Flash Debug/../../obj/flash.o
- 0x00000710 FlashInit
+ 0x000006fc 0x20 ARM Flash Debug/../../obj/flash.o
+ 0x000006fc FlashInit
.text.FlashWrite
- 0x00000730 0x70 ARM Flash Debug/../../obj/flash.o
- 0x00000730 FlashWrite
+ 0x0000071c 0x6c ARM Flash Debug/../../obj/flash.o
+ 0x0000071c FlashWrite
.text.FlashErase
- 0x000007a0 0x108 ARM Flash Debug/../../obj/flash.o
- 0x000007a0 FlashErase
+ 0x00000788 0x130 ARM Flash Debug/../../obj/flash.o
+ 0x00000788 FlashErase
.text.FlashVerifyChecksum
- 0x000008a8 0x48 ARM Flash Debug/../../obj/flash.o
- 0x000008a8 FlashVerifyChecksum
+ 0x000008b8 0x48 ARM Flash Debug/../../obj/flash.o
+ 0x000008b8 FlashVerifyChecksum
.text.FlashWriteChecksum
- 0x000008f0 0x6c ARM Flash Debug/../../obj/flash.o
- 0x000008f0 FlashWriteChecksum
+ 0x00000900 0x74 ARM Flash Debug/../../obj/flash.o
+ 0x00000900 FlashWriteChecksum
.text.FlashDone
- 0x0000095c 0x50 ARM Flash Debug/../../obj/flash.o
- 0x0000095c FlashDone
+ 0x00000974 0x5c ARM Flash Debug/../../obj/flash.o
+ 0x00000974 FlashDone
.text.CpuMemCopy
- 0x000009ac 0x40 ARM Flash Debug/../../obj/cpu.o
- 0x000009ac CpuMemCopy
+ 0x000009d0 0x44 ARM Flash Debug/../../obj/cpu.o
+ 0x000009d0 CpuMemCopy
.text.CpuStartUserProgram
- 0x000009ec 0x44 ARM Flash Debug/../../obj/cpu.o
- 0x000009ec CpuStartUserProgram
+ 0x00000a14 0x44 ARM Flash Debug/../../obj/cpu.o
+ 0x00000a14 CpuStartUserProgram
.text.CpuReset
- 0x00000a30 0x10 ARM Flash Debug/../../obj/cpu.o
- 0x00000a30 CpuReset
- .text.NvmInit 0x00000a40 0x10 ARM Flash Debug/../../obj/nvm.o
- 0x00000a40 NvmInit
+ 0x00000a58 0x10 ARM Flash Debug/../../obj/cpu.o
+ 0x00000a58 CpuReset
+ .text.NvmInit 0x00000a68 0x10 ARM Flash Debug/../../obj/nvm.o
+ 0x00000a68 NvmInit
.text.NvmWrite
- 0x00000a50 0x10 ARM Flash Debug/../../obj/nvm.o
- 0x00000a50 NvmWrite
+ 0x00000a78 0x10 ARM Flash Debug/../../obj/nvm.o
+ 0x00000a78 NvmWrite
.text.NvmErase
- 0x00000a60 0x10 ARM Flash Debug/../../obj/nvm.o
- 0x00000a60 NvmErase
+ 0x00000a88 0x10 ARM Flash Debug/../../obj/nvm.o
+ 0x00000a88 NvmErase
.text.NvmVerifyChecksum
- 0x00000a70 0x10 ARM Flash Debug/../../obj/nvm.o
- 0x00000a70 NvmVerifyChecksum
- .text.NvmDone 0x00000a80 0x18 ARM Flash Debug/../../obj/nvm.o
- 0x00000a80 NvmDone
- .text.TimerInit
- 0x00000a98 0x48 ARM Flash Debug/../../obj/timer.o
- 0x00000a98 TimerInit
+ 0x00000a98 0x10 ARM Flash Debug/../../obj/nvm.o
+ 0x00000a98 NvmVerifyChecksum
+ .text.NvmDone 0x00000aa8 0x1c ARM Flash Debug/../../obj/nvm.o
+ 0x00000aa8 NvmDone
.text.TimerReset
- 0x00000ae0 0x20 ARM Flash Debug/../../obj/timer.o
- 0x00000ae0 TimerReset
+ 0x00000ac4 0x20 ARM Flash Debug/../../obj/timer.o
+ 0x00000ac4 TimerReset
.text.TimerUpdate
- 0x00000b00 0x38 ARM Flash Debug/../../obj/timer.o
- 0x00000b00 TimerUpdate
+ 0x00000ae4 0x38 ARM Flash Debug/../../obj/timer.o
+ 0x00000ae4 TimerUpdate
+ .text.TimerSet
+ 0x00000b1c 0x10 ARM Flash Debug/../../obj/timer.o
+ 0x00000b1c TimerSet
+ .text.TimerInit
+ 0x00000b2c 0x48 ARM Flash Debug/../../obj/timer.o
+ 0x00000b2c TimerInit
.text.TimerGet
- 0x00000b38 0x1c ARM Flash Debug/../../obj/timer.o
- 0x00000b38 TimerGet
+ 0x00000b74 0x1c ARM Flash Debug/../../obj/timer.o
+ 0x00000b74 TimerGet
+ .text.UartReceiveByte
+ 0x00000b90 0x28 ARM Flash Debug/../../obj/uart.o
+ .text.UartTransmitByte
+ 0x00000bb8 0x54 ARM Flash Debug/../../obj/uart.o
.text.UartInit
- 0x00000b54 0x40 ARM Flash Debug/../../obj/uart.o
- 0x00000b54 UartInit
+ 0x00000c0c 0x40 ARM Flash Debug/../../obj/uart.o
+ 0x00000c0c UartInit
.text.UartTransmitPacket
- 0x00000b94 0xc0 ARM Flash Debug/../../obj/uart.o
- 0x00000b94 UartTransmitPacket
+ 0x00000c4c 0x84 ARM Flash Debug/../../obj/uart.o
+ 0x00000c4c UartTransmitPacket
.text.UartReceivePacket
- 0x00000c54 0xb8 ARM Flash Debug/../../obj/uart.o
- 0x00000c54 UartReceivePacket
+ 0x00000cd0 0xc0 ARM Flash Debug/../../obj/uart.o
+ 0x00000cd0 UartReceivePacket
.text.AssertFailure
- 0x00000d0c 0x24 ARM Flash Debug/../../obj/assert.o
- 0x00000d0c AssertFailure
+ 0x00000d90 0x24 ARM Flash Debug/../../obj/assert.o
+ 0x00000d90 AssertFailure
.text.BackDoorCheck
- 0x00000d30 0x48 ARM Flash Debug/../../obj/backdoor.o
- 0x00000d30 BackDoorCheck
+ 0x00000db4 0x4c ARM Flash Debug/../../obj/backdoor.o
+ 0x00000db4 BackDoorCheck
.text.BackDoorInit
- 0x00000d78 0x20 ARM Flash Debug/../../obj/backdoor.o
- 0x00000d78 BackDoorInit
+ 0x00000e00 0x24 ARM Flash Debug/../../obj/backdoor.o
+ 0x00000e00 BackDoorInit
.text.BootInit
- 0x00000d98 0x1c ARM Flash Debug/../../obj/boot.o
- 0x00000d98 BootInit
+ 0x00000e24 0x1c ARM Flash Debug/../../obj/boot.o
+ 0x00000e24 BootInit
.text.BootTask
- 0x00000db4 0x18 ARM Flash Debug/../../obj/boot.o
- 0x00000db4 BootTask
- .text.ComInit 0x00000dcc 0x3c ARM Flash Debug/../../obj/com.o
- 0x00000dcc ComInit
- .text.ComTask 0x00000e08 0x24 ARM Flash Debug/../../obj/com.o
- 0x00000e08 ComTask
+ 0x00000e40 0x18 ARM Flash Debug/../../obj/boot.o
+ 0x00000e40 BootTask
+ .text.ComInit 0x00000e58 0x44 ARM Flash Debug/../../obj/com.o
+ 0x00000e58 ComInit
+ .text.ComTask 0x00000e9c 0x24 ARM Flash Debug/../../obj/com.o
+ 0x00000e9c ComTask
.text.ComTransmitPacket
- 0x00000e2c 0x18 ARM Flash Debug/../../obj/com.o
- 0x00000e2c ComTransmitPacket
+ 0x00000ec0 0x18 ARM Flash Debug/../../obj/com.o
+ 0x00000ec0 ComTransmitPacket
.text.ComSetConnectEntryState
- 0x00000e44 0x14 ARM Flash Debug/../../obj/com.o
- 0x00000e44 ComSetConnectEntryState
+ 0x00000ed8 0x14 ARM Flash Debug/../../obj/com.o
+ 0x00000ed8 ComSetConnectEntryState
.text.ComIsConnected
- 0x00000e58 0x10 ARM Flash Debug/../../obj/com.o
- 0x00000e58 ComIsConnected
- .text.CopInit 0x00000e68 0x4 ARM Flash Debug/../../obj/cop.o
- 0x00000e68 CopInit
+ 0x00000eec 0x10 ARM Flash Debug/../../obj/com.o
+ 0x00000eec ComIsConnected
+ .text.CopInit 0x00000efc 0x4 ARM Flash Debug/../../obj/cop.o
+ 0x00000efc CopInit
.text.CopService
- 0x00000e6c 0x4 ARM Flash Debug/../../obj/cop.o
- 0x00000e6c CopService
+ 0x00000f00 0x4 ARM Flash Debug/../../obj/cop.o
+ 0x00000f00 CopService
+ .text.XcpProtectResources
+ 0x00000f04 0x14 ARM Flash Debug/../../obj/xcp.o
.text.XcpSetCtoError
- 0x00000e70 0x20 ARM Flash Debug/../../obj/xcp.o
- .text.XcpInit 0x00000e90 0x28 ARM Flash Debug/../../obj/xcp.o
- 0x00000e90 XcpInit
+ 0x00000f18 0x20 ARM Flash Debug/../../obj/xcp.o
+ .text.XcpInit 0x00000f38 0x28 ARM Flash Debug/../../obj/xcp.o
+ 0x00000f38 XcpInit
.text.XcpIsConnected
- 0x00000eb8 0x18 ARM Flash Debug/../../obj/xcp.o
- 0x00000eb8 XcpIsConnected
+ 0x00000f60 0x18 ARM Flash Debug/../../obj/xcp.o
+ 0x00000f60 XcpIsConnected
.text.XcpPacketTransmitted
- 0x00000ed0 0x14 ARM Flash Debug/../../obj/xcp.o
- 0x00000ed0 XcpPacketTransmitted
+ 0x00000f78 0x14 ARM Flash Debug/../../obj/xcp.o
+ 0x00000f78 XcpPacketTransmitted
.text.XcpPacketReceived
- 0x00000ee4 0x37c ARM Flash Debug/../../obj/xcp.o
- 0x00000ee4 XcpPacketReceived
- 0x00001260 __text_end__ = (__text_start__ + SIZEOF (.text))
- 0x00001260 __text_load_end__ = __text_end__
+ 0x00000f8c 0x4f0 ARM Flash Debug/../../obj/xcp.o
+ 0x00000f8c XcpPacketReceived
+ 0x0000147c __text_end__ = (__text_start__ + SIZEOF (.text))
+ 0x0000147c __text_load_end__ = __text_end__
.vfp11_veneer 0x00000000 0x0
.vfp11_veneer 0x00000000 0x0 linker stubs
@@ -311,50 +322,45 @@ Linker script and memory map
.v4_bx 0x00000000 0x0
.v4_bx 0x00000000 0x0 linker stubs
0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .text is too large to fit in FLASH memory segment)
- 0x00001260 __dtors_load_start__ = ALIGN (__text_end__, 0x4)
+ 0x0000147c __dtors_load_start__ = ALIGN (__text_end__, 0x4)
-.dtors 0x00001260 0x0
- 0x00001260 __dtors_start__ = .
+.dtors 0x0000147c 0x0
+ 0x0000147c __dtors_start__ = .
*(SORT(.dtors.*))
*(.dtors)
- 0x00001260 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors))
- 0x00001260 __dtors_load_end__ = __dtors_end__
+ 0x0000147c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors))
+ 0x0000147c __dtors_load_end__ = __dtors_end__
0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .dtors is too large to fit in FLASH memory segment)
- 0x00001260 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4)
+ 0x0000147c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4)
-.ctors 0x00001260 0x0
- 0x00001260 __ctors_start__ = .
+.ctors 0x0000147c 0x0
+ 0x0000147c __ctors_start__ = .
*(SORT(.ctors.*))
*(.ctors)
- 0x00001260 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors))
- 0x00001260 __ctors_load_end__ = __ctors_end__
+ 0x0000147c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors))
+ 0x0000147c __ctors_load_end__ = __ctors_end__
0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .ctors is too large to fit in FLASH memory segment)
- 0x00001260 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4)
+ 0x0000147c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4)
-.rodata 0x00001260 0x1b8
- 0x00001260 __rodata_start__ = .
+.rodata 0x0000147c 0x14c
+ 0x0000147c __rodata_start__ = .
*(.rodata .rodata.* .gnu.linkonce.r.*)
- .rodata.pll_dividers.850
- 0x00001260 0x4 ARM Flash Debug/../../obj/main.o
- .rodata.str1.1
- 0x00001264 0x67 ARM Flash Debug/../../obj/main.o
- *fill* 0x000012cb 0x1 00
.rodata.flashLayout
- 0x000012cc 0xc0 ARM Flash Debug/../../obj/flash.o
- .rodata.str1.1
- 0x0000138c 0x84 ARM Flash Debug/../../obj/uart.o
+ 0x0000147c 0xc0 ARM Flash Debug/../../obj/flash.o
+ .rodata.str1.4
+ 0x0000153c 0x84 ARM Flash Debug/../../obj/uart.o
.rodata.xcpStationId
- 0x00001410 0x8 ARM Flash Debug/../../obj/xcp.o
- 0x00001418 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata))
- 0x00001418 __rodata_load_end__ = __rodata_end__
+ 0x000015c0 0x8 ARM Flash Debug/../../obj/xcp.o
+ 0x000015c8 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata))
+ 0x000015c8 __rodata_load_end__ = __rodata_end__
0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= (__FLASH_segment_start__ + 0x40000))), error: .rodata is too large to fit in FLASH memory segment)
- 0x00001418 __data_load_start__ = ALIGN (__rodata_end__, 0x4)
+ 0x000015c8 __data_load_start__ = ALIGN (__rodata_end__, 0x4)
-.data 0x4000023c 0x0 load address 0x00001418
+.data 0x4000023c 0x0 load address 0x000015c8
0x4000023c __data_start__ = .
*(.data .data.* .gnu.linkonce.d.*)
0x4000023c __data_end__ = (__data_start__ + SIZEOF (.data))
- 0x00001418 __data_load_end__ = (__data_load_start__ + SIZEOF (.data))
+ 0x000015c8 __data_load_end__ = (__data_load_start__ + SIZEOF (.data))
0x00000001 . = ASSERT ((((__data_load_start__ + SIZEOF (.data)) >= __FLASH_segment_start__) && ((__data_load_start__ + SIZEOF (.data)) <= (__FLASH_segment_start__ + 0x40000))), error: .data is too large to fit in FLASH memory segment)
.data_run 0x4000023c 0x0
@@ -365,7 +371,7 @@ Linker script and memory map
0x00000001 . = ASSERT (((__data_run_end__ >= __SRAM_segment_start__) && (__data_run_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .data_run is too large to fit in SRAM memory segment)
0x4000023c __bss_load_start__ = ALIGN (__data_run_end__, 0x4)
-.bss 0x4000023c 0x4ec
+.bss 0x4000023c 0x4f4
0x4000023c __bss_start__ = .
*(.bss .bss.* .gnu.linkonce.b.*)
.bss.bootBlockInfo
@@ -378,122 +384,124 @@ Linker script and memory map
0x40000648 0x4 ARM Flash Debug/../../obj/timer.o
.bss.xcpCtoRxLength.866
0x4000064c 0x1 ARM Flash Debug/../../obj/uart.o
+ *fill* 0x4000064d 0x3 00
.bss.xcpCtoReqPacket.865
- 0x4000064d 0x41 ARM Flash Debug/../../obj/uart.o
+ 0x40000650 0x44 ARM Flash Debug/../../obj/uart.o
.bss.xcpCtoRxInProgress.867
- 0x4000068e 0x1 ARM Flash Debug/../../obj/uart.o
- *fill* 0x4000068f 0x1 00
+ 0x40000694 0x1 ARM Flash Debug/../../obj/uart.o
+ *fill* 0x40000695 0x3 00
.bss.assert_failure_file
- 0x40000690 0x4 ARM Flash Debug/../../obj/assert.o
+ 0x40000698 0x4 ARM Flash Debug/../../obj/assert.o
.bss.assert_failure_line
- 0x40000694 0x4 ARM Flash Debug/../../obj/assert.o
+ 0x4000069c 0x4 ARM Flash Debug/../../obj/assert.o
.bss.backdoorOpen
- 0x40000698 0x1 ARM Flash Debug/../../obj/backdoor.o
+ 0x400006a0 0x1 ARM Flash Debug/../../obj/backdoor.o
.bss.comEntryStateConnect
- 0x40000699 0x1 ARM Flash Debug/../../obj/com.o
+ 0x400006a1 0x1 ARM Flash Debug/../../obj/com.o
+ *fill* 0x400006a2 0x2 00
.bss.xcpCtoReqPacket.855
- 0x4000069a 0x40 ARM Flash Debug/../../obj/com.o
- *fill* 0x400006da 0x2 00
- .bss.xcpInfo 0x400006dc 0x4c ARM Flash Debug/../../obj/xcp.o
+ 0x400006a4 0x40 ARM Flash Debug/../../obj/com.o
+ .bss.xcpInfo 0x400006e4 0x4c ARM Flash Debug/../../obj/xcp.o
*(COMMON)
- 0x40000728 __bss_end__ = (__bss_start__ + SIZEOF (.bss))
- 0x40000728 __bss_load_end__ = __bss_end__
+ 0x40000730 __bss_end__ = (__bss_start__ + SIZEOF (.bss))
+ 0x40000730 __bss_load_end__ = __bss_end__
0x00000001 . = ASSERT (((__bss_end__ >= __SRAM_segment_start__) && (__bss_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .bss is too large to fit in SRAM memory segment)
- 0x40000728 __non_init_load_start__ = ALIGN (__bss_end__, 0x4)
+ 0x40000730 __non_init_load_start__ = ALIGN (__bss_end__, 0x4)
-.non_init 0x40000728 0x0
- 0x40000728 __non_init_start__ = .
+.non_init 0x40000730 0x0
+ 0x40000730 __non_init_start__ = .
*(.non_init .non_init.*)
- 0x40000728 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init))
- 0x40000728 __non_init_load_end__ = __non_init_end__
+ 0x40000730 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init))
+ 0x40000730 __non_init_load_end__ = __non_init_end__
0x00000001 . = ASSERT (((__non_init_end__ >= __SRAM_segment_start__) && (__non_init_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .non_init is too large to fit in SRAM memory segment)
- 0x40000728 __heap_load_start__ = ALIGN (__non_init_end__, 0x4)
+ 0x40000730 __heap_load_start__ = ALIGN (__non_init_end__, 0x4)
-.heap 0x40000728 0x400
- 0x40000728 __heap_start__ = .
+.heap 0x40000730 0x400
+ 0x40000730 __heap_start__ = .
*(.heap .heap.*)
- 0x40000b28 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4)
- *fill* 0x40000728 0x400 00
- 0x40000b28 __heap_end__ = (__heap_start__ + SIZEOF (.heap))
- 0x40000b28 __heap_load_end__ = __heap_end__
+ 0x40000b30 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4)
+ *fill* 0x40000730 0x400 00
+ 0x40000b30 __heap_end__ = (__heap_start__ + SIZEOF (.heap))
+ 0x40000b30 __heap_load_end__ = __heap_end__
0x00000001 . = ASSERT (((__heap_end__ >= __SRAM_segment_start__) && (__heap_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .heap is too large to fit in SRAM memory segment)
- 0x40000b28 __stack_load_start__ = ALIGN (__heap_end__, 0x4)
+ 0x40000b30 __stack_load_start__ = ALIGN (__heap_end__, 0x4)
-.stack 0x40000b28 0x400
- 0x40000b28 __stack_start__ = .
+.stack 0x40000b30 0x400
+ 0x40000b30 __stack_start__ = .
*(.stack .stack.*)
- 0x40000f28 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4)
- *fill* 0x40000b28 0x400 00
- 0x40000f28 __stack_end__ = (__stack_start__ + SIZEOF (.stack))
- 0x40000f28 __stack_load_end__ = __stack_end__
+ 0x40000f30 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4)
+ *fill* 0x40000b30 0x400 00
+ 0x40000f30 __stack_end__ = (__stack_start__ + SIZEOF (.stack))
+ 0x40000f30 __stack_load_end__ = __stack_end__
0x00000001 . = ASSERT (((__stack_end__ >= __SRAM_segment_start__) && (__stack_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack is too large to fit in SRAM memory segment)
- 0x40000f28 __stack_irq_load_start__ = ALIGN (__stack_end__, 0x4)
+ 0x40000f30 __stack_irq_load_start__ = ALIGN (__stack_end__, 0x4)
-.stack_irq 0x40000f28 0x100
- 0x40000f28 __stack_irq_start__ = .
+.stack_irq 0x40000f30 0x100
+ 0x40000f30 __stack_irq_start__ = .
*(.stack_irq .stack_irq.*)
- 0x40001028 . = ALIGN (MAX ((__stack_irq_start__ + __STACKSIZE_IRQ__), .), 0x4)
- *fill* 0x40000f28 0x100 00
- 0x40001028 __stack_irq_end__ = (__stack_irq_start__ + SIZEOF (.stack_irq))
- 0x40001028 __stack_irq_load_end__ = __stack_irq_end__
+ 0x40001030 . = ALIGN (MAX ((__stack_irq_start__ + __STACKSIZE_IRQ__), .), 0x4)
+ *fill* 0x40000f30 0x100 00
+ 0x40001030 __stack_irq_end__ = (__stack_irq_start__ + SIZEOF (.stack_irq))
+ 0x40001030 __stack_irq_load_end__ = __stack_irq_end__
0x00000001 . = ASSERT (((__stack_irq_end__ >= __SRAM_segment_start__) && (__stack_irq_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_irq is too large to fit in SRAM memory segment)
- 0x40001028 __stack_fiq_load_start__ = ALIGN (__stack_irq_end__, 0x4)
+ 0x40001030 __stack_fiq_load_start__ = ALIGN (__stack_irq_end__, 0x4)
-.stack_fiq 0x40001028 0x100
- 0x40001028 __stack_fiq_start__ = .
+.stack_fiq 0x40001030 0x100
+ 0x40001030 __stack_fiq_start__ = .
*(.stack_fiq .stack_fiq.*)
- 0x40001128 . = ALIGN (MAX ((__stack_fiq_start__ + __STACKSIZE_FIQ__), .), 0x4)
- *fill* 0x40001028 0x100 00
- 0x40001128 __stack_fiq_end__ = (__stack_fiq_start__ + SIZEOF (.stack_fiq))
- 0x40001128 __stack_fiq_load_end__ = __stack_fiq_end__
+ 0x40001130 . = ALIGN (MAX ((__stack_fiq_start__ + __STACKSIZE_FIQ__), .), 0x4)
+ *fill* 0x40001030 0x100 00
+ 0x40001130 __stack_fiq_end__ = (__stack_fiq_start__ + SIZEOF (.stack_fiq))
+ 0x40001130 __stack_fiq_load_end__ = __stack_fiq_end__
0x00000001 . = ASSERT (((__stack_fiq_end__ >= __SRAM_segment_start__) && (__stack_fiq_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_fiq is too large to fit in SRAM memory segment)
- 0x40001128 __stack_svc_load_start__ = ALIGN (__stack_fiq_end__, 0x4)
+ 0x40001130 __stack_svc_load_start__ = ALIGN (__stack_fiq_end__, 0x4)
-.stack_svc 0x40001128 0x0
- 0x40001128 __stack_svc_start__ = .
+.stack_svc 0x40001130 0x0
+ 0x40001130 __stack_svc_start__ = .
*(.stack_svc .stack_svc.*)
- 0x40001128 . = ALIGN (MAX ((__stack_svc_start__ + __STACKSIZE_SVC__), .), 0x4)
- 0x40001128 __stack_svc_end__ = (__stack_svc_start__ + SIZEOF (.stack_svc))
- 0x40001128 __stack_svc_load_end__ = __stack_svc_end__
+ 0x40001130 . = ALIGN (MAX ((__stack_svc_start__ + __STACKSIZE_SVC__), .), 0x4)
+ 0x40001130 __stack_svc_end__ = (__stack_svc_start__ + SIZEOF (.stack_svc))
+ 0x40001130 __stack_svc_load_end__ = __stack_svc_end__
0x00000001 . = ASSERT (((__stack_svc_end__ >= __SRAM_segment_start__) && (__stack_svc_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_svc is too large to fit in SRAM memory segment)
- 0x40001128 __stack_abt_load_start__ = ALIGN (__stack_svc_end__, 0x4)
+ 0x40001130 __stack_abt_load_start__ = ALIGN (__stack_svc_end__, 0x4)
-.stack_abt 0x40001128 0x0
- 0x40001128 __stack_abt_start__ = .
+.stack_abt 0x40001130 0x0
+ 0x40001130 __stack_abt_start__ = .
*(.stack_abt .stack_abt.*)
- 0x40001128 . = ALIGN (MAX ((__stack_abt_start__ + __STACKSIZE_ABT__), .), 0x4)
- 0x40001128 __stack_abt_end__ = (__stack_abt_start__ + SIZEOF (.stack_abt))
- 0x40001128 __stack_abt_load_end__ = __stack_abt_end__
+ 0x40001130 . = ALIGN (MAX ((__stack_abt_start__ + __STACKSIZE_ABT__), .), 0x4)
+ 0x40001130 __stack_abt_end__ = (__stack_abt_start__ + SIZEOF (.stack_abt))
+ 0x40001130 __stack_abt_load_end__ = __stack_abt_end__
0x00000001 . = ASSERT (((__stack_abt_end__ >= __SRAM_segment_start__) && (__stack_abt_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_abt is too large to fit in SRAM memory segment)
- 0x40001128 __stack_und_load_start__ = ALIGN (__stack_abt_end__, 0x4)
+ 0x40001130 __stack_und_load_start__ = ALIGN (__stack_abt_end__, 0x4)
-.stack_und 0x40001128 0x0
- 0x40001128 __stack_und_start__ = .
+.stack_und 0x40001130 0x0
+ 0x40001130 __stack_und_start__ = .
*(.stack_und .stack_und.*)
- 0x40001128 . = ALIGN (MAX ((__stack_und_start__ + __STACKSIZE_UND__), .), 0x4)
- 0x40001128 __stack_und_end__ = (__stack_und_start__ + SIZEOF (.stack_und))
- 0x40001128 __stack_und_load_end__ = __stack_und_end__
+ 0x40001130 . = ALIGN (MAX ((__stack_und_start__ + __STACKSIZE_UND__), .), 0x4)
+ 0x40001130 __stack_und_end__ = (__stack_und_start__ + SIZEOF (.stack_und))
+ 0x40001130 __stack_und_load_end__ = __stack_und_end__
0x00000001 . = ASSERT (((__stack_und_end__ >= __SRAM_segment_start__) && (__stack_und_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .stack_und is too large to fit in SRAM memory segment)
- 0x00001418 __fast_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4)
+ 0x000015c8 __fast_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4)
-.fast 0x40001128 0x0 load address 0x00001418
- 0x40001128 __fast_start__ = .
+.fast 0x40001130 0x0 load address 0x000015c8
+ 0x40001130 __fast_start__ = .
*(.fast .fast.*)
- 0x40001128 __fast_end__ = (__fast_start__ + SIZEOF (.fast))
- 0x00001418 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast))
- 0x00001418 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.fast))
+ 0x40001130 __fast_end__ = (__fast_start__ + SIZEOF (.fast))
+ 0x000015c8 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast))
+ 0x000015c8 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.fast))
0x00000001 . = ASSERT ((((__fast_load_start__ + SIZEOF (.fast)) >= __FLASH_segment_start__) && ((__fast_load_start__ + SIZEOF (.fast)) <= (__FLASH_segment_start__ + 0x40000))), error: .fast is too large to fit in FLASH memory segment)
-.fast_run 0x40001128 0x0
- 0x40001128 __fast_run_start__ = .
- 0x40001128 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .)
- 0x40001128 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run))
- 0x40001128 __fast_run_load_end__ = __fast_run_end__
- 0x40001128 __SRAM_segment_used_end__ = (ALIGN (__stack_und_end__, 0x4) + SIZEOF (.fast_run))
+.fast_run 0x40001130 0x0
+ 0x40001130 __fast_run_start__ = .
+ 0x40001130 . = MAX ((__fast_run_start__ + SIZEOF (.fast)), .)
+ 0x40001130 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run))
+ 0x40001130 __fast_run_load_end__ = __fast_run_end__
+ 0x40001130 __SRAM_segment_used_end__ = (ALIGN (__stack_und_end__, 0x4) + SIZEOF (.fast_run))
0x00000001 . = ASSERT (((__fast_run_end__ >= __SRAM_segment_start__) && (__fast_run_end__ <= (__SRAM_segment_start__ + 0x4000))), error: .fast_run is too large to fit in SRAM memory segment)
START GROUP
LOAD ARM Flash Debug/../../obj/hooks.o
LOAD ARM Flash Debug/../../obj/main.o
+LOAD ARM Flash Debug/../../obj/extflash.o
LOAD ARM Flash Debug/../../obj/cstart.o
LOAD ARM Flash Debug/../../obj/flash.o
LOAD ARM Flash Debug/../../obj/can.o
@@ -518,91 +526,97 @@ LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib
END GROUP
OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/../bin/openbtl_olimex_lpc_l2294_20mhz.elf elf32-littlearm)
-.debug_info 0x00000000 0x188c
+.debug_info 0x00000000 0x1809
.debug_info 0x00000000 0x5a ARM Flash Debug/../../obj/hooks.o
- .debug_info 0x0000005a 0x111 ARM Flash Debug/../../obj/main.o
- .debug_info 0x0000016b 0x110 ARM Flash Debug/../../obj/cstart.o
- .debug_info 0x0000027b 0x5b2 ARM Flash Debug/../../obj/flash.o
- .debug_info 0x0000082d 0x5a ARM Flash Debug/../../obj/can.o
- .debug_info 0x00000887 0x13a ARM Flash Debug/../../obj/cpu.o
- .debug_info 0x000009c1 0x15e ARM Flash Debug/../../obj/nvm.o
- .debug_info 0x00000b1f 0x143 ARM Flash Debug/../../obj/timer.o
- .debug_info 0x00000c62 0x232 ARM Flash Debug/../../obj/uart.o
- .debug_info 0x00000e94 0xe4 ARM Flash Debug/../../obj/assert.o
- .debug_info 0x00000f78 0xa4 ARM Flash Debug/../../obj/backdoor.o
- .debug_info 0x0000101c 0x88 ARM Flash Debug/../../obj/boot.o
- .debug_info 0x000010a4 0x18b ARM Flash Debug/../../obj/com.o
- .debug_info 0x0000122f 0x86 ARM Flash Debug/../../obj/cop.o
- .debug_info 0x000012b5 0x5d7 ARM Flash Debug/../../obj/xcp.o
+ .debug_info 0x0000005a 0x116 ARM Flash Debug/../../obj/main.o
+ .debug_info 0x00000170 0x5a ARM Flash Debug/../../obj/extflash.o
+ .debug_info 0x000001ca 0x110 ARM Flash Debug/../../obj/cstart.o
+ .debug_info 0x000002da 0x539 ARM Flash Debug/../../obj/flash.o
+ .debug_info 0x00000813 0x5a ARM Flash Debug/../../obj/can.o
+ .debug_info 0x0000086d 0x13a ARM Flash Debug/../../obj/cpu.o
+ .debug_info 0x000009a7 0x15e ARM Flash Debug/../../obj/nvm.o
+ .debug_info 0x00000b05 0x119 ARM Flash Debug/../../obj/timer.o
+ .debug_info 0x00000c1e 0x1bf ARM Flash Debug/../../obj/uart.o
+ .debug_info 0x00000ddd 0xe4 ARM Flash Debug/../../obj/assert.o
+ .debug_info 0x00000ec1 0xa4 ARM Flash Debug/../../obj/backdoor.o
+ .debug_info 0x00000f65 0x88 ARM Flash Debug/../../obj/boot.o
+ .debug_info 0x00000fed 0x18b ARM Flash Debug/../../obj/com.o
+ .debug_info 0x00001178 0x86 ARM Flash Debug/../../obj/cop.o
+ .debug_info 0x000011fe 0x60b ARM Flash Debug/../../obj/xcp.o
-.debug_abbrev 0x00000000 0xa94
+.debug_abbrev 0x00000000 0xa6c
.debug_abbrev 0x00000000 0x28 ARM Flash Debug/../../obj/hooks.o
- .debug_abbrev 0x00000028 0xaf ARM Flash Debug/../../obj/main.o
- .debug_abbrev 0x000000d7 0x12 ARM Flash Debug/../../obj/cstart.o
- .debug_abbrev 0x000000e9 0x21f ARM Flash Debug/../../obj/flash.o
- .debug_abbrev 0x00000308 0x28 ARM Flash Debug/../../obj/can.o
- .debug_abbrev 0x00000330 0xaf ARM Flash Debug/../../obj/cpu.o
- .debug_abbrev 0x000003df 0xa3 ARM Flash Debug/../../obj/nvm.o
- .debug_abbrev 0x00000482 0xd9 ARM Flash Debug/../../obj/timer.o
- .debug_abbrev 0x0000055b 0x139 ARM Flash Debug/../../obj/uart.o
- .debug_abbrev 0x00000694 0x7c ARM Flash Debug/../../obj/assert.o
- .debug_abbrev 0x00000710 0x5b ARM Flash Debug/../../obj/backdoor.o
- .debug_abbrev 0x0000076b 0x3f ARM Flash Debug/../../obj/boot.o
- .debug_abbrev 0x000007aa 0xe0 ARM Flash Debug/../../obj/com.o
- .debug_abbrev 0x0000088a 0x3f ARM Flash Debug/../../obj/cop.o
- .debug_abbrev 0x000008c9 0x1cb ARM Flash Debug/../../obj/xcp.o
+ .debug_abbrev 0x00000028 0xc5 ARM Flash Debug/../../obj/main.o
+ .debug_abbrev 0x000000ed 0x28 ARM Flash Debug/../../obj/extflash.o
+ .debug_abbrev 0x00000115 0x12 ARM Flash Debug/../../obj/cstart.o
+ .debug_abbrev 0x00000127 0x21f ARM Flash Debug/../../obj/flash.o
+ .debug_abbrev 0x00000346 0x28 ARM Flash Debug/../../obj/can.o
+ .debug_abbrev 0x0000036e 0xaf ARM Flash Debug/../../obj/cpu.o
+ .debug_abbrev 0x0000041d 0xa3 ARM Flash Debug/../../obj/nvm.o
+ .debug_abbrev 0x000004c0 0xad ARM Flash Debug/../../obj/timer.o
+ .debug_abbrev 0x0000056d 0x110 ARM Flash Debug/../../obj/uart.o
+ .debug_abbrev 0x0000067d 0x7c ARM Flash Debug/../../obj/assert.o
+ .debug_abbrev 0x000006f9 0x5b ARM Flash Debug/../../obj/backdoor.o
+ .debug_abbrev 0x00000754 0x3f ARM Flash Debug/../../obj/boot.o
+ .debug_abbrev 0x00000793 0xe0 ARM Flash Debug/../../obj/com.o
+ .debug_abbrev 0x00000873 0x3f ARM Flash Debug/../../obj/cop.o
+ .debug_abbrev 0x000008b2 0x1ba ARM Flash Debug/../../obj/xcp.o
-.debug_line 0x00000000 0x1277
+.debug_line 0x00000000 0x1245
.debug_line 0x00000000 0x1d ARM Flash Debug/../../obj/hooks.o
- .debug_line 0x0000001d 0x14e ARM Flash Debug/../../obj/main.o
- .debug_line 0x0000016b 0x19e ARM Flash Debug/../../obj/cstart.o
- .debug_line 0x00000309 0x2e6 ARM Flash Debug/../../obj/flash.o
- .debug_line 0x000005ef 0x1d ARM Flash Debug/../../obj/can.o
- .debug_line 0x0000060c 0xf0 ARM Flash Debug/../../obj/cpu.o
- .debug_line 0x000006fc 0x110 ARM Flash Debug/../../obj/nvm.o
- .debug_line 0x0000080c 0x11b ARM Flash Debug/../../obj/timer.o
- .debug_line 0x00000927 0x16a ARM Flash Debug/../../obj/uart.o
- .debug_line 0x00000a91 0x139 ARM Flash Debug/../../obj/assert.o
- .debug_line 0x00000bca 0x156 ARM Flash Debug/../../obj/backdoor.o
- .debug_line 0x00000d20 0xbf ARM Flash Debug/../../obj/boot.o
- .debug_line 0x00000ddf 0x192 ARM Flash Debug/../../obj/com.o
- .debug_line 0x00000f71 0xb7 ARM Flash Debug/../../obj/cop.o
- .debug_line 0x00001028 0x24f ARM Flash Debug/../../obj/xcp.o
+ .debug_line 0x0000001d 0x13a ARM Flash Debug/../../obj/main.o
+ .debug_line 0x00000157 0x1d ARM Flash Debug/../../obj/extflash.o
+ .debug_line 0x00000174 0x19e ARM Flash Debug/../../obj/cstart.o
+ .debug_line 0x00000312 0x2db ARM Flash Debug/../../obj/flash.o
+ .debug_line 0x000005ed 0x1d ARM Flash Debug/../../obj/can.o
+ .debug_line 0x0000060a 0xf6 ARM Flash Debug/../../obj/cpu.o
+ .debug_line 0x00000700 0x112 ARM Flash Debug/../../obj/nvm.o
+ .debug_line 0x00000812 0x113 ARM Flash Debug/../../obj/timer.o
+ .debug_line 0x00000925 0x15e ARM Flash Debug/../../obj/uart.o
+ .debug_line 0x00000a83 0x137 ARM Flash Debug/../../obj/assert.o
+ .debug_line 0x00000bba 0x150 ARM Flash Debug/../../obj/backdoor.o
+ .debug_line 0x00000d0a 0xbf ARM Flash Debug/../../obj/boot.o
+ .debug_line 0x00000dc9 0x192 ARM Flash Debug/../../obj/com.o
+ .debug_line 0x00000f5b 0xb7 ARM Flash Debug/../../obj/cop.o
+ .debug_line 0x00001012 0x233 ARM Flash Debug/../../obj/xcp.o
-.debug_str 0x00000000 0xdaa
+.debug_str 0x00000000 0xe15
.debug_str 0x00000000 0xb1 ARM Flash Debug/../../obj/hooks.o
0xcf (size before relaxing)
.debug_str 0x000000b1 0xa4 ARM Flash Debug/../../obj/main.o
0x110 (size before relaxing)
- .debug_str 0x00000155 0x24d ARM Flash Debug/../../obj/flash.o
+ .debug_str 0x00000155 0x6b ARM Flash Debug/../../obj/extflash.o
+ 0xd2 (size before relaxing)
+ .debug_str 0x000001c0 0x24d ARM Flash Debug/../../obj/flash.o
0x2d8 (size before relaxing)
- .debug_str 0x000003a2 0x83 ARM Flash Debug/../../obj/can.o
+ .debug_str 0x0000040d 0x83 ARM Flash Debug/../../obj/can.o
0xea (size before relaxing)
- .debug_str 0x00000425 0xc7 ARM Flash Debug/../../obj/cpu.o
+ .debug_str 0x00000490 0xc7 ARM Flash Debug/../../obj/cpu.o
0x157 (size before relaxing)
- .debug_str 0x000004ec 0xb7 ARM Flash Debug/../../obj/nvm.o
+ .debug_str 0x00000557 0xb7 ARM Flash Debug/../../obj/nvm.o
0x14f (size before relaxing)
- .debug_str 0x000005a3 0x10b ARM Flash Debug/../../obj/timer.o
+ .debug_str 0x0000060e 0x10b ARM Flash Debug/../../obj/timer.o
0x17d (size before relaxing)
- .debug_str 0x000006ae 0x11f ARM Flash Debug/../../obj/uart.o
+ .debug_str 0x00000719 0x11f ARM Flash Debug/../../obj/uart.o
0x1b4 (size before relaxing)
- .debug_str 0x000007cd 0xb8 ARM Flash Debug/../../obj/assert.o
+ .debug_str 0x00000838 0xb8 ARM Flash Debug/../../obj/assert.o
0x134 (size before relaxing)
- .debug_str 0x00000885 0xa3 ARM Flash Debug/../../obj/backdoor.o
+ .debug_str 0x000008f0 0xa3 ARM Flash Debug/../../obj/backdoor.o
0x113 (size before relaxing)
- .debug_str 0x00000928 0x89 ARM Flash Debug/../../obj/boot.o
+ .debug_str 0x00000993 0x89 ARM Flash Debug/../../obj/boot.o
0xf0 (size before relaxing)
- .debug_str 0x000009b1 0x102 ARM Flash Debug/../../obj/com.o
+ .debug_str 0x00000a1c 0x102 ARM Flash Debug/../../obj/com.o
0x19c (size before relaxing)
- .debug_str 0x00000ab3 0x89 ARM Flash Debug/../../obj/cop.o
+ .debug_str 0x00000b1e 0x89 ARM Flash Debug/../../obj/cop.o
0xf0 (size before relaxing)
- .debug_str 0x00000b3c 0x26e ARM Flash Debug/../../obj/xcp.o
+ .debug_str 0x00000ba7 0x26e ARM Flash Debug/../../obj/xcp.o
0x312 (size before relaxing)
.comment 0x00000000 0x11
.comment 0x00000000 0x11 ARM Flash Debug/../../obj/hooks.o
0x12 (size before relaxing)
.comment 0x00000000 0x12 ARM Flash Debug/../../obj/main.o
+ .comment 0x00000000 0x12 ARM Flash Debug/../../obj/extflash.o
.comment 0x00000000 0x12 ARM Flash Debug/../../obj/flash.o
.comment 0x00000000 0x12 ARM Flash Debug/../../obj/can.o
.comment 0x00000000 0x12 ARM Flash Debug/../../obj/cpu.o
@@ -623,98 +637,100 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_
.ARM.attributes
0x00000010 0x10 ARM Flash Debug/../../obj/main.o
.ARM.attributes
- 0x00000020 0x10 ARM Flash Debug/../../obj/cstart.o
+ 0x00000020 0x10 ARM Flash Debug/../../obj/extflash.o
.ARM.attributes
- 0x00000030 0x10 ARM Flash Debug/../../obj/flash.o
+ 0x00000030 0x10 ARM Flash Debug/../../obj/cstart.o
.ARM.attributes
- 0x00000040 0x10 ARM Flash Debug/../../obj/can.o
+ 0x00000040 0x10 ARM Flash Debug/../../obj/flash.o
.ARM.attributes
- 0x00000050 0x10 ARM Flash Debug/../../obj/cpu.o
+ 0x00000050 0x10 ARM Flash Debug/../../obj/can.o
.ARM.attributes
- 0x00000060 0x10 ARM Flash Debug/../../obj/nvm.o
+ 0x00000060 0x10 ARM Flash Debug/../../obj/cpu.o
.ARM.attributes
- 0x00000070 0x10 ARM Flash Debug/../../obj/timer.o
+ 0x00000070 0x10 ARM Flash Debug/../../obj/nvm.o
.ARM.attributes
- 0x00000080 0x10 ARM Flash Debug/../../obj/uart.o
+ 0x00000080 0x10 ARM Flash Debug/../../obj/timer.o
.ARM.attributes
- 0x00000090 0x10 ARM Flash Debug/../../obj/assert.o
+ 0x00000090 0x10 ARM Flash Debug/../../obj/uart.o
.ARM.attributes
- 0x000000a0 0x10 ARM Flash Debug/../../obj/backdoor.o
+ 0x000000a0 0x10 ARM Flash Debug/../../obj/assert.o
.ARM.attributes
- 0x000000b0 0x10 ARM Flash Debug/../../obj/boot.o
+ 0x000000b0 0x10 ARM Flash Debug/../../obj/backdoor.o
.ARM.attributes
- 0x000000c0 0x10 ARM Flash Debug/../../obj/com.o
+ 0x000000c0 0x10 ARM Flash Debug/../../obj/boot.o
.ARM.attributes
- 0x000000d0 0x10 ARM Flash Debug/../../obj/cop.o
+ 0x000000d0 0x10 ARM Flash Debug/../../obj/com.o
.ARM.attributes
- 0x000000e0 0x10 ARM Flash Debug/../../obj/xcp.o
+ 0x000000e0 0x10 ARM Flash Debug/../../obj/cop.o
+ .ARM.attributes
+ 0x000000f0 0x10 ARM Flash Debug/../../obj/xcp.o
-.debug_frame 0x00000000 0x548
+.debug_frame 0x00000000 0x5a8
.debug_frame 0x00000000 0x2c ARM Flash Debug/../../obj/main.o
- .debug_frame 0x0000002c 0x14c ARM Flash Debug/../../obj/flash.o
- .debug_frame 0x00000178 0x68 ARM Flash Debug/../../obj/cpu.o
- .debug_frame 0x000001e0 0x9c ARM Flash Debug/../../obj/nvm.o
- .debug_frame 0x0000027c 0x6c ARM Flash Debug/../../obj/timer.o
- .debug_frame 0x000002e8 0x64 ARM Flash Debug/../../obj/uart.o
- .debug_frame 0x0000034c 0x2c ARM Flash Debug/../../obj/assert.o
- .debug_frame 0x00000378 0x48 ARM Flash Debug/../../obj/backdoor.o
- .debug_frame 0x000003c0 0x48 ARM Flash Debug/../../obj/boot.o
- .debug_frame 0x00000408 0xa0 ARM Flash Debug/../../obj/com.o
- .debug_frame 0x000004a8 0x30 ARM Flash Debug/../../obj/cop.o
- .debug_frame 0x000004d8 0x70 ARM Flash Debug/../../obj/xcp.o
+ .debug_frame 0x0000002c 0x160 ARM Flash Debug/../../obj/flash.o
+ .debug_frame 0x0000018c 0x68 ARM Flash Debug/../../obj/cpu.o
+ .debug_frame 0x000001f4 0x9c ARM Flash Debug/../../obj/nvm.o
+ .debug_frame 0x00000290 0x78 ARM Flash Debug/../../obj/timer.o
+ .debug_frame 0x00000308 0x90 ARM Flash Debug/../../obj/uart.o
+ .debug_frame 0x00000398 0x2c ARM Flash Debug/../../obj/assert.o
+ .debug_frame 0x000003c4 0x48 ARM Flash Debug/../../obj/backdoor.o
+ .debug_frame 0x0000040c 0x48 ARM Flash Debug/../../obj/boot.o
+ .debug_frame 0x00000454 0xa4 ARM Flash Debug/../../obj/com.o
+ .debug_frame 0x000004f8 0x30 ARM Flash Debug/../../obj/cop.o
+ .debug_frame 0x00000528 0x80 ARM Flash Debug/../../obj/xcp.o
-.debug_loc 0x00000000 0xb3b
- .debug_loc 0x00000000 0x99 ARM Flash Debug/../../obj/main.o
- .debug_loc 0x00000099 0x4e7 ARM Flash Debug/../../obj/flash.o
- .debug_loc 0x00000580 0xe2 ARM Flash Debug/../../obj/cpu.o
- .debug_loc 0x00000662 0xff ARM Flash Debug/../../obj/nvm.o
- .debug_loc 0x00000761 0x20 ARM Flash Debug/../../obj/timer.o
- .debug_loc 0x00000781 0xd9 ARM Flash Debug/../../obj/uart.o
- .debug_loc 0x0000085a 0x46 ARM Flash Debug/../../obj/assert.o
- .debug_loc 0x000008a0 0x40 ARM Flash Debug/../../obj/backdoor.o
- .debug_loc 0x000008e0 0x40 ARM Flash Debug/../../obj/boot.o
- .debug_loc 0x00000920 0xa6 ARM Flash Debug/../../obj/com.o
- .debug_loc 0x000009c6 0x175 ARM Flash Debug/../../obj/xcp.o
+.debug_loc 0x00000000 0xb16
+ .debug_loc 0x00000000 0x20 ARM Flash Debug/../../obj/main.o
+ .debug_loc 0x00000020 0x4a6 ARM Flash Debug/../../obj/flash.o
+ .debug_loc 0x000004c6 0x109 ARM Flash Debug/../../obj/cpu.o
+ .debug_loc 0x000005cf 0xff ARM Flash Debug/../../obj/nvm.o
+ .debug_loc 0x000006ce 0x40 ARM Flash Debug/../../obj/timer.o
+ .debug_loc 0x0000070e 0xe9 ARM Flash Debug/../../obj/uart.o
+ .debug_loc 0x000007f7 0x46 ARM Flash Debug/../../obj/assert.o
+ .debug_loc 0x0000083d 0x40 ARM Flash Debug/../../obj/backdoor.o
+ .debug_loc 0x0000087d 0x40 ARM Flash Debug/../../obj/boot.o
+ .debug_loc 0x000008bd 0xb2 ARM Flash Debug/../../obj/com.o
+ .debug_loc 0x0000096f 0x1a7 ARM Flash Debug/../../obj/xcp.o
-.debug_aranges 0x00000000 0x2b0
+.debug_aranges 0x00000000 0x2d0
.debug_aranges
0x00000000 0x20 ARM Flash Debug/../../obj/main.o
.debug_aranges
0x00000020 0x28 ARM Flash Debug/../../obj/cstart.o
.debug_aranges
- 0x00000048 0x68 ARM Flash Debug/../../obj/flash.o
+ 0x00000048 0x70 ARM Flash Debug/../../obj/flash.o
.debug_aranges
- 0x000000b0 0x30 ARM Flash Debug/../../obj/cpu.o
+ 0x000000b8 0x30 ARM Flash Debug/../../obj/cpu.o
.debug_aranges
- 0x000000e0 0x40 ARM Flash Debug/../../obj/nvm.o
+ 0x000000e8 0x40 ARM Flash Debug/../../obj/nvm.o
.debug_aranges
- 0x00000120 0x40 ARM Flash Debug/../../obj/timer.o
+ 0x00000128 0x40 ARM Flash Debug/../../obj/timer.o
.debug_aranges
- 0x00000160 0x30 ARM Flash Debug/../../obj/uart.o
+ 0x00000168 0x40 ARM Flash Debug/../../obj/uart.o
.debug_aranges
- 0x00000190 0x20 ARM Flash Debug/../../obj/assert.o
+ 0x000001a8 0x20 ARM Flash Debug/../../obj/assert.o
.debug_aranges
- 0x000001b0 0x28 ARM Flash Debug/../../obj/backdoor.o
+ 0x000001c8 0x28 ARM Flash Debug/../../obj/backdoor.o
.debug_aranges
- 0x000001d8 0x28 ARM Flash Debug/../../obj/boot.o
+ 0x000001f0 0x28 ARM Flash Debug/../../obj/boot.o
.debug_aranges
- 0x00000200 0x48 ARM Flash Debug/../../obj/com.o
+ 0x00000218 0x48 ARM Flash Debug/../../obj/com.o
.debug_aranges
- 0x00000248 0x28 ARM Flash Debug/../../obj/cop.o
+ 0x00000260 0x28 ARM Flash Debug/../../obj/cop.o
.debug_aranges
- 0x00000270 0x40 ARM Flash Debug/../../obj/xcp.o
+ 0x00000288 0x48 ARM Flash Debug/../../obj/xcp.o
-.debug_ranges 0x00000000 0x308
- .debug_ranges 0x00000000 0x50 ARM Flash Debug/../../obj/main.o
- .debug_ranges 0x00000050 0x20 ARM Flash Debug/../../obj/cstart.o
- .debug_ranges 0x00000070 0x58 ARM Flash Debug/../../obj/flash.o
- .debug_ranges 0x000000c8 0x20 ARM Flash Debug/../../obj/cpu.o
- .debug_ranges 0x000000e8 0x30 ARM Flash Debug/../../obj/nvm.o
- .debug_ranges 0x00000118 0x30 ARM Flash Debug/../../obj/timer.o
- .debug_ranges 0x00000148 0x90 ARM Flash Debug/../../obj/uart.o
- .debug_ranges 0x000001d8 0x10 ARM Flash Debug/../../obj/assert.o
- .debug_ranges 0x000001e8 0x18 ARM Flash Debug/../../obj/backdoor.o
- .debug_ranges 0x00000200 0x18 ARM Flash Debug/../../obj/boot.o
- .debug_ranges 0x00000218 0x38 ARM Flash Debug/../../obj/com.o
- .debug_ranges 0x00000250 0x18 ARM Flash Debug/../../obj/cop.o
- .debug_ranges 0x00000268 0xa0 ARM Flash Debug/../../obj/xcp.o
+.debug_ranges 0x00000000 0x208
+ .debug_ranges 0x00000000 0x10 ARM Flash Debug/../../obj/main.o
+ .debug_ranges 0x00000010 0x20 ARM Flash Debug/../../obj/cstart.o
+ .debug_ranges 0x00000030 0x60 ARM Flash Debug/../../obj/flash.o
+ .debug_ranges 0x00000090 0x20 ARM Flash Debug/../../obj/cpu.o
+ .debug_ranges 0x000000b0 0x30 ARM Flash Debug/../../obj/nvm.o
+ .debug_ranges 0x000000e0 0x30 ARM Flash Debug/../../obj/timer.o
+ .debug_ranges 0x00000110 0x30 ARM Flash Debug/../../obj/uart.o
+ .debug_ranges 0x00000140 0x10 ARM Flash Debug/../../obj/assert.o
+ .debug_ranges 0x00000150 0x18 ARM Flash Debug/../../obj/backdoor.o
+ .debug_ranges 0x00000168 0x18 ARM Flash Debug/../../obj/boot.o
+ .debug_ranges 0x00000180 0x38 ARM Flash Debug/../../obj/com.o
+ .debug_ranges 0x000001b8 0x18 ARM Flash Debug/../../obj/cop.o
+ .debug_ranges 0x000001d0 0x38 ARM Flash Debug/../../obj/xcp.o
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.srec b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.srec
index 2c358d52..9d92f99a 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.srec
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.srec
@@ -38,7 +38,7 @@ S1130228280000EB2C019FE52C119FE5001041E00C
S1130238080051E30020A0A3042080A4001080A596
S1130248E8009FE5E8109FE5010050E1BEFFFF0AC2
S1130258042090E403002DE90FE0A0E112FF2FE150
-S11302680300BDE8B0FFFFEAF30200EB0000A0E3DF
+S11302680300BDE8B0FFFFEA180300EB0000A0E3B9
S11302780010A0E3E4209FE50FE0A0E112FF2FE1C6
S1130288010050E10EF0A001012052E00EF0A0019F
S1130298013080E1023083E1030013E30400001A13
@@ -47,279 +47,306 @@ S11302B80EF0A0E10130D0E40130C1E4012052E2A3
S11302C8FBFFFF1A0EF0A0E1010050E10EF0A001BF
S11302D80120C0E4FBFFFFEAFEFFFFEAFEFFFFEA9E
S11302E8FEFFFFEAFEFFFFEAFEFFFFEA40C01FE051
-S11302F8281100402811004028100040281100400F
-S113030828110040280F0040181400003C02004047
-S11303183C020040700300007003000060120000FB
-S11303281814000028110040281100406012000031
-S113033860120000601200006012000060120000E9
-S1130348601200006012000060120000181400001F
-S11303583C0200402807004028070040280B0040C2
+S11302F830110040301100403010004030110040EF
+S113030830110040300F0040C81500003C02004086
+S11303183C02004070030000700300007C140000DD
+S1130328C815000030110040301100407C14000052
+S11303387C1400007C1400007C1400007C14000071
+S11303487C1400007C1400007C140000C815000014
+S11303583C0200403007004030070040300B0040AA
S10B0368700300000000A0E195
-S113037004E02DE5E4009FE5E4109FE5E4209FE51B
-S11303800040A0E300C0D4E7910C0CE026CA4CE284
-S113039016CE4CE202005CE1FF3004E20300009A56
-S11303A0014084E2040054E3F5FFFF1A260000EA4A
-S11303B08322A0E1022082E3AC309FE5FF2002E229
-S11303C08420C3E55510E0E35520A0E30100A0E339
-S11303D08C10C3E58C20C3E58000C3E58C10C3E515
-S11303E08C20C3E50320A0E1B818D2E1010B11E38E
-S11303F074309FE5FBFFFF0A0320A0E38020C3E5E0
-S11304005520E0E38C20C3E55520A0E38C20C3E510
-S11304100020A0E30020C3E50420A0E30420C3E5FA
-S11304200220A0E30020C3E50120A0E30021C3E5EE
-S11304301D3843E2002093E5052082E3002083E594
-S1130440540200EB5A0200EBFDFFFFEA1C009FE59B
-S11304507010A0E32C0200EB0430A0E1D3FFFFEA0C
-S113046060120000C0D40100A080020000C01FE0A0
-S11304706412000070402DE950509FE50060A0E137
-S11304800040A0E3780200EB003095E5030056E15C
-S11304900700003A042095E5023083E0030056E1AA
-S11304A028309F350C20A033923424300800D435F2
-S11304B00400003A014084E2100054E30C5085E249
-S11304C0EFFFFF1AFF00A0E37040BDE81EFF2FE11D
-S11304D0CC120000F0452DE90070A0E120D04DE2DF
-S11304E0000090E5E2FFFFEBFF0050E32F00000A5D
-S11304F03230A0E30160A0E300308DE504008DE517
-S113050008008DE514608DE53A51E0E3560200EBF6
-S11305100D00A0E114108DE20FE0A0E115FF2FE122
-S113052014809DE5000058E32000001A3330A0E356
-S11305300740A0E100308DE5043094E418008DE913
-S113054078309FE502ACA0E310308DE50CA08DE57A
-S113055014608DE5440200EB0D00A0E114108DE25F
-S11305600FE0A0E115FF2FE114309DE5000053E3F7
-S11305700800A0110E00001A3830A0E300308DE509
-S1130580003097E514608DE518048DE9360200EB20
-S11305900D00A0E114108DE20FE0A0E115FF2FE1A2
-S11305A014009DE5010070E20000A033000000EAA1
-S11305B00000A0E320D08DE2F045BDE81EFF2FE14E
-S11305C060EA000074309FE5030050E130402DE9FB
-S11305D00040A0E10150A0E10500000A020A51E335
-S11305E00500000ABAFFFFEB000050E30300001A05
-S11305F00E0000EA48409FE5000000EA0340A0E145
-S1130600853BB0E10040A0130900001A003094E5D6
-S1130610050053E10600000A0400A0E1045080E450
-S11306200510A0E1022CA0E3DF0000EB000000EACB
-S11306300040A0E10400A0E13040BDE81EFF2FE12E
-S11306403C02004040040040F0452DE90380A0E155
-S1130650003090E57F7FC1E3010073E30040A0E137
-S11306600150A0E10260A0E10370C7E304708004BC
-S11306700710A001022CA003CB00000B003094E56E
-S1130680070053E10400000A0400A0E10710A0E100
-S1130690CBFFFFEB004050E21800000A003094E565
-S11306A0055063E0045085E25CA09FE5055084E0BA
-S11306B0027C87E2EC0100EB043084E2053063E065
-S11306C00A0053E10500009A0400A0E10710A0E12C
-S11306D0BBFFFFEB004050E20800000A045084E234
-S11306E0018048E20130D6E40888A0E12888B0E11E
-S11306F00130C5E4EEFFFF1A0100A0E3000000EAA8
-S11307000400A0E1F045BDE81EFF2FE1FF01000059
-S113071010209FE50030E0E3003082E508209FE5EB
-S1130720003082E51EFF2FE1400400403C020040FF
-S113073070402DE90040A0E10160A0E10250A0E179
-S11307404BFFFFEBFF0050E30F00000A010044E2FF
-S1130750060080E046FFFFEBFF0050E30A00000ABA
-S11307607F3FC4E30330C3E3020A53E324009F053D
-S11307700638A0E120009F152338A0E10410A0E171
-S11307800520A0E17040BDE8AEFFFFEA0000A0E351
-S11307907040BDE81EFF2FE13C02004040040040D1
-S11307A0F0452DE920D04DE20160A0E10050A0E128
-S11307B02FFFFFEB0040A0E1010045E2060080E0CE
-S11307C02BFFFFEBFF0054E3FF0050130060A01366
-S11307D00160A0030050A0E10060A0032C00000A07
-S11307E0000054E12A00008A000054E30460A001E0
-S11307F02700000A100050E32500008A3230A0E3ED
-S11308000180A0E338008DE814808DE53A71E0E3BF
-S1130810950100EB0D00A0E114108DE20FE0A0E1C2
-S113082017FF2FE114A09DE500005AE31800001AF9
-S11308303430A0E338008DE864309FE514808DE502
-S11308400C308DE5880100EB0D00A0E114108DE261
-S11308500FE0A0E117FF2FE114309DE5000053E302
-S11308600A60A0110A00001A3530A0E338008DE8B0
-S113087014808DE57C0100EB0D00A0E114108DE2E5
-S11308800FE0A0E117FF2FE114609DE5016076E21F
-S11308900060A0330600A0E120D08DE2F045BDE861
-S11308A01EFF2FE160EA0000023AA0E3050093E88E
-S11308B0000082E0082093E5020080E00C2093E52C
-S11308C0020080E0102093E5020080E0142093E50C
-S11308D0020080E0182093E51C3093E5020080E0DC
-S11308E0030080E0010070E20000A0331EFF2FE14E
-S11308F05C309FE511402DE9140093E9024084E047
-S11309000C2093E5024084E0102093E5024084E04B
-S1130910142093E5024084E01C2093E5203093E505
-S1130920024084E0034084E0004064E200408DE53E
-S1130930DCFFFFEB000054E10100A00314009F154D
-S11309400410A0130D20A01178FFFF1B1840BDE870
-S11309501EFF2FE13C0200401420000040009FE5F0
-S1130960003090E5010073E304E02DE50200000A85
-S1130970D7FEFFEB000050E30700000A24009FE5C8
-S1130980003090E5010073E30100A0030200000AB7
-S1130990CFFEFFEB000090E20100A01304E09DE411
-S11309A01EFF2FE13C020040400400400228A0E169
-S11309B070402DE90140A0E12258A0E10060A0E1CF
-S11309C0050000EA0130D4E40130C6E4260100EB5E
-S11309D0015045E20558A0E12558A0E1000055E387
-S11309E0F7FFFF1A7040BDE81EFF2FE104E02DE57C
-S11309F01E0000EB000050E30900000A4020A0E3C1
-S1130A000101A0E3021AA0E3E7FFFFEB18309FE522
-S1130A100220A0E3402083E50131A0E30FE0A0E140
-S1130A2013FF2FE104E09DE41EFF2FE100C01FE04F
-S1130A3004E02DE585FDFFEB04E09DE41EFF2FE1BE
-S1130A4004E02DE531FFFFEB04E09DE41EFF2FE100
-S1130A5004E02DE535FFFFEB04E09DE41EFF2FE1EC
-S1130A6004E02DE54DFFFFEB04E09DE41EFF2FE1C4
-S1130A7004E02DE58BFFFFEB04E09DE41EFF2FE176
-S1130A8004E02DE599FFFFEB000050E3B2FFFF1BEC
-S1130A9004E09DE41EFF2FE130309FE530109FE518
-S1130AA00020A0E3142083E5282083E50C1083E5CF
-S1130AB00110A0E3041083E5081093E514309FE5CA
-S1130AC0001083E510309FE5002083E51EFF2FE131
-S1130AD0004000E05FEA0000480600404406004091
-S1130AE014309FE50020A0E3042083E50C2083E577
-S1130AF0082083E5102083E51EFF2FE1004000E07D
-S1130B0024309FE524109FE5082093E520309FE5DD
-S1130B10000091E500C093E5000082E000006CE075
-S1130B20000081E5002083E51EFF2FE1004000E086
-S1130B30440600404806004004E02DE5EFFFFFEBCB
-S1130B4008309FE5000093E504E09DE41EFF2FE1DB
-S1130B504406004034309FE50020A0E37F10E0E32A
-S1130B600420C3E50820C3E51420C3E50C10C3E545
-S1130B704110A0E30010C3E50420C3E50320A0E373
-S1130B800C20C3E50720A0E30820C3E51EFF2FE1E6
-S1130B9000C000E0F0412DE9FF6001E2400056E3AF
-S1130BA00080A0E1A0009F858310A0835600008BE5
-S1130BB098409FE51430D4E5200013E30060C41589
-S1130BC00100001A040000EAA70000EB1430D4E589
-S1130BD0200013E3FBFFFF0A020000EA68009FE520
-S1130BE08610A0E3480000EB60509FE50040A0E3BE
-S1130BF00570A0E10F0000EA9B0000EB1420D5E58E
-S1130C000430D8E7200012E30030C5150100001AB3
-S1130C10040000EA940000EB1430D7E5200013E34D
-S1130C20FBFFFF0A020000EA1C009FE58E10A0E310
-S1130C30350000EB014084E20438A0E1230856E1CA
-S1130C40ECFFFF8AF041BDE81EFF2FE18C1300008A
-S1130C5000C000E030402DE99C409FE50020D4E531
-S1130C60000052E394309FE50B00001A1410D3E502
-S1130C70011011E20120A0011C00000A0010D3E5BC
-S1130C807C309FE50010C3E50130A0E30030C4E5EB
-S1130C9070309FE50020C3E5140000EA1420D3E57A
-S1130CA060C09FE5012012E20050DCE50F00000A5D
-S1130CB04C109FE50020D3E5053081E00120C3E519
-S1130CC0013085E20020D1E5FF3003E2030052E168
-S1130CD00030CCE50020A0130400001A011081E2CA
-S1130CE031FFFFEB0030A0E30030C4E50120A0E3B6
-S1130CF00200A0E13040BDE81EFF2FE18E06004057
-S1130D0000C000E04D0600404C06004014309FE552
-S1130D1004E02DE5000083E50C309FE5001083E539
-S1130D20510000EBFDFFFFEA9006004094060040EE
-S1130D3010402DE9470000EB010050E30A00000ACF
-S1130D402C409FE50030D4E5010053E30600001A6F
-S1130D5078FFFFEB310050E30300009A0030A0E37A
-S1130D600030C4E55DFFFFEB1FFFFFEB1040BDE863
-S1130D701EFF2FE19806004014309FE50120A0E3F8
-S1130D8004E02DE50020C3E542FFFFEB04E09DE411
-S1130D90E6FFFFEA9806004004E02DE5310000EB91
-S1130DA0F4FFFFEB25FFFFEB070000EB04E09DE4FD
-S1130DB01EFF2FE104E02DE52B0000EB110000EBFA
-S1130DC0DAFFFFEB04E09DE41EFF2FE101402DE973
-S1130DD00030E0E30030CDE50030A0E30130CDE5A4
-S1130DE02A0000EB5AFFFFEB14309FE50030D3E5F7
-S1130DF0010053E30D00A0013900000B0840BDE8D9
-S1130E001EFF2FE19906004004E02DE514009FE544
-S1130E108FFFFFEB010050E308009F053000000B3B
-S1130E2004E09DE41EFF2FE19A06004004E02DE556
-S1130E30FF1001E256FFFFEB240000EB04E09DE409
-S1130E401EFF2FE108309FE50120A0E30020C3E549
-S1130E501EFF2FE19906004004E02DE5150000EB8C
-S1130E6004E09DE41EFF2FE11EFF2FE11EFF2FE192
-S1130E7014309FE50120E0E30320C3E50220A0E352
-S1130E800400C3E5B424C3E11EFF2FE1DC060040E7
-S1130E901C309FE50020A0E30020C3E5482083E543
-S1130EA04320C3E5B424C3E10220C3E50120C3E524
-S1130EB01EFF2FE1DC0600400C309FE50000D3E567
-S1130EC0000090E20100A0131EFF2FE1DC060040A9
-S1130ED008309FE50020A0E34320C3E51EFF2FE177
-S1130EE0DC06004070402DE90030D0E5FF0053E3FC
-S1130EF00050A0E158439FE50D00001A0010E0E304
-S1130F000310C4E51010A0E30020A0E30130A0E327
-S1130F100410C4E54010A0E30120C4E50030C4E59A
-S1130F200520C4E50610C4E50710C4E50820C4E59F
-S1130F30640000EA0060D4E5010056E3C200001A30
-S1130F40F30053E33900000A0D00008ACF0053E395
-S1130F50AA00000A0400008AC90053E36E00000AD4
-S1130F60CC0053E3AC00001AA90000EAD10053E31B
-S1130F709C00000A7400003AD20053E3A600001A51
-S1130F808B0000EAFA0053E34300000A0500008ADC
-S1130F90F50053E30A00000A0F00003AF60053E399
-S1130FA09D00001A1D0000EAFD0053E34B00000AF7
-S1130FB0FE0053E35400000AFC0053E39600001AB9
-S1130FC0440000EA0120D0E53F0052E3040084928B
-S1130FD0481094950700009A5E0000EA0130D0E5BD
-S1130FE03F0053E35B00008A041090E5481084E559
-S1130FF00120D5E5040084E26BFEFFEB0030E0E362
-S11310000330C4E5483094E50120D5E5033082E09F
-S1131010483084E50130D5E5013083E26F0000EA11
-S11310200030E0E30330C4E5043090E5440000EA16
-S11310300030E0E30330C4E50030A0E3480094E569
-S1131040041095E50320A0E1030000EA00C0D3E703
-S11310500C2082E0FF2002E2013083E2010053E130
-S1131060F9FFFF1AE8319FE50720C3E5222CA0E130
-S11310700A20C3E50120A0E30010A0E30420C3E597
-S11310800820A0E30810C3E50910C3E50510C3E573
-S11310900610C3E5B424C3E1610000EA0030E0E3D4
-S11310A00330C4E5AC319FE50720A0E3483084E574
-S11310B00030A0E30430C4E50530C4E50630C4E5DF
-S11310C00720C4E50830C4E50930C4E50A30C4E5A6
-S11310D00830A0E3410000EA0000A0E34F0000EA6A
-S11310E00030E0E30120D4E50330C4E50030A0E3A0
-S11310F00430C4E50630C4E50730C4E50830C4E56F
-S11311000520C4E50630A0E3340000EA0030A0E383
-S11311100030C4E50130C4E5390000EA480094E534
-S11311203F10A0E3012085E248FEFFEB000050E3FE
-S11311303700000A0030E0E30330C4E5483094E5AA
-S11311403F3083E2483084E52F0000EA0130D0E5E7
-S11311503E0053E30100009A2200A0E32F0000EABE
-S11311600030E0E30330C4E5B464C4E10110D0E529
-S1131170000051E30300001A40FEFFEB000050E3BF
-S11311802700001A220000EAC4409FE5022085E2FD
-S1131190480094E52DFEFFEB000050E31C00000A1C
-S11311A00120D5E5483094E5033082E0483084E5F9
-S11311B01B0000EA0030E0E34020A0E30330C4E574
-S11311C00620C4E50030A0E30430C4E50530C4E5DE
-S11311D00730C4E50830C4E50930C4E50730A0E3AE
-S11311E0B434C4E10E0000EA480094E5041095E527
-S11311F01AFEFFEB000050E30100001A040000EAAD
-S11312000AFEFFEB0030E0E30330C4E5B464C4E15C
-S1131210030000EA3100A0E3000000EA2000A0E39C
-S113122012FFFFEB28409FE54330D4E5010053E370
-S11312301000A0030DFFFF0B0130A0E318009FE591
-S1131240B414D4E14330C4E5F7FEFFEB7040BDE8CD
-S11312501EFF2FE1DC06004010140000DF060040F2
-S113126001020408443A2F7573722F666561736531
-S1131270722F736F6674776172652F4F70656E425B
-S11312804C542F5461726765742F44656D6F2F4100
-S1131290524D375F4C5043323030305F4F6C696D84
-S11312A065785F4C50435F4C323239345F43726F20
-S11312B07373776F726B732F426F6F742F696465EA
-S11312C02F2E2E2F6D61696E2E630000002000000A
-S11312D00020000001000000004000000020000089
-S11312E00200000000600000002000000300000075
-S11312F000800000002000000400000000A00000A6
-S1131300002000000500000000C0000000200000D4
-S11313100600000000E000000020000007000000BC
-S113132000000100000001000800000000000200AD
-S1131330000001000900000000000300002000007C
-S11313400A00000000200300002000000B00000041
-S113135000400300002000000C00000000600300B7
-S1131360002000000D0000000080030000200000A9
-S11313700E00000000A00300002000000F00000089
-S113138000C003000020000010000000443A2F7544
-S113139073722F6665617365722F736F66747761FC
-S11313A072652F4F70656E424C542F54617267659D
-S11313B0742F44656D6F2F41524D375F4C5043324B
-S11313C03030305F4F6C696D65785F4C50435F4CD3
-S11313D0323239345F43726F7373776F726B732F6A
-S11313E0426F6F742F6964652F2E2E2F2E2E2F2E91
-S11313F02E2F2E2E2F536F757263652F41524D374A
-S11314005F4C5043323030302F756172742E63005C
-S10B14104F70656E424C54005C
+S113037004E02DE588309FE52220A0E38420C3E536
+S11303805510E0E38C10C3E55520A0E38C20C3E5B1
+S11303900100A0E38000C3E58C10C3E58C20C3E515
+S11303A0B828D3E1010B12E3FCFFFF0A50309FE5AC
+S11303B00320A0E38020C3E55520E0E38C20C3E5BF
+S11303C05520A0E38C20C3E50020A0E30020C3E572
+S11303D00420A0E30420C3E50220A0E30020C3E539
+S11303E00120A0E30021C3E51D3843E2002093E58A
+S11303F0052082E3002083E5890200EB8F0200EBF5
+S1130400FDFFFFEA00C01FE070402DE90060A0E19D
+S113041050509FE50040A0E3B80200EB003095E5A2
+S1130420060053E10800008A041095E5013083E0DA
+S1130430030056E10400002A842084E024309FE570
+S1130440022183E00800D2E5040000EA014084E2CE
+S11304500C5085E2100054E3EEFFFF1AFF00A0E306
+S11304607040BDE81EFF2FE17C14000030402DE9F0
+S113047020D04DE20040A0E1000090E5E1FFFFEB59
+S1130480FF0050E30000A0033700000A3230A0E36D
+S11304900C308DE510008DE514008DE50130A0E3EE
+S11304A000308DE5950200EB0C008DE20D10A0E10B
+S11304B03A31E0E30FE0A0E113FF2FE100309DE5C6
+S11304C0000053E30000A0132700001A3330A0E318
+S11304D00C308DE50450A0E1043095E410308DE536
+S11304E014508DE5023CA0E318308DE584309FE57F
+S11304F01C308DE50130A0E300308DE57F0200EB78
+S11305000C008DE20D10A0E13A31E0E30FE0A0E130
+S113051013FF2FE100309DE5000053E30000A0131A
+S11305201100001A3830A0E30C308DE5003094E55A
+S113053010308DE514508DE5023CA0E318308DE5B4
+S11305400130A0E300308DE56C0200EB0C008DE27D
+S11305500D10A0E13A31E0E30FE0A0E113FF2FE139
+S113056000009DE5010070E20000A03320D08DE280
+S11305703040BDE81EFF2FE160EA000004E02DE5F5
+S1130580813BB0E10000A0130700001A003090E5A1
+S1130590010053E10100A0030300000A041080E4F9
+S11305A0022CA0E3090100EB0100A0E304E09DE4B8
+S11305B01EFF2FE130402DE90040A0E10150A0E1F1
+S11305C050309FE5030050E10500000A020A51E3A0
+S11305D00500000AA4FFFFEB000050E30300001A2B
+S11305E0080000EA30409FE5000000EA24409FE54F
+S11305F00400A0E10510A0E1DFFFFFEB000050E3E1
+S11306000040A003000000EA0040A0E30400A0E1D1
+S11306103040BDE81EFF2FE13C0200404004004092
+S1130620F0452DE90050A0E10140A0E10260A0E105
+S11306300370A0E1A1A4A0E18AA4A0E1003090E5A8
+S1130640010073E30400001A0A10A0E1CAFFFFEBE3
+S1130650000050E30000A0032400000A003095E5E8
+S11306600A0053E10500000A0500A0E10A10A0E118
+S1130670CFFFFFEB005050E20000A0031B00000A74
+S1130680003095E5044063E0044084E2044085E0E2
+S1130690013086E2018047E20888A0E1288883E0EF
+S11306A050709FE502AC8AE2140200EB043085E24C
+S11306B0043063E0070053E10500009A0500A0E15F
+S11306C00A10A0E1BAFFFFEB005050E20600000A56
+S11306D0044085E20130D6E40130C4E4080056E168
+S11306E0F0FFFF1A0100A0E3000000EA0000A0E30D
+S11306F0F045BDE81EFF2FE1FF0100000030E0E3FC
+S11307000C209FE5003082E508209FE5003082E55B
+S11307101EFF2FE1400400403C02004070402DE9E0
+S11307200040A0E10150A0E10260A0E135FFFFEB31
+S1130730FF0050E30000A0030E00000A010044E2A1
+S1130740050080E02FFFFFEBFF0050E30000A00353
+S11307500800000AA434A0E1100053E30538A0E126
+S113076018009F0518009F150410A0E10620A0E1C1
+S11307702338A0E1A9FFFFEB7040BDE81EFF2FE185
+S11307803C0200404004004070402DE920D04DE27E
+S11307900050A0E10160A0E11AFFFFEB0040A0E1DE
+S11307A0010045E2060080E016FFFFEB0050A0E1E7
+S11307B0FF0050E3FF0054130000A0033900000AB7
+S11307C0050054E10000A0833600008A000054E3D1
+S11307D00000A0033300000A100055E30000A083CA
+S11307E03000008A3230A0E300308DE504408DE50E
+S11307F008508DE50130A0E314308DE5BF0100EB16
+S11308000D00A0E114108DE23A31E0E30FE0A0E125
+S113081013FF2FE114309DE5000053E30000A01303
+S11308202000001A3430A0E300308DE504408DE54B
+S113083008508DE578309FE50C308DE50130A0E35C
+S113084014308DE5AD0100EB0D00A0E114108DE234
+S11308503A31E0E30FE0A0E113FF2FE114309DE50E
+S1130860000053E30000A0130E00001A3530A0E38B
+S113087000308DE504408DE508508DE50130A0E39E
+S113088014308DE59D0100EB0D00A0E114108DE204
+S11308903A31E0E30FE0A0E113FF2FE114009DE5FE
+S11308A0010070E20000A03320D08DE27040BDE86A
+S11308B01EFF2FE160EA0000023AA0E3050093E87E
+S11308C0000082E0082093E5020080E00C2093E51C
+S11308D0020080E0102093E5020080E0142093E5FC
+S11308E0020080E0182093E5020080E01C3093E5CC
+S11308F0030080E0010070E20000A0331EFF2FE13E
+S113090010402DE904D04DE25C309FE5140093E9DA
+S1130910024084E00C2093E5024084E0102093E53B
+S1130920024084E0142093E5024084E01C2093E517
+S1130930024084E0203093E5034084E0004064E218
+S113094000408DE5DBFFFFEB000054E10100A00354
+S113095018009F150410A0130D20A0116EFFFF1B9B
+S113096004D08DE21040BDE81EFF2FE13C020040A0
+S11309701420000004E02DE548309FE5003093E5A5
+S1130980010073E30400000A38009FE5B6FEFFEBA4
+S1130990000050E30000A0030800000A28309FE58F
+S11309A0003093E5010073E30100A0030300000A93
+S11309B014009FE5ACFEFFEB000090E20100A013E1
+S11309C004E09DE41EFF2FE13C020040400400408F
+S11309D070402DE90160A0E10228A0E12228B0E1E5
+S11309E00900000A0040A0E1010080E2012042E287
+S11309F00258A0E1255880E00130D6E40130C4E477
+S1130A003E0100EB050054E1FAFFFF1A7040BDE817
+S1130A101EFF2FE104E02DE51E0000EB000050E373
+S1130A200900000A0101A0E3021AA0E34020A0E3A8
+S1130A30E6FFFFEB0220A0E314309FE5402083E5AE
+S1130A400131A0E30FE0A0E113FF2FE104E09DE4F6
+S1130A501EFF2FE100C01FE004E02DE57BFDFFEB4E
+S1130A6004E09DE41EFF2FE104E02DE522FFFFEBEF
+S1130A7004E09DE41EFF2FE104E02DE526FFFFEBDB
+S1130A8004E09DE41EFF2FE104E02DE53DFFFFEBB4
+S1130A9004E09DE41EFF2FE104E02DE585FFFFEB5C
+S1130AA004E09DE41EFF2FE104E02DE593FFFFEB3E
+S1130AB0000050E30000A003ADFFFF1B04E09DE431
+S1130AC01EFF2FE114309FE50020A0E3042083E5FE
+S1130AD00C2083E5082083E5102083E51EFF2FE129
+S1130AE0004000E024309FE5082093E520109FE5B6
+S1130AF0000091E5000082E018309FE500C093E516
+S1130B0000006CE0000081E5002083E51EFF2FE17A
+S1130B10004000E0440600404806004004309FE5E1
+S1130B20000083E51EFF2FE14406004004E02DE5AC
+S1130B3030309FE50000A0E3140083E5280083E53E
+S1130B4024209FE50C2083E50120A0E3042083E515
+S1130B50082093E514309FE5002083E5EEFFFFEBCA
+S1130B6004E09DE41EFF2FE1004000E05FEA000086
+S1130B704806004004E02DE5D9FFFFEB08309FE56F
+S1130B80000093E504E09DE41EFF2FE144060040CD
+S1130B901C309FE51430D3E5010013E310309F159A
+S1130BA00030D3150030C0150100A0130000A003CD
+S1130BB01EFF2FE100C000E010402DE944309FE506
+S1130BC01430D3E5200013E30000A0030B00000A57
+S1130BD030309FE50000C3E51430D3E5200013E373
+S1130BE00100A0130500001A18409FE5C30000EBA4
+S1130BF01430D4E5200013E3FBFFFF0A0100A0E357
+S1130C001040BDE81EFF2FE100C000E034309FE536
+S1130C100020A0E30420C3E50820C3E51420C3E5B5
+S1130C207F10E0E30C10C3E54110A0E30010C3E51E
+S1130C300420C3E50320A0E30C20C3E50720A0E3C0
+S1130C400820C3E51EFF2FE100C000E0F0412DE9BC
+S1130C500050A0E1FF4001E2400054E368009F859A
+S1130C608310A0834900008B0400A0E1D1FFFFEBB7
+S1130C70010050E350009F158610A0134300001B91
+S1130C800460A0E1000054E30D00000A0040A0E36A
+S1130C9034709FE58E80A0E3980000EB0400D5E754
+S1130CA0C4FFFFEB010050E30700A0110810A011DE
+S1130CB03600001B014084E20438A0E1230856E119
+S1130CC0F4FFFF8AF041BDE81EFF2FE13C15000050
+S1130CD030402DE90050A0E1A0309FE50030D3E57D
+S1130CE0000053E30B00001A94009FE5A7FFFFEBFD
+S1130CF0010050E30000A0131E00001A0120A0E32D
+S1130D0078309FE50020C3E50000A0E374309FE540
+S1130D100000C3E5170000EA68309FE50040D3E512
+S1130D2064009FE5000084E098FFFFEB010050E3BE
+S1130D300000A0130F00001A014084E2FF2004E227
+S1130D4040309FE50020C3E534309FE50030D3E513
+S1130D50020053E10000A0130600001A0500A0E100
+S1130D6024109FE519FFFFEB0020A0E30C309FE562
+S1130D700020C3E50100A0E33040BDE81EFF2FE1E1
+S1130D8094060040500600404C06004051060040C6
+S1130D9004E02DE510309FE5000083E50C309FE56D
+S1130DA0001083E5550000EBFDFFFFEA98060040C4
+S1130DB09C06004004E02DE54B0000EB010050E3ED
+S1130DC00B00000A30309FE50030D3E5010053E307
+S1130DD00700001A66FFFFEB310050E30400009A9D
+S1130DE00020A0E310309FE50020C3E534FFFFEBB3
+S1130DF007FFFFEB04E09DE41EFF2FE1A006004087
+S1130E0004E02DE50120A0E310309FE50020C3E5B8
+S1130E1045FFFFEBE6FFFFEB04E09DE41EFF2FE13F
+S1130E20A006004004E02DE5330000EBF3FFFFEBE8
+S1130E300CFFFFEB070000EB04E09DE41EFF2FE135
+S1130E4004E02DE52D0000EB130000EBD8FFFFEBD1
+S1130E5004E09DE41EFF2FE104E02DE504D04DE203
+S1130E600030E0E30030CDE50030A0E30130CDE513
+S1130E70300000EB64FFFFEB18309FE50030D3E552
+S1130E80010053E30D00A0013F00000B04D08DE2EC
+S1130E9004E09DE41EFF2FE1A106004004E02DE5DF
+S1130EA014009FE589FFFFEB010050E308009F0554
+S1130EB03500000B04E09DE41EFF2FE1A406004072
+S1130EC004E02DE5FF1001E25FFFFFEB290000EBDA
+S1130ED004E09DE41EFF2FE10120A0E304309FE520
+S1130EE00020C3E51EFF2FE1A106004004E02DE52C
+S1130EF01A0000EB04E09DE41EFF2FE11EFF2FE12A
+S1130F001EFF2FE10020A0E304309FE50120C3E58C
+S1130F101EFF2FE1E406004014309FE50120E0E3CA
+S1130F200320C3E50400C3E50220A0E3B424C3E125
+S1130F301EFF2FE1E40600401C309FE50020A0E3E3
+S1130F400020C3E5482083E54320C3E5B424C3E17E
+S1130F500220C3E50120C3E51EFF2FE1E4060040A3
+S1130F600C309FE50000D3E5000090E20100A013DF
+S1130F701EFF2FE1E40600400020A0E304309FE5BB
+S1130F804320C3E51EFF2FE1E406004030402DE975
+S1130F900040A0E10030D0E5FF0053E31200001A46
+S1130FA0D7FFFFEBC8349FE50120A0E30020C3E591
+S1130FB00010E0E30310C3E51010A0E30410C3E540
+S1130FC00010A0E30510C3E54000A0E30600C3E55C
+S1130FD00700C3E50810C3E50920C3E50A20C3E5FB
+S1130FE00820A0E3B424C3E1140100EA80249FE5AF
+S1130FF00020D2E5010052E31B01001AC93043E28C
+S1131000350053E303F19F970A0100EAC41200007C
+S113101038140000381400002C14000038140000A8
+S1131020381400001014000010130000D413000042
+S11310309C13000038140000381400003814000019
+S1131040381400003814000038140000381400006C
+S1131050381400003814000038140000381400005C
+S1131060381400003814000038140000381400004C
+S1131070381400003814000038140000381400003C
+S1131080381400003814000038140000381400002C
+S1131090381400003814000038140000381400001C
+S11310A0381400003814000038140000381400000C
+S11310B038140000AC11000034110000E4100000EA
+S11310C08C1100003814000038140000381400009B
+S11310D01C12000038140000601200006C120000A2
+S11310E0A01200000120D0E53F0052E30200009A64
+S11310F02200A0E387FFFFEBD00000EA70539FE5D6
+S1131100040085E2481095E530FEFFEB0030E0E393
+S11311100330C5E50120D4E5483095E5033082E08D
+S1131120483085E50130D4E5013083E2B434C5E1CB
+S1131130C20000EA0130D0E53F0053E30200009A08
+S11311402200A0E373FFFFEBBC0000EA041090E56B
+S11311501C539FE5481085E5040085E20120D4E591
+S11311601AFEFFEB0030E0E30330C5E50120D4E5CF
+S1131170483095E5033082E0483085E50130D4E518
+S1131180013083E2B434C5E1AC0000EAE0329FE50B
+S11311900020E0E30320C3E5042090E5482083E534
+S11311A00120A0E3B424C3E1A40000EAC0329FE517
+S11311B00020E0E30320C3E5481093E5043090E504
+S11311C0000053E30020A0030500000A0020A0E370
+S11311D00100D1E4002082E0FF2002E2013053E26A
+S11311E0FAFFFF1A88329FE50010A0E30720C3E549
+S11311F00810C3E50910C3E5222CA0E10A20C3E5C9
+S11312000120A0E30420C3E50510C3E50610C3E5EF
+S11312100820A0E3B424C3E1880000EA50329FE52B
+S11312200020E0E30320C3E548229FE5482083E54E
+S11312300020A0E30420C3E50520C3E50620C3E5A0
+S11312400710A0E30710C3E50820C3E50920C3E5A0
+S11312500A20C3E50820A0E3B424C3E1770000EA30
+S11312600000A0E32BFFFFEB740000EA00329FE5CF
+S11312700020E0E30320C3E50020A0E30420C3E54D
+S11312800110D3E50510C3E50620C3E50720C3E537
+S11312900820C3E50620A0E3B424C3E1670000EA04
+S11312A0CC419FE50030A0E30030C4E514FFFFEB20
+S11312B00030E0E30330C4E50130A0E3B434C4E11A
+S11312C05E0000EAA8319FE5480093E53F10A0E3E3
+S11312D0012084E2E7FDFFEB000050E30200001A66
+S11312E03100A0E30BFFFFEB540000EA80319FE5DF
+S11312F00020E0E30320C3E5482093E53F2082E299
+S1131300482083E50120A0E3B424C3E14B0000EAB4
+S11313100130D0E53E0053E30200009A2200A0E32E
+S1131320FCFEFFEB450000EA44319FE50020E0E3CA
+S11313300320C3E50120A0E3B424C3E10110D0E5F8
+S1131340000051E30500001AD6FDFFEB000050E356
+S11313503A00001A3100A0E3EEFEFFEB370000EA8A
+S11313600C319FE5480093E5022084E2C1FDFFEBC8
+S1131370000050E30200001A3100A0E3E5FEFFEB99
+S11313802E0000EAE8309FE50110D4E5482093E5FB
+S1131390022081E0482083E5280000EAD0309FE560
+S11313A00020E0E30320C3E50020A0E30420C3E51C
+S11313B00520C3E54010A0E30610C3E50720C3E5FC
+S11313C00820C3E50920C3E50720A0E3B424C3E152
+S11313D01A0000EA98309FE5480093E5041094E56C
+S11313E0A8FDFFEB000050E30200001A3100A0E367
+S11313F0C8FEFFEB110000EA74309FE50020E0E333
+S11314000320C3E50120A0E3B424C3E10B0000EAF8
+S113141090FDFFEB58309FE50020E0E30320C3E597
+S11314200120A0E3B424C3E1040000EA3100A0E3F6
+S1131430B8FEFFEB010000EA2000A0E3B5FEFFEBDD
+S11314402C309FE54330D3E5010053E31000A003A3
+S1131450B0FEFF0B18309FE50120A0E34320C3E555
+S1131460030083E2B414D3E194FEFFEB3040BDE803
+S10F14701EFF2FE1E4060040C015000040
+S113147C00200000002000000100000000400000DB
+S113148C00200000020000000060000000200000AA
+S113149C0300000000800000002000000400000095
+S11314AC00A00000002000000500000000C00000A7
+S11314BC002000000600000000E0000000200000F6
+S11314CC07000000000001000000010008000000FB
+S11314DC00000200000001000900000000000300ED
+S11314EC002000000A00000000200300002000007F
+S11314FC0B00000000400300002000000C00000062
+S113150C00600300002000000D00000000800300B8
+S113151C002000000E00000000A0030000200000CA
+S113152C0F00000000C003000020000010000000A9
+S113153C443A2F7573722F6665617365722F736FDE
+S113154C6674776172652F4F70656E424C542F54DC
+S113155C61726765742F44656D6F2F41524D375F0F
+S113156C4C5043323030305F4F6C696D65785F4C52
+S113157C50435F4C323239345F43726F7373776FFD
+S113158C726B732F426F6F742F6964652F2E2E2F1D
+S113159C2E2E2F2E2E2F2E2E2F536F757263652FFA
+S11315AC41524D375F4C5043323030302F7561729D
+S10F15BC742E63004F70656E424C5400A6
S9030050AC
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c
new file mode 100644
index 00000000..beefab0b
--- /dev/null
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.c
@@ -0,0 +1,643 @@
+/****************************************************************************************
+| Description: bootloader external flash driver source file
+| File Name: extflash.c
+|
+|----------------------------------------------------------------------------------------
+| C O P Y R I G H T
+|----------------------------------------------------------------------------------------
+| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved
+|
+|----------------------------------------------------------------------------------------
+| L I C E N S E
+|----------------------------------------------------------------------------------------
+| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
+| modify it under the terms of the GNU General Public License as published by the Free
+| Software Foundation, either version 3 of the License, or (at your option) any later
+| version.
+|
+| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+| PURPOSE. See the GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License along with OpenBLT.
+| If not, see .
+|
+| A special exception to the GPL is included to allow you to distribute a combined work
+| that includes OpenBLT without being obliged to provide the source code for any
+| proprietary components. The exception text is included at the bottom of the license
+| file .
+|
+****************************************************************************************/
+
+/****************************************************************************************
+* Include files
+****************************************************************************************/
+#include "boot.h" /* bootloader generic header */
+
+
+#if (BOOT_NVM_HOOKS_ENABLE > 0)
+/****************************************************************************************
+* Macro definitions
+****************************************************************************************/
+#define FLASH_INVALID_SECTOR (0xff)
+#define FLASH_INVALID_ADDRESS (0xffffffff)
+#define FLASH_WRITE_BLOCK_SIZE (512)
+#define FLASH_TOTAL_SECTORS (sizeof(flashLayout)/sizeof(flashLayout[0]))
+/* C3 Intel flash commands */
+#define FLASH_CMD_READ_ARRAY_MODE (0xFF)
+#define FLASH_CMD_READ_ID_MODE (0x90)
+#define FLASH_CMD_ERASE_MODE (0x20)
+#define FLASH_CMD_READ_STATUS_MODE (0x70)
+#define FLASH_CMD_CHANGE_LOCK_MODE (0x60)
+#define FLASH_CMD_UNLOCK_SECTOR (0xD0)
+#define FLASH_CMD_LOCK_SECTOR (0x01)
+#define FLASH_CMD_PROGRAM_MODE (0x40)
+#define FLASH_CMD_ERASE_CONFIRM (0xD0)
+#define FLASH_CMD_CLEAR_STATUS (0x50)
+/* C3 Intel flash info bits */
+#define FLASH_LOCK_BIT (0x01)
+#define FLASH_STATUS_READY_BIT (0x80)
+/* C3 Intel flash error codes */
+#define FLASH_ERR_LOCKED (0x02)
+#define FLASH_ERR_VPP_RANGE (0x08)
+#define FLASH_ERR_PROGRAM (0x10)
+#define FLASH_ERR_CMD_SEQ (0x10)
+#define FLASH_ERR_ERASE (0x20)
+/* flash operation timeout values */
+#define FLASH_ERASE_TIMEOUT ((blt_int32u)5000000)
+#define FLASH_PROGRAM_TIMEOUT ((blt_int32u)1000000)
+/* supported Intel C3 flash device */
+#define FLASH_DEV_MAN_ID ((blt_int16u)0x0089)
+#define FLASH_DEV_ID ((blt_int16u)0x88c3)
+/* address offsets for reading device information */
+#define FLASH_DEVINFO_MAN_ID ((blt_int16u)0x0000)
+#define FLASH_DEVINFO_DEV_ID ((blt_int16u)0x0001)
+#define FLASH_DEVINFO_LOCK_STATUS ((blt_int16u)0x0002)
+/* functions implemented in a macro for run-time and codesize optimization */
+#define ExtFlashGetManID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \
+ FLASH_DEVINFO_MAN_ID))
+#define ExtFlashGetDevID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \
+ FLASH_DEVINFO_DEV_ID))
+#define ExtFlashGetLockStatus(base) (ExtFlashGetDeviceInfo(base, \
+ FLASH_DEVINFO_LOCK_STATUS))
+
+
+/****************************************************************************************
+* Type definitions
+****************************************************************************************/
+/* flash sector descriptor type */
+typedef struct
+{
+ blt_addr sector_start; /* sector start address */
+ blt_int32u sector_size; /* sector size in bytes */
+ blt_int8u sector_num; /* sector number */
+} tFlashSector; /* flash sector description */
+
+/* programming is done per block of max FLASH_WRITE_BLOCK_SIZE. for this a flash block
+ * manager is implemented in this driver. this flash block manager depends on this
+ * flash block info structure. It holds the base address of the flash block and the
+ * data that should be programmed into the flash block.
+ */
+typedef struct
+{
+ blt_addr base_addr;
+ blt_int8u data[FLASH_WRITE_BLOCK_SIZE];
+} tFlashBlockInfo;
+
+
+/****************************************************************************************
+* Function prototypes
+****************************************************************************************/
+static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address);
+static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr);
+static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address,
+ blt_int8u *data, blt_int16u len);
+static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block);
+static blt_bool ExtFlashEraseSector(blt_addr sector_base);
+static blt_int16u ExtFlashGetDeviceInfo(blt_addr block_base, blt_int16u info);
+static void ExtFlashLockSector(blt_addr sector_base);
+static void ExtFlashUnlockSector(blt_addr sector_base);
+static blt_int8u ExtFlashGetSector(blt_addr address);
+
+
+/****************************************************************************************
+* Local constant declarations
+****************************************************************************************/
+/* The current layout supports the 2MB external C3 Intel flash:
+ * - manufacturer id = 0x0089
+ * - device id = 0x88c3 (16 Mbit bottom boot device)
+ * Note that what Intel calls a block in the user manual, is called a sector in this
+ * driver.
+ */
+static const tFlashSector flashLayout[] =
+{
+ { 0x80000000, 0x02000, 0}, /* flash sector 0 - 8 kbyte */
+ { 0x80002000, 0x02000, 1}, /* flash sector 1 - 8 kbyte */
+ { 0x80004000, 0x02000, 2}, /* flash sector 2 - 8 kbyte */
+ { 0x80006000, 0x02000, 3}, /* flash sector 3 - 8 kbyte */
+ { 0x80008000, 0x02000, 4}, /* flash sector 4 - 8 kbyte */
+ { 0x8000A000, 0x02000, 5}, /* flash sector 5 - 8 kbyte */
+ { 0x8000C000, 0x02000, 6}, /* flash sector 6 - 8 kbyte */
+ { 0x8000E000, 0x02000, 7}, /* flash sector 7 - 8 kbyte */
+ { 0x80010000, 0x10000, 8}, /* flash sector 8 - 64 kbyte */
+ { 0x80020000, 0x10000, 9}, /* flash sector 9 - 64 kbyte */
+ { 0x80030000, 0x10000, 10}, /* flash sector 10 - 64 kbyte */
+ { 0x80040000, 0x10000, 11}, /* flash sector 11 - 64 kbyte */
+ { 0x80050000, 0x10000, 12}, /* flash sector 12 - 64 kbyte */
+ { 0x80060000, 0x10000, 13}, /* flash sector 13 - 64 kbyte */
+ { 0x80070000, 0x10000, 14}, /* flash sector 14 - 64 kbyte */
+ { 0x80080000, 0x10000, 15}, /* flash sector 15 - 64 kbyte */
+ { 0x80090000, 0x10000, 16}, /* flash sector 16 - 64 kbyte */
+ { 0x800A0000, 0x10000, 17}, /* flash sector 17 - 64 kbyte */
+ { 0x800B0000, 0x10000, 18}, /* flash sector 18 - 64 kbyte */
+ { 0x800C0000, 0x10000, 19}, /* flash sector 19 - 64 kbyte */
+ { 0x800D0000, 0x10000, 20}, /* flash sector 20 - 64 kbyte */
+ { 0x800E0000, 0x10000, 21}, /* flash sector 21 - 64 kbyte */
+ { 0x800F0000, 0x10000, 22}, /* flash sector 22 - 64 kbyte */
+ { 0x80100000, 0x10000, 23}, /* flash sector 23 - 64 kbyte */
+ { 0x80110000, 0x10000, 24}, /* flash sector 24 - 64 kbyte */
+ { 0x80120000, 0x10000, 25}, /* flash sector 25 - 64 kbyte */
+ { 0x80130000, 0x10000, 26}, /* flash sector 26 - 64 kbyte */
+ { 0x80140000, 0x10000, 27}, /* flash sector 27 - 64 kbyte */
+ { 0x80150000, 0x10000, 28}, /* flash sector 28 - 64 kbyte */
+ { 0x80160000, 0x10000, 29}, /* flash sector 29 - 64 kbyte */
+ { 0x80170000, 0x10000, 30}, /* flash sector 30 - 64 kbyte */
+ { 0x80180000, 0x10000, 31}, /* flash sector 31 - 64 kbyte */
+ { 0x80190000, 0x10000, 32}, /* flash sector 32 - 64 kbyte */
+ { 0x801A0000, 0x10000, 33}, /* flash sector 33 - 64 kbyte */
+ { 0x801B0000, 0x10000, 34}, /* flash sector 34 - 64 kbyte */
+ { 0x801C0000, 0x10000, 35}, /* flash sector 35 - 64 kbyte */
+ { 0x801D0000, 0x10000, 36}, /* flash sector 36 - 64 kbyte */
+ { 0x801E0000, 0x10000, 37}, /* flash sector 37 - 64 kbyte */
+ { 0x801F0000, 0x10000, 38} /* flash sector 38 - 64 kbyte */
+};
+
+
+/****************************************************************************************
+* Local data declarations
+****************************************************************************************/
+/* The smallest amount of flash that can be programmed is FLASH_WRITE_BLOCK_SIZE. A flash
+ * block manager is implemented in this driver and stores info in this variable. Whenever
+ * new data should be flashed, it is first added to a RAM buffer, which is part of this
+ * variable. Whenever the RAM buffer, which has the size of a flash block, is full or
+ * data needs to be written to a different block, the contents of the RAM buffer are
+ * programmed to flash. The flash block manager requires some software overhead, yet
+ * results is faster flash programming because data is first harvested, ideally until
+ * there is enough to program an entire flash block, before the flash device is actually
+ * operated on.
+ */
+static tFlashBlockInfo blockInfo;
+
+
+/****************************************************************************************
+** NAME: ExtFlashInit
+** PARAMETER: none
+** RETURN VALUE: none
+** DESCRIPTION: Initializes the flash driver.
+**
+****************************************************************************************/
+void ExtFlashInit(void)
+{
+ /* init the flash block info struct by setting the address to an invalid address */
+ blockInfo.base_addr = FLASH_INVALID_ADDRESS;
+ /* check the flash device identification */
+ if ((ExtFlashGetManID() != FLASH_DEV_MAN_ID) || (ExtFlashGetDevID() != FLASH_DEV_ID))
+ {
+ ASSERT_RT(BLT_FALSE);
+ }
+} /*** end of ExtFlashInit ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashWrite
+** PARAMETER: addr start address
+** len length in bytes
+** data pointer to the data buffer.
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the write
+** operation failed.
+** DESCRIPTION: Writes the data to flash.
+**
+****************************************************************************************/
+blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
+{
+ /* make sure the addresses are within the flash device */
+ if ( (ExtFlashGetSector(addr) == FLASH_INVALID_SECTOR) || \
+ (ExtFlashGetSector(addr+len-1) == FLASH_INVALID_SECTOR) )
+ {
+ return BLT_NVM_NOT_IN_RANGE;
+ }
+
+ /* let the block manager handle it */
+ if (ExtFlashAddToBlock(&blockInfo, addr, data, len) == BLT_FALSE)
+ {
+ return BLT_NVM_ERROR;
+ }
+ return BLT_NVM_OKAY;
+} /*** end of FlashWrite ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashErase
+** PARAMETER: addr start address
+** len length in bytes
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the erase
+** operation failed.
+** DESCRIPTION: Erases the flash memory. Note that this function also checks that no
+** data is erased outside the flash memory region.
+**
+****************************************************************************************/
+blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len)
+{
+ blt_int8u first_sector;
+ blt_int8u last_sector;
+ blt_int8u sectorIdx;
+
+ /* obtain the first and last sector number */
+ first_sector = ExtFlashGetSector(addr);
+ last_sector = ExtFlashGetSector(addr+len-1);
+ /* check them */
+ if ( (first_sector == FLASH_INVALID_SECTOR) || (last_sector == FLASH_INVALID_SECTOR) )
+ {
+ return BLT_NVM_NOT_IN_RANGE;
+ }
+ /* erase the sectors one-by-one */
+ for (sectorIdx = first_sector; sectorIdx <= last_sector; sectorIdx++)
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* erase the sector */
+ if (ExtFlashEraseSector(flashLayout[sectorIdx].sector_start) == BLT_FALSE)
+ {
+ return BLT_NVM_ERROR;
+ }
+ }
+ /* done so return the result of the operation */
+ return BLT_NVM_OKAY;
+} /*** end of ExtFlashErase ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashDone
+** PARAMETER: none
+** RETURN VALUE: BLT_TRUE is succesful, BLT_FALSE otherwise.
+** DESCRIPTION: Finilizes the flash driver operations.
+**
+****************************************************************************************/
+blt_bool ExtFlashDone(void)
+{
+ /* check if there is still data waiting to be programmed */
+ if (blockInfo.base_addr != FLASH_INVALID_ADDRESS)
+ {
+ if (ExtFlashWriteBlock(&blockInfo) == BLT_FALSE)
+ {
+ return BLT_FALSE;
+ }
+ }
+ /* still here so all is okay */
+ return BLT_TRUE;
+} /*** end of ExtFlashDone ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashInitBlock
+** PARAMETER: block pointer to flash block info structure to operate on.
+** address base address of the block data.
+** RETURN VALUE: BLT_TRUE is succesful, BLT_FALSE otherwise.
+** DESCRIPTION: Copies data currently in flash to the block->data and sets the
+** base address.
+**
+****************************************************************************************/
+static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address)
+{
+ /* check address alignment */
+ if ((address % FLASH_WRITE_BLOCK_SIZE) != 0)
+ {
+ return BLT_FALSE;
+ }
+ /* make sure that we are initializing a new block and not the same one */
+ if (block->base_addr == address)
+ {
+ /* block already initialized, so nothing to do */
+ return BLT_TRUE;
+ }
+ /* set the base address and copies the current data from flash */
+ block->base_addr = address;
+ CpuMemCopy((blt_addr)block->data, address, FLASH_WRITE_BLOCK_SIZE);
+ return BLT_TRUE;
+} /*** end of ExtFlashInitBlock ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashSwitchBlock
+** PARAMETER: block pointer to flash block info structure to operate on.
+** base_addr base address for the next block
+** RETURN VALUE: the pointer of the block info struct that is no being used, or a NULL
+** pointer in case of error.
+** DESCRIPTION: Switches blocks by programming the current one and initializing the
+** next.
+**
+****************************************************************************************/
+static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr)
+{
+ /* need to switch to a new block, so program the current one and init the next */
+ if (ExtFlashWriteBlock(block) == BLT_FALSE)
+ {
+ return BLT_NULL;
+ }
+ /* initialize the new block when necessary */
+ if (ExtFlashInitBlock(block, base_addr) == BLT_FALSE)
+ {
+ return BLT_NULL;
+ }
+ /* still here to all is okay */
+ return block;
+} /*** end of ExtFlashSwitchBlock ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashAddToBlock
+** PARAMETER: block pointer to flash block info structure to operate on.
+** address flash destination address
+** data pointer to the byte array with data
+** len number of bytes to add to the block
+** RETURN VALUE: BLT_TRUE if successful, BLT_FALSE otherwise.
+** DESCRIPTION: Programming is done per block. This function adds data to the block
+** that is currently collecting data to be written to flash. If the
+** address is outside of the current block, the current block is written
+** to flash an a new block is initialized.
+**
+****************************************************************************************/
+static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address,
+ blt_int8u *data, blt_int16u len)
+{
+ blt_addr current_base_addr;
+ blt_int8u *dst;
+ blt_int8u *src;
+
+ /* determine the current base address */
+ current_base_addr = (address/FLASH_WRITE_BLOCK_SIZE)*FLASH_WRITE_BLOCK_SIZE;
+
+ /* make sure the blockInfo is not uninitialized */
+ if (block->base_addr == FLASH_INVALID_ADDRESS)
+ {
+ /* initialize the blockInfo struct for the current block */
+ if (ExtFlashInitBlock(block, current_base_addr) == BLT_FALSE)
+ {
+ return BLT_FALSE;
+ }
+ }
+ /* check if the new data fits in the current block */
+ if (block->base_addr != current_base_addr)
+ {
+ /* need to switch to a new block, so program the current one and init the next */
+ block = ExtFlashSwitchBlock(block, current_base_addr);
+ if (block == BLT_NULL)
+ {
+ return BLT_FALSE;
+ }
+ }
+ /* add the data to the current block, but check for block overflow */
+ dst = &(block->data[address - block->base_addr]);
+ src = data;
+ do
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* buffer overflow? */
+ if ((blt_addr)(dst-&(block->data[0])) >= FLASH_WRITE_BLOCK_SIZE)
+ {
+ /* need to switch to a new block, so program the current one and init the next */
+ block = ExtFlashSwitchBlock(block, current_base_addr+FLASH_WRITE_BLOCK_SIZE);
+ if (block == BLT_NULL)
+ {
+ return BLT_FALSE;
+ }
+ /* reset destination pointer */
+ dst = &(block->data[0]);
+ }
+ /* write the data to the buffer */
+ *dst = *src;
+ /* update pointers */
+ dst++;
+ src++;
+ /* decrement byte counter */
+ len--;
+ }
+ while (len > 0);
+ /* still here so all is good */
+ return BLT_TRUE;
+} /*** end of ExtFlashAddToBlock ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashWriteBlock
+** PARAMETER: block pointer to flash block info structure to operate on.
+** RETURN VALUE: BLT_TRUE if successful, BLT_FALSE otherwise.
+** DESCRIPTION: Programs FLASH_WRITE_BLOCK_SIZE bytes to flash from the block->data
+** array.
+**
+****************************************************************************************/
+static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block)
+{
+ volatile blt_int16u *pAddr;
+ volatile blt_int16u *pData;
+ blt_bool result = BLT_TRUE;
+ volatile blt_int32u timeout = 0;
+
+ /* unlock the sector */
+ ExtFlashUnlockSector(block->base_addr);
+ /* init pointer to valid address in the flash block */
+ pAddr = (blt_int16u *)block->base_addr;
+ /* init pointer to start of block data */
+ pData = (blt_int16u *)block->data;
+ /* program all block data 16-bits at a time */
+ while ((blt_addr)pAddr < (block->base_addr+FLASH_WRITE_BLOCK_SIZE))
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* issue program setup command */
+ *pAddr = FLASH_CMD_PROGRAM_MODE;
+ /* write 16-bit data that is to be programmed to start programming operation */
+ *pAddr = *pData;
+ /* check status register for completion */
+ *pAddr = FLASH_CMD_READ_STATUS_MODE;
+ /* wait for completion or timeout */
+ while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_PROGRAM_TIMEOUT) )
+ {
+ timeout++;
+ }
+ /* check for possible errors */
+ if ( (timeout >= FLASH_ERASE_TIMEOUT) || \
+ ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_PROGRAM))!= 0) )
+ {
+ result = BLT_FALSE;
+ }
+ /* clear the status register */
+ *pAddr = FLASH_CMD_CLEAR_STATUS;
+ /* increment address and data pointers */
+ pAddr++;
+ pData++;
+ }
+ /* lock the sector. this also switches back to read array mode */
+ ExtFlashLockSector(block->base_addr);
+ /* inform the caller about the result */
+ return result;
+} /*** end of ExtFlashWriteBlock ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashEraseSector
+** PARAMETER: sector_base base address of the sector to erase.
+** RETURN VALUE: BLT_TRUE is erasure was successful, BLT_FALSE otherwise.
+** DESCRIPTION: Erases the flash sector.
+**
+****************************************************************************************/
+static blt_bool ExtFlashEraseSector(blt_addr sector_base)
+{
+ volatile blt_int16u *pAddr;
+ blt_bool result = BLT_TRUE;
+ volatile blt_int32u timeout = 0;
+
+ /* unlock the sector */
+ ExtFlashUnlockSector(sector_base);
+ /* init pointer to valid address in the flash sector */
+ pAddr = (blt_int16u *)sector_base;
+ /* issue erase setup command */
+ *pAddr = FLASH_CMD_ERASE_MODE;
+ /* issue erase confirm command */
+ *pAddr = FLASH_CMD_ERASE_CONFIRM;
+ /* check status register for completion */
+ *pAddr = FLASH_CMD_READ_STATUS_MODE;
+ /* wait for completion or timeout */
+ while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_ERASE_TIMEOUT) )
+ {
+ timeout++;
+ }
+ /* check for possible errors */
+ if ( (timeout >= FLASH_ERASE_TIMEOUT) || \
+ ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_ERASE))!= 0) )
+ {
+ result = BLT_FALSE;
+ }
+ /* clear the status register */
+ *pAddr = FLASH_CMD_CLEAR_STATUS;
+ /* lock the sector. this also switches back to read array mode */
+ ExtFlashLockSector(sector_base);
+ /* inform the caller about the result */
+ return result;
+} /*** end of ExtFlashEraseSector ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashLockSector
+** PARAMETER: sector_base base address of the sector to lock.
+** RETURN VALUE: none
+** DESCRIPTION: Locks the flash sector.
+**
+****************************************************************************************/
+static void ExtFlashLockSector(blt_addr sector_base)
+{
+ volatile blt_int16u *pAddr;
+
+ /* no need to lock a sector that is already locked */
+ if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0)
+ {
+ return;
+ }
+ /* init pointer to valid address in the flash sector */
+ pAddr = (blt_int16u *)sector_base;
+ /* switch to change lock mode */
+ *pAddr = FLASH_CMD_CHANGE_LOCK_MODE;
+ /* unlock the sector */
+ *pAddr = FLASH_CMD_LOCK_SECTOR;
+ /* check that the sector is now actually locked */
+ ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0);
+} /*** end of ExtFlashLockSector ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashUnlockSector
+** PARAMETER: sector_base base address of the sector to unlock.
+** RETURN VALUE: none
+** DESCRIPTION: Unlocks the flash sector.
+**
+****************************************************************************************/
+static void ExtFlashUnlockSector(blt_addr sector_base)
+{
+ volatile blt_int16u *pAddr;
+
+ /* no need to unlock a sector that is already unlocked */
+ if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0)
+ {
+ return;
+ }
+ /* init pointer to valid address in the flash sector */
+ pAddr = (blt_int16u *)sector_base;
+ /* switch to change lock mode */
+ *pAddr = FLASH_CMD_CHANGE_LOCK_MODE;
+ /* unlock the sector */
+ *pAddr = FLASH_CMD_UNLOCK_SECTOR;
+ /* check that the sector is now actually unlocked */
+ ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0);
+} /*** end of ExtFlashUnlockSector ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashGetDeviceInfo
+** PARAMETER: sector_base base address of the sector to get the info from.
+** info identifier to the type of info to obtain.
+** RETURN VALUE: device info.
+** DESCRIPTION: Obtains device information from the flash device.
+**
+****************************************************************************************/
+static blt_int16u ExtFlashGetDeviceInfo(blt_addr sector_base, blt_int16u info)
+{
+ volatile blt_int16u *pAddr;
+ blt_int16u readData;
+
+ /* init pointer to any valid address in the flash device */
+ pAddr = (blt_int16u *)sector_base + info;
+ /* switch to read identifier mode */
+ *pAddr = FLASH_CMD_READ_ID_MODE;
+ /* read the info */
+ readData = *pAddr;
+ /* switch back to reading mode */
+ *pAddr = FLASH_CMD_READ_ARRAY_MODE;
+ /* return the result */
+ return readData;
+} /*** end of ExtFlashGetDeviceInfo ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashGetSector
+** PARAMETER: address address in the flash sector
+** RETURN VALUE: flash sector number or FLASH_INVALID_SECTOR
+** DESCRIPTION: Determines the flash sector the address is in.
+**
+****************************************************************************************/
+static blt_int8u ExtFlashGetSector(blt_addr address)
+{
+ blt_int8u sectorIdx;
+
+ /* search through the sectors to find the right one */
+ for (sectorIdx = 0; sectorIdx < FLASH_TOTAL_SECTORS; sectorIdx++)
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* is the address in this sector? */
+ if ( (address >= flashLayout[sectorIdx].sector_start) && \
+ (address < (flashLayout[sectorIdx].sector_start + \
+ flashLayout[sectorIdx].sector_size)) )
+ {
+ /* return the sector number */
+ return flashLayout[sectorIdx].sector_num;
+ }
+ }
+ /* still here so no valid sector found */
+ return FLASH_INVALID_SECTOR;
+} /*** end of ExtFlashGetSector ***/
+#endif
+
+/*********************************** end of extflash.c *********************************/
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h
new file mode 100644
index 00000000..bc8c4b15
--- /dev/null
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/extflash.h
@@ -0,0 +1,45 @@
+/****************************************************************************************
+| Description: bootloader external flash driver header file
+| File Name: extflash.h
+|
+|----------------------------------------------------------------------------------------
+| C O P Y R I G H T
+|----------------------------------------------------------------------------------------
+| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved
+|
+|----------------------------------------------------------------------------------------
+| L I C E N S E
+|----------------------------------------------------------------------------------------
+| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
+| modify it under the terms of the GNU General Public License as published by the Free
+| Software Foundation, either version 3 of the License, or (at your option) any later
+| version.
+|
+| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+| PURPOSE. See the GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License along with OpenBLT.
+| If not, see .
+|
+| A special exception to the GPL is included to allow you to distribute a combined work
+| that includes OpenBLT without being obliged to provide the source code for any
+| proprietary components. The exception text is included at the bottom of the license
+| file .
+|
+****************************************************************************************/
+#ifndef EXTFLASH_H
+#define EXTFLASH_H
+
+#if (BOOT_NVM_HOOKS_ENABLE > 0)
+/****************************************************************************************
+* Function prototypes
+****************************************************************************************/
+void ExtFlashInit(void);
+blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data);
+blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len);
+blt_bool ExtFlashDone(void);
+#endif
+
+#endif /* EXTFLASH_H */
+/*********************************** end of extflash.h *********************************/
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c
index e46906ec..8bbaedb6 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/hooks.c
@@ -80,6 +80,7 @@ blt_bool BackDoorEntryHook(void)
****************************************************************************************/
#if (BOOT_NVM_HOOKS_ENABLE > 0)
+#include "extflash.h"
/****************************************************************************************
** NAME: NvmInitHook
** PARAMETER: none
@@ -90,6 +91,8 @@ blt_bool BackDoorEntryHook(void)
****************************************************************************************/
void NvmInitHook(void)
{
+ /* init the external flash driver */
+ ExtFlashInit();
} /*** end of NvmInitHook ***/
@@ -98,20 +101,21 @@ void NvmInitHook(void)
** PARAMETER: addr start address
** len length in bytes
** data pointer to the data buffer.
-** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is
-** not within the supported memory range, or BTL_NVM_ERROR is the write
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the write
** operation failed.
** DESCRIPTION: Callback that gets called at the start of the NVM driver write
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
-** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
+** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
** been written yet.
**
**
****************************************************************************************/
blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
{
- return BTL_NVM_NOT_IN_RANGE;
+ /* attempt to write with the external flash driver */
+ return ExtFlashWrite(addr, len, data);
} /*** end of NvmWriteHook ***/
@@ -119,19 +123,20 @@ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
** NAME: NvmEraseHook
** PARAMETER: addr start address
** len length in bytes
-** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is
-** not within the supported memory range, or BTL_NVM_ERROR is the erase
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the erase
** operation failed.
** DESCRIPTION: Callback that gets called at the start of the NVM driver erase
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
-** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the memory
+** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory
** hasn't been erased yet.
**
****************************************************************************************/
-blt_bool NvmEraseHook(blt_addr addr, blt_int32u len)
+blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len)
{
- return BTL_NVM_NOT_IN_RANGE;
+ /* attempt to erase with the external flash driver */
+ return ExtFlashErase(addr, len);
} /*** end of NvmEraseHook ***/
@@ -144,7 +149,8 @@ blt_bool NvmEraseHook(blt_addr addr, blt_int32u len)
****************************************************************************************/
blt_bool NvmDoneHook(void)
{
- return BLT_TRUE;
+ /* finish up the operations of the external flash driver */
+ return ExtFlashDone();
} /*** end of NvmDoneHook ***/
#endif /* BOOT_NVM_HOOKS_ENABLE > 0 */
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp
index cfbf6ba6..a36735fc 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzp
@@ -1,7 +1,7 @@
-
+
@@ -12,6 +12,8 @@
+
+
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs
index d6c8b5dd..ff30c1df 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/ide/lpc2294_crossworks.hzs
@@ -9,7 +9,7 @@
-
+
@@ -55,6 +55,9 @@
-
+
+
+
+
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h
index 209015fb..b9d6766d 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/lpc2294.h
@@ -35,7 +35,7 @@
/****************************************************************************************
* Macro definitions
****************************************************************************************/
-/* EXTERNAL MEMORY CONTROLLER (EMC) */
+/* EXTERNAL MEMORY CONTROLLER (EMC) */
#define BCFG0 (*((volatile unsigned long *) 0xFFE00000)) /* lpc22xx only */
#define BCFG1 (*((volatile unsigned long *) 0xFFE00004)) /* lpc22xx only */
#define BCFG2 (*((volatile unsigned long *) 0xFFE00008)) /* lpc22xx only */
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c
index fcd404b2..9452a520 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Boot/main.c
@@ -144,6 +144,29 @@ static void Init(void)
MAMCR = 0x2;
/* setting peripheral Clock (pclk) to System Clock (cclk) */
VPBDIV = 0x1;
+#if (BOOT_NVM_HOOKS_ENABLE > 0)
+ /* in this the external memory on the Olimex LPC-L2294 board is used so configure
+ * the memory banks for the external flash EEPROM and RAM
+ */
+ /* external flash EEPROM:
+ * IDCY=3 (idle timing)
+ * WST1=4 (read timing)
+ * RBLE=1
+ * WST2=6 (write timing)
+ * MW=1 (16-bit data bus)
+ */
+ BCFG0 = (0x3 << 0) | (0x4 << 5) | (0x1 << 10) | (0x6 << 11) | (0x1 << 28);
+ /* external RAM:
+ * IDCY=0 (idle timing)
+ * WST1=0 (read timing)
+ * RBLE=1
+ * WST2=0 (write timing)
+ * MW=2 (32-bit data bus)
+ */
+ BCFG1 = (0x0 << 0) | (0x0 << 5) | (0x1 << 10) | (0x0 << 11) | (0x2 << 28);
+ /* configure use of data bus and strobe pins for the external memory */
+ PINSEL2 = 0x0F000924;
+#endif
#if (BOOT_COM_UART_ENABLE > 0)
/* configure P0.0 for UART0 Tx and P0.1 for UART0 Rx functionality */
PINSEL0 |= 0x05;
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf
index acbbbf4c..b034dc13 100644
Binary files a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf and b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.elf differ
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map
index 0c1b218b..b107bef2 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/bin/demoprog_olimex_lpc_l2294_20mhz.map
@@ -785,7 +785,7 @@ VPB_Peripherals 0xe0000000 0x00200000 xw
BANK3 0x83000000 0x01000000 xw
BANK2 0x82000000 0x01000000 xw
External_SRAM 0x81000000 0x00100000 xw
-External_FLASH 0x80000000 0x00400000 xr
+External_FLASH 0x80000000 0x00200000 xr
SRAM 0x40000200 0x00003ce0 xw
FLASH 0x00002000 0x0003e000 xr
*default* 0x00000000 0xffffffff
@@ -806,7 +806,7 @@ Linker script and memory map
0x81000000 __External_SRAM_segment_start__ = 0x81000000
0x81100000 __External_SRAM_segment_end__ = 0x81100000
0x80000000 __External_FLASH_segment_start__ = 0x80000000
- 0x80400000 __External_FLASH_segment_end__ = 0x80400000
+ 0x80200000 __External_FLASH_segment_end__ = 0x80200000
0x40002000 __SRAM_segment_start__ = 0x40002000
0x40003ee0 __SRAM_segment_end__ = 0x40003ee0
0x00002000 __FLASH_segment_start__ = 0x2000
@@ -1310,20 +1310,20 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_
.debug_ranges 0x000007e0 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v4t_a_le.a(user_libc.o)
.debug_ranges 0x00000830 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o)
-.debug_line 0x00000000 0x12a0
+.debug_line 0x00000000 0x12a1
.debug_line 0x00000000 0xec ARM Flash Debug/../../obj/boot.o
.debug_line 0x000000ec 0x11e ARM Flash Debug/../../obj/cstart.o
.debug_line 0x0000020a 0xe8 ARM Flash Debug/../../obj/irq.o
.debug_line 0x000002f2 0xb6 ARM Flash Debug/../../obj/led.o
- .debug_line 0x000003a8 0xe9 ARM Flash Debug/../../obj/main.o
- .debug_line 0x00000491 0xd5 ARM Flash Debug/../../obj/timer.o
- .debug_line 0x00000566 0x9d ARM Flash Debug/../../obj/vectors.o
- .debug_line 0x00000603 0x75 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(__vfprintf_int.o)
- .debug_line 0x00000678 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(__vfscanf_int.o)
- .debug_line 0x000006ec 0x54f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(libc2.o)
- .debug_line 0x00000c3b 0x56a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v4t_a_le.a(libdebugio.o)
- .debug_line 0x000011a5 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v4t_a_le.a(user_libc.o)
- .debug_line 0x00001219 0x87 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o)
+ .debug_line 0x000003a8 0xea ARM Flash Debug/../../obj/main.o
+ .debug_line 0x00000492 0xd5 ARM Flash Debug/../../obj/timer.o
+ .debug_line 0x00000567 0x9d ARM Flash Debug/../../obj/vectors.o
+ .debug_line 0x00000604 0x75 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(__vfprintf_int.o)
+ .debug_line 0x00000679 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(__vfscanf_int.o)
+ .debug_line 0x000006ed 0x54f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_v4t_a_le.a(libc2.o)
+ .debug_line 0x00000c3c 0x56a C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v4t_a_le.a(libdebugio.o)
+ .debug_line 0x000011a6 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v4t_a_le.a(user_libc.o)
+ .debug_line 0x0000121a 0x87 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libarm_v4t_a_le.a(libarm_run_dcc_port_server.o)
.debug_str 0x00000000 0xfc6
.debug_str 0x00000000 0x132 ARM Flash Debug/../../obj/boot.o
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp
index d502c976..4712f430 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzp
@@ -1,7 +1,7 @@
-
+
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs
index aeea24ef..76b2d7cb 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/ide/lpc2294_crossworks.hzs
@@ -55,6 +55,9 @@
-
+
+
+
+
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c
index 59f19aa4..a5411907 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/main.c
@@ -41,6 +41,25 @@
static void Init(void);
+/****************************************************************************************
+* Constant data declarations
+****************************************************************************************/
+#if (BOOT_NVM_HOOKS_ENABLE > 0)
+/* ROM data allocated to the external flash on the Olimex LPC-L2294 board to test the
+ * programming of data in external flash. To test programming with the additional
+ * external flash driver, build the bootloader and this program with configurable
+ * BOOT_NVM_HOOKS_ENABLE set to 1 in config.h
+ */
+__attribute__((section (".rodata2"))) const unsigned long ExtFlashTestData[] =
+{
+ 0x00000000, 0x11111111, 0x22222222, 0x33333333,
+ 0x44444444, 0x55555555, 0x66666666, 0x77777777,
+ 0x88888888, 0x99999999, 0xAAAAAAAA, 0xBBBBBBBB,
+ 0xCCCCCCCC, 0xDDDDDDDD, 0xEEEEEEEE, 0xFFFFFFFF
+};
+#endif
+
+
/****************************************************************************************
** NAME: main
** PARAMETER: none
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x
index cb5d5a1c..70cbf672 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_Crossworks/Prog/memory.x
@@ -6,7 +6,7 @@ MEMORY
BANK3 (wx) : ORIGIN = 0x83000000, LENGTH = 0x01000000
BANK2 (wx) : ORIGIN = 0x82000000, LENGTH = 0x01000000
External_SRAM (wx) : ORIGIN = 0x81000000, LENGTH = 0x00100000
- External_FLASH (rx) : ORIGIN = 0x80000000, LENGTH = 0x00400000
+ External_FLASH (rx) : ORIGIN = 0x80000000, LENGTH = 0x00200000
SRAM (wx) : ORIGIN = 0x40000200, LENGTH = 0x00003CE0
FLASH (rx) : ORIGIN = 0x00002000, LENGTH = 0x0003E000
}
@@ -25,7 +25,7 @@ SECTIONS
__External_SRAM_segment_start__ = 0x81000000;
__External_SRAM_segment_end__ = 0x81100000;
__External_FLASH_segment_start__ = 0x80000000;
- __External_FLASH_segment_end__ = 0x80400000;
+ __External_FLASH_segment_end__ = 0x80200000;
__SRAM_segment_start__ = 0x40002000;
__SRAM_segment_end__ = 0x40003EE0;
__FLASH_segment_start__ = 0x00002000;
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf
index d34a1d09..50b977eb 100644
Binary files a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf and b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.elf differ
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.hex b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.hex
index 5adf7246..823edf49 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.hex
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.hex
@@ -1,7 +1,7 @@
:1000000018F09FE518F09FE518F09FE518F09FE5C0
:1000100018F09FE50000A0E118F09FE510F09FE5C3
-:100020005000000040150000A00000004015000036
-:1000300040150000F014000018150000000000003A
+:10002000500000009C120000A00000009C12000084
+:100030009C1200006412000080120000000000000A
:10004000E4009FE50110A0E3001080E5000000EF50
:10005000D8009FE5DBF021E300D0A0E1040040E2FE
:10006000D7F021E300D0A0E1040040E2D1F021E389
@@ -12,351 +12,308 @@
:1000B000D7F021E300D0A0E1040040E2D1F021E339
:1000C00000D0A0E1040040E2D2F021E300D0A0E1A2
:1000D000040040E2D3F021E300D0A0E1040040E2BC
-:1000E000DFF021E300D0A0E1010000EBB80000EB5D
+:1000E000DFF021E300D0A0E1010000EB810000EB94
:1000F000140000EA38109FE538209FE538309FE56E
:10010000030052E10400913404008234FBFFFF3A03
:100110000000A0E324109FE524209FE5020051E1A8
:1001200004008134FCFFFF3A1EFF2FE140C01FE0B6
-:10013000DC1E004088160000000200400002004063
-:1001400000020040F406004010402DE908D04DE2C6
-:10015000FC309FE5003093E504308DE503308DE2FF
-:100160000040A0E3EC109FE5EC209FE50100F3E5E3
-:10017000910000E0260A40E2160E40E2020050E143
-:100180000800009A014084E2FF4004E2040054E3C6
-:10019000F5FFFF1AC4009FE57010A0E3C0309FE593
-:1001A0000FE0A0E113FF2FE18422A0E1022082E30F
-:1001B000FF2002E2AC309FE58420C3E55510E0E368
-:1001C0008C10C3E55520A0E38C20C3E50100A0E31B
-:1001D0008000C3E58C10C3E58C20C3E5B828D3E1CB
-:1001E000010B12E3FCFFFF0A78309FE50320A0E338
-:1001F0008020C3E55520E0E38C20C3E5AB2082E2FC
-:100200008C20C3E50020A0E30020C3E5042082E2A7
-:100210000420C3E50220A0E30020C3E50120A0E301
-:10022000013C83E20020C3E53C309FE5002093E5DC
-:10023000052082E3002083E530309FE50FE0A0E158
-:1002400013FF2FE128409FE50FE0A0E114FF2FE10D
-:10025000FCFFFFEA64150000C0D40100A08002008A
-:10026000301600007C0A000000C01FE000C002E061
-:1002700078020000C402000008402DE930309FE5FC
-:100280000FE0A0E113FF2FE128309FE50FE0A0E190
-:1002900013FF2FE120309FE50FE0A0E113FF2FE1D6
-:1002A00018309FE50FE0A0E113FF2FE10840BDE803
-:1002B0001EFF2FE1740A0000440A0000800D0000B8
-:1002C0000003000008402DE924309FE50FE0A0E185
-:1002D00013FF2FE11C309FE50FE0A0E113FF2FE19A
-:1002E00014309FE50FE0A0E113FF2FE10840BDE8C7
-:1002F0001EFF2FE1780A000068030000C809000013
-:1003000004E02DE50CD04DE20030E0E30430CDE513
-:100310000030A0E30530CDE538309FE50FE0A0E1E7
-:1003200013FF2FE130309FE50FE0A0E113FF2FE135
-:1003300028309FE50030D3E5010053E304008D022F
-:100340001C309F050FE0A00113FF2F010CD08DE2A0
-:1003500004E09DE41EFF2FE148040000DC0B0000D8
-:10036000000200409C04000008402DE924009FE5A5
-:1003700024309FE50FE0A0E113FF2FE1010050E3DF
-:1003800010009F0514309F050FE0A00113FF2F01FF
-:100390000840BDE81EFF2FE104020040C40C00002D
-:1003A0009C04000008402DE9FF1001E218309FE591
-:1003B0000FE0A0E113FF2FE110309FE50FE0A0E177
-:1003C00013FF2FE10840BDE81EFF2FE11C0C0000C9
-:1003D000880400000120A0E304309FE50020C3E56D
-:1003E0001EFF2FE10002004004309FE50000D3E52E
-:1003F0001EFF2FE10002004008402DE90C309FE570
-:100400000FE0A0E113FF2FE10840BDE81EFF2FE140
-:10041000700400000020A0E304309FE50120C3E544
-:100420001EFF2FE14402004014309FE50120E0E36D
-:100430000320C3E50400C3E50220A0E3B424C3E124
-:100440001EFF2FE1440200401C309FE50020A0E386
-:100450000020C3E5482083E54320C3E5B424C3E17D
-:100460000220C3E50120C3E51EFF2FE14402004046
-:100470000C309FE50000D3E5000050E20100A0131E
-:100480001EFF2FE1440200400020A0E304309FE55E
-:100490004320C3E51EFF2FE14402004038402DE910
-:1004A0000040A0E10030D0E5FF0053E31200001A45
-:1004B000D7FFFFEBEC349FE50120A0E30020C3E56C
-:1004C0000010E0E30310C3E51010A0E30410C3E53F
-:1004D0000010A0E30510C3E54000A0E30600C3E55B
-:1004E0000700C3E50810C3E50920C3E50A20C3E5FA
-:1004F0000820A0E3B424C3E11B0100EAA4249FE583
-:100500000020D2E5010052E32401001AC93043E281
-:10051000350053E303F19F97110100EAC80700007B
-:100520006409000064090000580900006409000023
-:1005300064090000340900001C080000F0080000F5
-:10054000B8080000640900006409000064090000A4
-:1005500064090000640900006409000064090000E7
-:1005600064090000640900006409000064090000D7
-:1005700064090000640900006409000064090000C7
-:1005800064090000640900006409000064090000B7
-:1005900064090000640900006409000064090000A7
-:1005A0006409000064090000640900006409000097
-:1005B0006409000064090000640900006409000087
-:1005C00064090000CC0600004C060000F4050000A1
-:1005D000AC06000064090000640900006409000022
-:1005E0002C07000064090000640700007007000089
-:1005F000A40700000120D0E53F0052E30200009A6A
-:100600002200A0E387FFFFEBD70000EA94539FE5A9
-:10061000040085E2481095E58C339FE50FE0A0E1EA
-:1006200013FF2FE10030E0E30330C5E50120D4E5FE
-:10063000483095E5033082E0483085E50130D4E567
-:10064000013083E2B434C5E1C70000EA0130D0E5EF
-:100650003F0053E30200009A2200A0E371FFFFEB8A
-:10066000C10000EA041090E538539FE5481085E585
-:10067000040085E20120D4E52C339FE50FE0A0E1E2
-:1006800013FF2FE10030E0E30330C5E50120D4E59E
-:10069000483095E5033082E0483085E50130D4E507
-:1006A000013083E2B434C5E1AF0000EAF4329FE5E3
-:1006B0000020E0E30320C3E5042090E5482083E523
-:1006C0000120A0E3B424C3E1A70000EAD4C29FE55F
-:1006D0000030E0E30330CCE548109CE5043090E5C1
-:1006E000000053E30020A0030500000A0020A0E35F
-:1006F0000100D1E4002082E0FF2002E2013053E259
-:10070000FAFFFF1A07208CE598329FE50120A0E34D
-:100710000420C3E50020A0E30520C3E50620C3E5CF
-:100720000820A0E3B424C3E18F0000EA74329FE5FF
-:100730000020E0E30320C3E570229FE5482083E525
-:100740000020A0E30420C3E50520C3E50620C3E59F
-:100750000720A0E3072083E50820A0E3B424C3E139
-:10076000810000EA0000A0E32EFFFFEB7E0000EA1C
-:1007700030329FE50020E0E30320C3E50020A0E342
-:100780000420C3E50110D3E50510C3E50620C3E549
-:100790000720C3E50820C3E50620A0E3B424C3E195
-:1007A000710000EAFC419FE50030A0E30030C4E5A1
-:1007B00017FFFFEB0030E0E30330C4E50130A0E3B6
-:1007C000B434C4E1680000EAD8319FE5480093E5FD
-:1007D0003F10A0E3012084E2D4319FE50FE0A0E1C7
-:1007E00013FF2FE1000050E30200001A3100A0E3E4
-:1007F0000CFFFFEB5C0000EAA8319FE50020E0E37E
-:100800000320C3E5482093E53F2082E2482083E5AA
-:100810000120A0E3B424C3E1530000EA0130D0E595
-:100820003E0053E30200009A2200A0E3FDFEFFEB2E
-:100830004D0000EA6C319FE50020E0E30320C3E5B2
-:100840000120A0E3B424C3E10110D0E5000051E38E
-:100850000700001A5C319FE50FE0A0E113FF2FE1D4
-:10086000000050E34000001A3100A0E3EDFEFFEB72
-:100870003D0000EA2C319FE5480093E5022084E228
-:100880002C319FE50FE0A0E113FF2FE1000050E3C2
-:100890000200001A3100A0E3E2FEFFEB320000EAA2
-:1008A00000319FE50110D4E5482093E5022081E066
-:1008B000482083E52C0000EAE8309FE50020E0E3D3
-:1008C0000320C3E50020A0E30420C3E50520C3E521
-:1008D0004010A0E30610C3E50720C3E50820C3E5E8
-:1008E0000920C3E50720A0E3B424C3E11E0000EA09
-:1008F000B0309FE5480093E5041094E5B8309FE5DB
-:100900000FE0A0E113FF2FE1000050E30200001A06
-:100910003100A0E3C3FEFFEB130000EA84309FE543
-:100920000020E0E30320C3E50120A0E3B424C3E1F9
-:100930000D0000EA84309FE50FE0A0E113FF2FE1F6
-:1009400060309FE50020E0E30320C3E50120A0E341
-:10095000B424C3E1040000EA3100A0E3B1FEFFEBE0
-:10096000010000EA2000A0E3AEFEFFEB34309FE57B
-:100970004330D3E5010053E31000A003A9FEFF0BB1
-:1009800020309FE50120A0E34320C3E5030083E27C
-:10099000B414D3E128309FE50FE0A0E113FF2FE16D
-:1009A0003840BDE81EFF2FE144020040A40A0000C9
-:1009B000681500009C0D0000F00D0000B80D00004F
-:1009C000380B0000A403000008402DE95C309FE5CF
-:1009D0000FE0A0E113FF2FE1010050E31100000A36
-:1009E0004C309FE50030D3E5010053E30D00001AC1
-:1009F00040309FE50FE0A0E113FF2FE1310050E30D
-:100A00000800009A0020A0E324309FE50020C3E501
-:100A100024309FE50FE0A0E113FF2FE11C309FE59C
-:100A20000FE0A0E113FF2FE10840BDE81EFF2FE11A
-:100A3000F803000090020040C80E0000240E0000E1
-:100A4000E80A000008402DE90120A0E318309FE5E6
-:100A50000020C3E514309FE50FE0A0E113FF2FE174
-:100A6000D8FFFFEB0840BDE81EFF2FE190020040D9
-:100A7000800E00001EFF2FE11EFF2FE110402DE928
-:100A800014309FE5000083E5041083E50C409FE5EA
-:100A90000FE0A0E114FF2FE1FCFFFFEA9402004009
-:100AA000780A0000F8402DE90140A0E1005052E230
-:100AB0000900000A0060A0E124709FE50130D4E441
-:100AC0000130C6E40FE0A0E117FF2FE1015045E23D
-:100AD0000558A0E12558B0E1F7FFFF1AF840BDE83E
-:100AE0001EFF2FE1780A000008402DE93C309FE509
-:100AF0000FE0A0E113FF2FE1000050E30900000A1E
-:100B00000101A0E3021AA0E34020A0E3E4FFFFEB11
-:100B10000220A0E318309FE5402083E50131A0E3E7
-:100B20000FE0A0E113FF2FE10840BDE81EFF2FE119
-:100B3000D40D000000C01FE008402DE90C309FE5F7
-:100B40000FE0A0E113FF2FE10840BDE81EFF2FE1F9
-:100B5000500000001C309FE51430D3E5010013E382
-:100B600010309F150030D3150030C0150100A013C0
-:100B70000000A0031EFF2FE100C000E038402DE977
-:100B80004C309FE51430D3E5200013E30000A003B0
-:100B90000D00000A38309FE50000C3E51430D3E5AE
-:100BA000200013E30100A0130700001A24509FE562
-:100BB0001C409FE50FE0A0E115FF2FE11430D4E5C4
-:100BC000200013E3FAFFFF0A0100A0E33840BDE86C
-:100BD0001EFF2FE100C000E0780A000034309FE5DE
-:100BE0000020A0E30420C3E50820C3E51420C3E5EA
-:100BF0007F10E0E30C10C3E54110A0E30010C3E553
-:100C00000420C3E50320A0E30C20C3E50720A0E3F4
-:100C10000820C3E51EFF2FE100C000E0F8452DE9E4
-:100C20000050A0E10140A0E1400051E384009F8515
-:100C30008310A08380309F850FE0A08113FF2F8158
-:100C40000400A0E1CCFFFFEB010050E364009F151E
-:100C50008610A01360309F150FE0A01113FF2F1115
-:100C60000460A0E1000054E31000000A0040A0E38B
-:100C700048709FE53C809FE53CA09FE50FE0A0E128
-:100C800017FF2FE10400D5E7BBFFFFEB010050E3A6
-:100C90000800A0118E10A0130FE0A0111AFF2F1151
-:100CA000014084E20438A0E1230856E1F2FFFF8A04
-:100CB000F845BDE81EFF2FE1381600007C0A000051
-:100CC000780A000070402DE90050A0E1A0309FE5B7
-:100CD0000030D3E5000053E30A00001A94009FE5BA
-:100CE0009BFFFFEB010050E30000A0131E00001A61
-:100CF0007C309FE50120A0E30020C3E50000A0E3D5
-:100D00004500C3E5180000EA64009FE54540D0E5D2
-:100D1000040080E0050080E28DFFFFEB010050E35E
-:100D20000000A0131000001A014084E2FF2004E23A
-:100D30003C309FE54520C3E50430D3E5020053E194
-:100D40000000A0130800001A24609FE50500A0E140
-:100D5000051086E220309FE50FE0A0E113FF2FE1B0
-:100D60000030A0E30030C6E50100A0E37040BDE81C
-:100D70001EFF2FE19C020040A0020040A40A0000D8
-:100D800008402DE90C309FE50FE0A0E113FF2FE1B3
-:100D90000840BDE81EFF2FE11C12000008402DE9AD
-:100DA0000C309FE50FE0A0E113FF2FE10840BDE804
-:100DB0001EFF2FE13412000008402DE90C309FE5A2
-:100DC0000FE0A0E113FF2FE10840BDE81EFF2FE177
-:100DD000A012000008402DE90C309FE50FE0A0E1D3
-:100DE00013FF2FE10840BDE81EFF2FE1D4130000E0
-:100DF00008402DE920309FE50FE0A0E113FF2FE12F
-:100E0000000050E30000A00310309F150FE0A01178
-:100E100013FF2F110840BDE81EFF2FE11C14000036
-:100E20009414000014309FE50020A0E3042083E523
-:100E30000C2083E5082083E5102083E51EFF2FE1C9
-:100E4000004000E01C309FE5082093E518309FE546
-:100E5000001093E5011082E0040093E5011060E0CA
-:100E6000060083E81EFF2FE1004000E0E40200409E
-:100E700004309FE5000083E51EFF2FE1E4020040FF
-:100E800008402DE930309FE50000A0E3140083E521
-:100E9000280083E524209FE50C2083E50120A0E3C2
-:100EA000042083E5082093E514309FE5042083E5C2
-:100EB000EEFFFFEB0840BDE81EFF2FE1004000E021
-:100EC0005FEA0000E402004008402DE9DCFFFFEB90
-:100ED00008309FE5000093E50840BDE81EFF2FE1C4
-:100EE000E4020040F0412DE90060A0E10040A0E3F1
-:100EF0000450A0E158809FE558709FE50FE0A0E105
-:100F000018FF2FE1043097E7060053E10900008A3B
-:100F1000041087E0041091E5013083E0030056E1FE
-:100F20000400002A852085E028309FE5023183E017
-:100F30000800D3E5040000EA015085E20C4084E299
-:100F4000C00054E3ECFFFF1AFF00A0E3F041BDE84E
-:100F50001EFF2FE1780A00007015000030402DE9D7
-:100F600024D04DE20040A0E1000090E5DCFFFFEB63
-:100F7000FF0050E30000A0033D00000A3230A0E370
-:100F80000C308DE510008DE514008DE50130A0E3F7
-:100F900000308DE5E4309FE50FE0A0E113FF2FE185
-:100FA0000C008DE20D10A0E13A31E0E30FE0A0E18A
-:100FB00013FF2FE100309DE5000053E30000A01374
-:100FC0002B00001A3330A0E30C308DE50450A0E173
-:100FD000043095E410308DE514508DE5023CA0E31B
-:100FE00018308DE598309FE51C308DE50130A0E389
-:100FF00000308DE584309FE50FE0A0E113FF2FE185
-:101000000C008DE20D10A0E13A31E0E30FE0A0E129
-:1010100013FF2FE100309DE5000053E30000A01313
-:101020001300001A3830A0E30C308DE5003094E551
-:1010300010308DE514508DE5023CA0E318308DE5AD
-:101040000130A0E300308DE530309FE50FE0A0E1F6
-:1010500013FF2FE10C008DE20D10A0E13A31E0E327
-:101060000FE0A0E113FF2FE100009DE5010070E219
-:101070000000A03324D08DE23040BDE81EFF2FE1F8
-:10108000780A000060EA000008402DE9813BB0E1E9
-:101090000000A0130900001A003090E5010053E1A0
-:1010A0000100A0030500000A041080E4022CA0E364
-:1010B00010309FE50FE0A0E113FF2FE10100A0E356
-:1010C0000840BDE81EFF2FE1A40A000038402DE9CA
-:1010D0000040A0E10150A0E14C309FE5030050E149
-:1010E0000600000A020A51E30600000A9AFFFFEB1D
-:1010F000000050E30040A0030800000A020000EADC
-:1011000028409FE5000000EA1C409FE50400A0E1A4
-:101110000510A0E1DBFFFFEB000050E30040A0035F
-:101120000400A0E13840BDE81EFF2FE1F0040040BC
-:10113000EC020040F0472DE90050A0E10140A0E1A1
-:101140000270A0E10360A0E1A194A0E18994A0E174
-:10115000003090E5010073E30400001A0910A0E1DB
-:10116000C8FFFFEB000050E30000A0032600000AC8
-:10117000003095E5090053E10500000A0500A0E1F3
-:101180000910A0E1D0FFFFEB005050E20000A003E7
-:101190001D00000A003095E5044063E0044085E04E
-:1011A000044084E268809FE568A09FE5029C89E294
-:1011B0000FE0A0E118FF2FE1043085E2043063E086
-:1011C0000A0053E10500009A0500A0E10910A0E122
-:1011D000BDFFFFEB005050E20800000A044085E22A
-:1011E0000130D7E40030C4E5016046E20668A0E1C2
-:1011F0002668B0E10300000A014084E2EBFFFFEA49
-:101200000000A0E3000000EA0100A0E3F047BDE811
-:101210001EFF2FE1780A0000FF0100000C309FE55F
-:101220000020E0E3002083E5042283E51EFF2FE198
-:10123000EC02004070402DE90040A0E10150A0E127
-:101240000260A0E126FFFFEBFF0050E30000A003D7
-:101250000E00000A010044E2050080E020FFFFEBE1
-:10126000FF0050E30000A0030800000AA434A0E13E
-:10127000100053E30538A0E118009F0518009F15E2
-:101280000410A0E10620A0E12338A0E1A8FFFFEBB5
-:101290007040BDE81EFF2FE1F0040040EC0200406A
-:1012A00070402DE920D04DE20050A0E10160A0E1A6
-:1012B0000BFFFFEB0040A0E1010045E2060080E0EB
-:1012C00007FFFFEB0050A0E1FF0050E3FF005413C5
-:1012D0000000A0033900000A050054E10000A083CB
-:1012E0003600008A000054E30000A0033300000A27
-:1012F000100055E30000A0833000008A3230A0E3E4
-:1013000038008DE80130A0E314308DE5B8309FE55A
-:101310000FE0A0E113FF2FE10D00A0E114108DE21A
-:101320003A31E0E30FE0A0E113FF2FE114309DE537
-:10133000000053E30000A0132000001A3430A0E3A3
-:1013400038008DE884309FE50C308DE50130A0E356
-:1013500014308DE570309FE50FE0A0E113FF2FE121
-:101360000D00A0E114108DE23A31E0E30FE0A0E1BE
-:1013700013FF2FE114309DE5000053E30000A0139C
-:101380000E00001A3530A0E338008DE80130A0E3EC
-:1013900014308DE530309FE50FE0A0E113FF2FE121
-:1013A0000D00A0E114108DE23A31E0E30FE0A0E17E
-:1013B00013FF2FE114009DE5010070E20000A0334F
-:1013C00020D08DE27040BDE81EFF2FE1780A0000BA
-:1013D00060EA0000023AA0E3050093E8000082E022
-:1013E000082093E5020080E00C2093E5020080E0F5
-:1013F000102093E5020080E0142093E5020080E0D5
-:10140000182093E5020080E01C3093E5030080E0A3
-:10141000010070E20000A0331EFF2FE110402DE913
-:1014200008D04DE260209FE5823F82E2120093E9FE
-:10143000044081E0082292E5024084E00C2093E51C
-:10144000024084E0102093E5024084E0182093E5F8
-:10145000024084E01C3093E5034084E0004064E2F5
-:1014600004408DE5DAFFFFEB000054E10100A0032A
-:1014700018009F150410A01301208D106CFFFF1B96
-:1014800008D08DE21040BDE81EFF2FE1EC020040C5
-:101490001420000008402DE948309FE5043293E510
-:1014A000010073E30400000A3C009FE5AAFEFFEB85
-:1014B000000050E30000A0030800000A24309FE56C
-:1014C000003093E5010073E30100A0030300000A6C
-:1014D00010009FE5A0FEFFEB000050E20100A0130A
-:1014E0000840BDE81EFF2FE1EC020040F004004080
-:1014F00004E04EE21F402DE910009FE53810A0E304
-:101500000C309FE50FE0A0E113FF2FE11F80FDE805
-:101510005C1600007C0A000004E04EE20F502DE94A
-:1015200010009FE54610A0E30C309FE50FE0A0E11E
-:1015300013FF2FE10F90FDE85C1600007C0A00000D
-:101540000F502DE910009FE55410A0E30C309FE5EB
-:101550000FE0A0E113FF2FE10F90FDE85C16000003
-:101560007C0A0000010204084F70656E424C540072
-:1015700000200000002000000100000000400000EA
-:1015800000200000020000000060000000200000B9
-:1015900003000000008000000020000004000000A4
-:1015A00000A00000002000000500000000C00000B6
-:1015B000002000000600000000E000000020000005
-:1015C000070000000000010000000100080000000A
-:1015D00000000200000001000900000000000300FC
-:1015E000002000000A00000000200300002000008E
-:1015F0000B00000000400300002000000C00000071
-:1016000000600300002000000D00000000800300C7
-:10161000002000000E00000000A0030000200000D9
-:101620000F00000000C003000020000010000000B8
-:101630006D61696E2E6300002E2E2F2E2E2F2E2E02
-:101640002F536F757263652F41524D375F4C504376
-:10165000323030302F756172742E63002E2E2F2E93
-:101660002E2F2E2E2F536F757263652F41524D37DB
-:101670005F4C5043323030302F4743432F76656301
-:08168000746F72732E63000009
+:10013000DC1E0040D8130000000200400002004016
+:1001400000020040F406004010402DE9D8309FE541
+:100150000040A0E3D4109FE5D4209FE50100F3E523
+:10016000910000E0260A40E2160E40E2020050E153
+:100170000600009A014084E2FF4004E2040054E3D8
+:10018000F5FFFF1AAC009FE57010A0E3DB0100EB68
+:100190008422A0E1022082E3FF2002E298309FE562
+:1001A0008420C3E55510E0E38C10C3E55520A0E39F
+:1001B0008C20C3E50100A0E38000C3E58C10C3E5FB
+:1001C0008C20C3E5B828D3E1010B12E3FCFFFF0A42
+:1001D00064309FE50320A0E38020C3E55520E0E3E1
+:1001E0008C20C3E5AB2082E28C20C3E50020A0E395
+:1001F0000020C3E5042082E20420C3E50220A0E33E
+:100200000020C3E50120A0E3013C83E20020C3E518
+:1002100028309FE5002093E5052082E3002083E558
+:10022000070000EB0D0000EBFDFFFFEAB31200003A
+:10023000C0D40100A08002008013000000C01FE0B5
+:1002400000C002E008402DE9AA0100EBA00100EB8C
+:10025000500200EB070000EB0840BDE81EFF2FE155
+:1002600008402DE9A40100EB130000EB850100EB31
+:100270000840BDE81EFF2FE104E02DE50CD04DE263
+:100280000030E0E30430CDE50030A0E30530CDE5FB
+:10029000320000EBE20100EB18309FE50030D3E5BF
+:1002A000010053E304008D024100000B0CD08DE2ED
+:1002B00004E09DE41EFF2FE10002004008402DE90C
+:1002C00014009FE5070200EB010050E308009F05C2
+:1002D0003700000B0840BDE81EFF2FE1040200407C
+:1002E00008402DE9FF1001E2DD0100EB2B0000EBDF
+:1002F0000840BDE81EFF2FE10120A0E304309FE588
+:100300000020C3E51EFF2FE10002004004309FE5FE
+:100310000000D3E51EFF2FE10002004008402DE958
+:10032000180000EB0840BDE81EFF2FE10020A0E30D
+:1003300004309FE50120C3E51EFF2FE14402004089
+:1003400014309FE50120E0E30320C3E50400C3E58A
+:100350000220A0E3B424C3E11EFF2FE144020040C9
+:100360001C309FE50020A0E30020C3E5482083E582
+:100370004320C3E5B424C3E10220C3E50120C3E563
+:100380001EFF2FE1440200400C309FE50000D3E542
+:10039000000050E20100A0131EFF2FE144020040C4
+:1003A0000020A0E304309FE54320C3E51EFF2FE1BA
+:1003B0004402004038402DE90040A0E10030D0E583
+:1003C000FF0053E31200001AD7FFFFEBAC349FE5A8
+:1003D0000120A0E30020C3E50010E0E30310C3E523
+:1003E0001010A0E30410C3E50010A0E30510C3E55E
+:1003F0004000A0E30600C3E50700C3E50810C3E51D
+:100400000920C3E50A20C3E50820A0E3B424C3E122
+:100410000D0100EA64249FE50020D2E5010052E3CB
+:100420001401001AC93043E2350053E303F19F97EA
+:10043000030100EAD0060000440800004408000060
+:100440003808000044080000440800001C080000B0
+:100450001C070000E0070000A80700004408000097
+:10046000440800004408000044080000440800005C
+:10047000440800004408000044080000440800004C
+:10048000440800004408000044080000440800003C
+:10049000440800004408000044080000440800002C
+:1004A000440800004408000044080000440800001C
+:1004B000440800004408000044080000440800000C
+:1004C00044080000440800004408000044080000FC
+:1004D000440800004408000044080000D40500005F
+:1004E0005C0500000C050000B40500004408000095
+:1004F00044080000440800003406000044080000DE
+:100500006C06000078060000AC0600000120D0E573
+:100510003F0052E30200009A2200A0E387FFFFEBB6
+:10052000C90000EA54539FE5040085E2481095E5B0
+:10053000F90000EB0030E0E30330C5E50120D4E52D
+:10054000483095E5033082E0483085E50130D4E558
+:10055000013083E2B434C5E1BB0000EA0130D0E5EC
+:100560003F0053E30200009A2200A0E373FFFFEB79
+:10057000B50000EA041090E500539FE5481085E5BA
+:10058000040085E20120D4E5E30000EB0030E0E365
+:100590000330C5E50120D4E5483095E5033082E01D
+:1005A000483085E50130D4E5013083E2B434C5E15B
+:1005B000A50000EAC4329FE50020E0E30320C3E584
+:1005C000042090E5482083E50120A0E3B424C3E1A2
+:1005D0009D0000EAA4C29FE50030E0E30330CCE5D3
+:1005E00048109CE5043090E5000053E30020A00390
+:1005F0000500000A0020A0E30100D1E4002082E011
+:10060000FF2002E2013053E2FAFFFF1A07208CE5D7
+:1006100068329FE50120A0E30420C3E50020A0E3A9
+:100620000520C3E50620C3E50820A0E3B424C3E108
+:10063000850000EA44329FE50020E0E30320C3E5A3
+:100640003C229FE5482083E50020A0E30420C3E589
+:100650000520C3E50620C3E50720A0E3072083E5C6
+:100660000820A0E3B424C3E1770000EA0000A0E37F
+:1006700032FFFFEB740000EA00329FE50020E0E368
+:100680000320C3E50020A0E30420C3E50110D3E567
+:100690000510C3E50620C3E50720C3E50820C3E530
+:1006A0000620A0E3B424C3E1670000EACC419FE543
+:1006B0000030A0E30030C4E51BFFFFEB0030E0E3B7
+:1006C0000330C4E50130A0E3B434C4E15E0000EAC5
+:1006D000A8319FE5480093E53F10A0E3012084E2A4
+:1006E000300100EB000050E30200001A3100A0E3EB
+:1006F00012FFFFEB540000EA80319FE50020E0E3A9
+:100700000320C3E5482093E53F2082E2482083E5AB
+:100710000120A0E3B424C3E14B0000EA0130D0E59E
+:100720003E0053E30200009A2200A0E303FFFFEB28
+:10073000450000EA44319FE50020E0E30320C3E5E3
+:100740000120A0E3B424C3E10110D0E5000051E38F
+:100750000500001A1F0100EB000050E33A00001AE8
+:100760003100A0E3F5FEFFEB370000EA0C319FE516
+:10077000480093E5022084E20A0100EB000050E308
+:100780000200001A3100A0E3ECFEFFEB2E0000EAAD
+:10079000E8309FE50110D4E5482093E5022081E090
+:1007A000482083E5280000EAD0309FE50020E0E300
+:1007B0000320C3E50020A0E30420C3E50520C3E532
+:1007C0004010A0E30610C3E50720C3E50820C3E5F9
+:1007D0000920C3E50720A0E3B424C3E11A0000EA1E
+:1007E00098309FE5480093E5041094E5F10000EB94
+:1007F000000050E30200001A3100A0E3CFFEFFEB3F
+:10080000110000EA74309FE50020E0E30320C3E517
+:100810000120A0E3B424C3E10B0000EA5D0000EB7B
+:1008200058309FE50020E0E30320C3E50120A0E36A
+:10083000B424C3E1040000EA3100A0E3BFFEFFEBF3
+:10084000010000EA2000A0E3BCFEFFEB2C309FE596
+:100850004330D3E5010053E31000A003B7FEFF0BC4
+:1008600018309FE50120A0E34320C3E5030083E2A5
+:10087000B414D3E199FEFFEB3840BDE81EFF2FE131
+:1008800044020040B812000008402DE9A2FEFFEB30
+:10089000010050E30B00000A30309FE50030D3E543
+:1008A000010053E30700001AFA0000EB310050E3A7
+:1008B0000400009A0020A0E310309FE50020C3E56B
+:1008C000CB0000EB220000EB0840BDE81EFF2FE14B
+:1008D0009002004008402DE90120A0E310309FE580
+:1008E0000020C3E5D90000EBE6FFFFEB0840BDE8C0
+:1008F0001EFF2FE1900200401EFF2FE11EFF2FE19F
+:1009000008402DE90C309FE5000083E5041083E5E5
+:10091000F9FFFFEBFDFFFFEA9402004070402DE974
+:100920000140A0E1005052E20700000A0060A0E18F
+:100930000130D4E40130C6E4EFFFFFEB015045E2A3
+:100940000558A0E12558B0E1F8FFFF1A7040BDE856
+:100950001EFF2FE108402DE99A0000EB000050E354
+:100960000900000A0101A0E3021AA0E34020A0E36D
+:10097000E9FFFFEB0220A0E314309FE5402083E570
+:100980000131A0E30FE0A0E113FF2FE10840BDE833
+:100990001EFF2FE100C01FE008402DE9ABFDFFEB7B
+:1009A0000840BDE81EFF2FE11C309FE51430D3E561
+:1009B000010013E310309F150030D3150030C0152F
+:1009C0000100A0130000A0031EFF2FE100C000E003
+:1009D00010402DE944309FE51430D3E5200013E3A7
+:1009E0000000A0030B00000A30309FE50000C3E5C3
+:1009F0001430D3E5200013E30100A0130500001A12
+:100A000018409FE5BCFFFFEB1430D4E5200013E352
+:100A1000FBFFFF0A0100A0E31040BDE81EFF2FE12D
+:100A200000C000E034309FE50020A0E30420C3E5CF
+:100A30000820C3E51420C3E57F10E0E30C10C3E5F4
+:100A40004110A0E30010C3E50420C3E50320A0E3A8
+:100A50000C20C3E50720A0E30820C3E51EFF2FE11B
+:100A600000C000E0F0412DE90050A0E10140A0E10C
+:100A7000400051E368009F858310A0839FFFFF8B98
+:100A80000400A0E1D1FFFFEB010050E350009F15EF
+:100A90008610A01399FFFF1B0460A0E1000054E33F
+:100AA0000D00000A0040A0E334709FE58E80A0E3B3
+:100AB00091FFFFEB0400D5E7C4FFFFEB010050E31B
+:100AC0000700A0110810A0118CFFFF1B014084E259
+:100AD0000438A0E1230856E1F4FFFF8AF041BDE8A5
+:100AE0001EFF2FE18813000070402DE90050A0E1A7
+:100AF00098309FE50030D3E5000053E30A00001A68
+:100B00008C009FE5A7FFFFEB010050E30000A0135E
+:100B10001C00001A74309FE50120A0E30020C3E50B
+:100B20000000A0E34500C3E5160000EA5C009FE575
+:100B30004540D0E5040080E0050080E299FFFFEB2E
+:100B4000010050E30000A0130E00001A014084E2EF
+:100B5000FF2004E234309FE54520C3E50430D3E5AF
+:100B6000020053E10000A0130600001A1C609FE57C
+:100B70000500A0E1051086E267FFFFEB0030A0E36F
+:100B80000030C6E50100A0E37040BDE81EFF2FE184
+:100B90009C020040A002004008402DE9020100EB49
+:100BA0000840BDE81EFF2FE108402DE9040100EBDD
+:100BB0000840BDE81EFF2FE108402DE91B0100EBB6
+:100BC0000840BDE81EFF2FE108402DE95D0100EB64
+:100BD0000840BDE81EFF2FE108402DE96B0100EB46
+:100BE000000050E30000A0038601001B0840BDE8A0
+:100BF0001EFF2FE114309FE50020A0E3042083E5D1
+:100C00000C2083E5082083E5102083E51EFF2FE1FB
+:100C1000004000E01C309FE5082093E518309FE578
+:100C2000001093E5011082E0040093E5011060E0FC
+:100C3000060083E81EFF2FE1004000E0E4020040D0
+:100C400004309FE5000083E51EFF2FE1E402004031
+:100C500008402DE930309FE50000A0E3140083E553
+:100C6000280083E524209FE50C2083E50120A0E3F4
+:100C7000042083E5082093E514309FE5042083E5F4
+:100C8000EEFFFFEB0840BDE81EFF2FE1004000E053
+:100C90005FEA0000E402004008402DE9DCFFFFEBC2
+:100CA00008309FE5000093E50840BDE81EFF2FE1F6
+:100CB000E4020040F8402DE90060A0E10040A0E31C
+:100CC0000450A0E150709FE50BFFFFEB043097E765
+:100CD000060053E10900008A041087E0041091E542
+:100CE000013083E0030056E10400002A852085E0FE
+:100CF00024309FE5023183E00800D3E5040000EAD8
+:100D0000015085E20C4084E2C00054E3EDFFFF1A7D
+:100D1000FF00A0E3F840BDE81EFF2FE1C012000075
+:100D200030402DE924D04DE20040A0E1000090E5E4
+:100D3000DFFFFFEBFF0050E30000A0033700000AD5
+:100D40003230A0E30C308DE510008DE514008DE508
+:100D50000130A0E300308DE5E7FEFFEB0C008DE2F3
+:100D60000D10A0E13A31E0E30FE0A0E113FF2FE125
+:100D700000309DE5000053E30000A0132700001A97
+:100D80003330A0E30C308DE50450A0E1043095E44D
+:100D900010308DE514508DE5023CA0E318308DE550
+:100DA00084309FE51C308DE50130A0E300308DE5F7
+:100DB000D1FEFFEB0C008DE20D10A0E13A31E0E333
+:100DC0000FE0A0E113FF2FE100309DE5000053E3A9
+:100DD0000000A0131100001A3830A0E30C308DE59C
+:100DE000003094E510308DE514508DE5023CA0E311
+:100DF00018308DE50130A0E300308DE5BEFEFFEB3D
+:100E00000C008DE20D10A0E13A31E0E30FE0A0E12B
+:100E100013FF2FE100009DE5010070E20000A03308
+:100E200024D08DE23040BDE81EFF2FE160EA0000D3
+:100E300008402DE9813BB0E10000A0130700001A33
+:100E4000003090E5010053E10100A0030300000A17
+:100E5000041080E4022CA0E3AFFEFFEB0100A0E34E
+:100E60000840BDE81EFF2FE138402DE90040A0E119
+:100E70000150A0E14C309FE5030050E10600000A5C
+:100E8000020A51E30600000AA4FFFFEB000050E352
+:100E90000040A0030800000A020000EA28409FE585
+:100EA000000000EA1C409FE50400A0E10510A0E15D
+:100EB000DEFFFFEB000050E30040A0030400A0E1D0
+:100EC0003840BDE81EFF2FE1F0040040EC02004076
+:100ED000F8452DE90050A0E10140A0E10270A0E139
+:100EE0000360A0E1A1A4A0E18AA4A0E1003090E504
+:100EF000010073E30400001A0A10A0E1CBFFFFEB2E
+:100F0000000050E30000A0032400000A003095E533
+:100F10000A0053E10500000A0500A0E10A10A0E163
+:100F2000D0FFFFEB005050E20000A0031B00000ABE
+:100F3000003095E5044063E0044085E0044084E22D
+:100F400060809FE502AC8AE26BFEFFEB043085E235
+:100F5000043063E0080053E10500009A0500A0E1B9
+:100F60000A10A0E1BFFFFFEB005050E20800000AAA
+:100F7000044085E20130D7E40030C4E5016046E278
+:100F80000668A0E12668B0E10300000A014084E29F
+:100F9000ECFFFFEA0000A0E3000000EA0100A0E38C
+:100FA000F845BDE81EFF2FE1FF0100000C309FE572
+:100FB0000020E0E3002083E5042283E51EFF2FE10B
+:100FC000EC02004070402DE90040A0E10150A0E19A
+:100FD0000260A0E136FFFFEBFF0050E30000A0033A
+:100FE0000E00000A010044E2050080E030FFFFEB44
+:100FF000FF0050E30000A0030800000AA434A0E1B1
+:10100000100053E30538A0E118009F0518009F1554
+:101010000410A0E10620A0E12338A0E1ABFFFFEB24
+:101020007040BDE81EFF2FE1F0040040EC020040DC
+:1010300070402DE920D04DE20050A0E10160A0E118
+:101040001BFFFFEB0040A0E1010045E2060080E04D
+:1010500017FFFFEB0050A0E1FF0050E3FF00541327
+:101060000000A0033300000A050054E10000A08343
+:101070003000008A000054E30000A0032D00000AA5
+:10108000100055E30000A0832A00008A3230A0E35C
+:1010900038008DE80130A0E314308DE516FEFFEB3B
+:1010A0000D00A0E114108DE23A31E0E30FE0A0E181
+:1010B00013FF2FE114309DE5000053E30000A0135F
+:1010C0001C00001A3430A0E338008DE870309FE532
+:1010D0000C308DE50130A0E314308DE506FEFFEB0A
+:1010E0000D00A0E114108DE23A31E0E30FE0A0E141
+:1010F00013FF2FE114309DE5000053E30000A0131F
+:101100000C00001A3530A0E338008DE80130A0E370
+:1011100014308DE5F8FDFFEB0D00A0E114108DE219
+:101120003A31E0E30FE0A0E113FF2FE114009DE569
+:10113000010070E20000A03320D08DE27040BDE8D5
+:101140001EFF2FE160EA0000023AA0E3050093E8E9
+:10115000000082E0082093E5020080E00C2093E587
+:10116000020080E0102093E5020080E0142093E567
+:10117000020080E0182093E5020080E01C3093E537
+:10118000030080E0010070E20000A0331EFF2FE1A9
+:1011900010402DE908D04DE260209FE5823F82E2B9
+:1011A000120093E9044081E0082292E5024084E0C5
+:1011B0000C2093E5024084E0102093E5024084E097
+:1011C000182093E5024084E01C3093E5034084E05E
+:1011D000004064E204408DE5DAFFFFEB000054E1DB
+:1011E0000100A00318009F150410A01301208D100A
+:1011F00073FFFF1B08D08DE21040BDE81EFF2FE1FA
+:10120000EC0200401420000008402DE948309FE522
+:10121000043293E5010073E30400000A3C009FE5FB
+:10122000BEFEFFEB000050E30000A0030800000A30
+:1012300024309FE5003093E5010073E30100A00333
+:101240000300000A10009FE5B4FEFFEB000050E22F
+:101250000100A0130840BDE81EFF2FE1EC02004092
+:10126000F004004004E04EE21F402DE908009FE535
+:101270003810A0E3A1FDFFEB1F80FDE8AC130000D8
+:1012800004E04EE20F502DE908009FE54610A0E370
+:101290009AFDFFEB0F90FDE8AC1300000F502DE915
+:1012A00008009FE55410A0E394FDFFEB0F90FDE8CC
+:1012B000AC130000010204084F70656E424C5400EC
+:1012C000002000000020000001000000004000009D
+:1012D000002000000200000000600000002000006C
+:1012E0000300000000800000002000000400000057
+:1012F00000A00000002000000500000000C0000069
+:10130000002000000600000000E0000000200000B7
+:1013100007000000000001000000010008000000BC
+:1013200000000200000001000900000000000300AE
+:10133000002000000A000000002003000020000040
+:101340000B00000000400300002000000C00000023
+:1013500000600300002000000D000000008003007A
+:10136000002000000E00000000A00300002000008C
+:101370000F00000000C0030000200000100000006B
+:101380006D61696E2E6300002E2E2F2E2E2F2E2EB5
+:101390002F536F757263652F41524D375F4C504329
+:1013A000323030302F756172742E63002E2E2F2E46
+:1013B0002E2F2E2E2F536F757263652F41524D378E
+:1013C0005F4C5043323030302F4743432F766563B4
+:0813D000746F72732E630000BC
:00000001FF
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map
index d2e23625..cd698c0e 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/bin/openbtl_olimex_lpc_l2294_20mhz.map
@@ -7,38 +7,38 @@ start address 0x00000000
Program Header:
LOAD off 0x00008000 vaddr 0x00000000 paddr 0x00000000 align 2**15
- filesz 0x00001688 memsz 0x00001688 flags r-x
- LOAD off 0x00010200 vaddr 0x40000200 paddr 0x00001688 align 2**15
+ filesz 0x000013d8 memsz 0x000013d8 flags r-x
+ LOAD off 0x00010200 vaddr 0x40000200 paddr 0x000013d8 align 2**15
filesz 0x00000000 memsz 0x000004f4 flags rw-
private flags = 5000000: [Version5 EABI]
Sections:
Idx Name Size VMA LMA File off Algn
- 0 .text 00001688 00000000 00000000 00008000 2**2
+ 0 .text 000013d8 00000000 00000000 00008000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
- 1 .bss 000004f4 40000200 00001688 00010200 2**2
+ 1 .bss 000004f4 40000200 000013d8 00010200 2**2
ALLOC
- 2 .ARM.attributes 00000030 00000000 00000000 00009688 2**0
+ 2 .ARM.attributes 00000030 00000000 00000000 000093d8 2**0
CONTENTS, READONLY
- 3 .comment 0000002a 00000000 00000000 000096b8 2**0
+ 3 .comment 0000002a 00000000 00000000 00009408 2**0
CONTENTS, READONLY
- 4 .debug_abbrev 00000a61 00000000 00000000 000096e2 2**0
+ 4 .debug_abbrev 00000aa1 00000000 00000000 00009432 2**0
CONTENTS, READONLY, DEBUGGING
- 5 .debug_info 0000173c 00000000 00000000 0000a143 2**0
+ 5 .debug_info 000017a7 00000000 00000000 00009ed3 2**0
CONTENTS, READONLY, DEBUGGING
- 6 .debug_line 00000878 00000000 00000000 0000b87f 2**0
+ 6 .debug_line 0000088b 00000000 00000000 0000b67a 2**0
CONTENTS, READONLY, DEBUGGING
- 7 .debug_pubtypes 00000312 00000000 00000000 0000c0f7 2**0
+ 7 .debug_pubtypes 00000324 00000000 00000000 0000bf05 2**0
CONTENTS, READONLY, DEBUGGING
- 8 .debug_str 000008fa 00000000 00000000 0000c409 2**0
+ 8 .debug_str 00000905 00000000 00000000 0000c229 2**0
CONTENTS, READONLY, DEBUGGING
- 9 .debug_loc 00000bf9 00000000 00000000 0000cd03 2**0
+ 9 .debug_loc 00000bed 00000000 00000000 0000cb2e 2**0
CONTENTS, READONLY, DEBUGGING
- 10 .debug_pubnames 000003af 00000000 00000000 0000d8fc 2**0
+ 10 .debug_pubnames 000003af 00000000 00000000 0000d71b 2**0
CONTENTS, READONLY, DEBUGGING
- 11 .debug_aranges 000001a0 00000000 00000000 0000dcab 2**0
+ 11 .debug_aranges 000001a0 00000000 00000000 0000daca 2**0
CONTENTS, READONLY, DEBUGGING
- 12 .debug_frame 0000063c 00000000 00000000 0000de4c 2**2
+ 12 .debug_frame 0000062c 00000000 00000000 0000dc6c 2**2
CONTENTS, READONLY, DEBUGGING
SYMBOL TABLE:
00000000 l d .text 00000000 .text
@@ -80,15 +80,16 @@ e01fc040 l *ABS* 00000000 MEMMAP
000000a0 l .text 00000000 Reset_Handler_SWI
00000000 l df *ABS* 00000000 hooks.c
00000000 l df *ABS* 00000000 main.c
-00001564 l O .text 00000004 C.0.2157
+000012b4 l O .text 00000004 pll_dividers.1366
+00000000 l df *ABS* 00000000 extflash.c
00000000 l df *ABS* 00000000 boot.c
00000000 l df *ABS* 00000000 com.c
40000200 l O .bss 00000001 comEntryStateConnect
40000204 l O .bss 00000040 xcpCtoReqPacket.1371
00000000 l df *ABS* 00000000 xcp.c
-00000414 l F .text 00000014 XcpProtectResources
-00000428 l F .text 00000020 XcpSetCtoError
-00001568 l O .text 00000008 xcpStationId
+0000032c l F .text 00000014 XcpProtectResources
+00000340 l F .text 00000020 XcpSetCtoError
+000012b8 l O .text 00000008 xcpStationId
40000244 l O .bss 0000004c xcpInfo
00000000 l df *ABS* 00000000 backdoor.c
40000290 l O .bss 00000001 backdoorOpen
@@ -99,8 +100,8 @@ e01fc040 l *ABS* 00000000 MEMMAP
00000000 l df *ABS* 00000000 cpu.c
00000000 l df *ABS* 00000000 can.c
00000000 l df *ABS* 00000000 uart.c
-00000b54 l F .text 00000028 UartReceiveByte
-00000b7c l F .text 00000060 UartTransmitByte
+000009a8 l F .text 00000028 UartReceiveByte
+000009d0 l F .text 00000054 UartTransmitByte
4000029c l O .bss 00000001 xcpCtoRxInProgress.1383
400002a0 l O .bss 00000041 xcpCtoReqPacket.1381
400002e1 l O .bss 00000001 xcpCtoRxLength.1382
@@ -109,68 +110,68 @@ e01fc040 l *ABS* 00000000 MEMMAP
400002e4 l O .bss 00000004 millisecond_counter
400002e8 l O .bss 00000004 free_running_counter_last
00000000 l df *ABS* 00000000 flash.c
-00000ee4 l F .text 00000078 FlashGetSector
-00000f5c l F .text 0000012c FlashWriteBlock
-00001088 l F .text 00000044 FlashInitBlock
-000010cc l F .text 00000068 FlashSwitchBlock
-00001134 l F .text 000000e8 FlashAddToBlock
-00001570 l O .text 000000c0 flashLayout
+00000cb4 l F .text 0000006c FlashGetSector
+00000d20 l F .text 00000110 FlashWriteBlock
+00000e30 l F .text 00000038 FlashInitBlock
+00000e68 l F .text 00000068 FlashSwitchBlock
+00000ed0 l F .text 000000dc FlashAddToBlock
+000012c0 l O .text 000000c0 flashLayout
400002ec l O .bss 00000204 blockInfo
400004f0 l O .bss 00000204 bootBlockInfo
00000000 l df *ABS* 00000000 vectors.c
-00000300 g F .text 00000068 ComInit
-00001234 g F .text 0000006c FlashWrite
-00000a7c g F .text 00000028 AssertFailure
-00001518 g F .text 00000028 IRQ_ISR
-00000e44 g F .text 0000002c TimerUpdate
-00000488 g F .text 00000014 XcpPacketTransmitted
-00000368 g F .text 0000003c ComTask
-000003d4 g F .text 00000014 ComSetConnectEntryState
-00000278 g F .text 0000004c BootInit
-00000a44 g F .text 00000030 BackDoorInit
-00000a78 g F .text 00000004 CopService
-00001688 g .text 00000000 _etext
-00000e24 g F .text 00000020 TimerReset
-000002c4 g F .text 0000003c BootTask
-0000141c g F .text 00000078 FlashWriteChecksum
+00000278 g F .text 00000044 ComInit
+00000fc4 g F .text 0000006c FlashWrite
+00000900 g F .text 0000001c AssertFailure
+00001280 g F .text 0000001c IRQ_ISR
+00000c14 g F .text 0000002c TimerUpdate
+000003a0 g F .text 00000014 XcpPacketTransmitted
+000002bc g F .text 00000024 ComTask
+000002f8 g F .text 00000014 ComSetConnectEntryState
+00000244 g F .text 0000001c BootInit
+000008d4 g F .text 00000024 BackDoorInit
+000008fc g F .text 00000004 CopService
+000013d8 g .text 00000000 _etext
+00000bf4 g F .text 00000020 TimerReset
+00000260 g F .text 00000018 BootTask
+00001190 g F .text 00000078 FlashWriteChecksum
40000200 g .bss 00000000 _bss_start
-000003a4 g F .text 00000030 ComTransmitPacket
+000002e0 g F .text 00000018 ComTransmitPacket
00000000 g .text 00000000 _startup
-00000470 g F .text 00000018 XcpIsConnected
-00000d80 g F .text 0000001c NvmInit
-0000121c g F .text 00000018 FlashInit
+00000388 g F .text 00000018 XcpIsConnected
+00000b98 g F .text 00000010 NvmInit
+00000fac g F .text 00000018 FlashInit
400006f4 g *ABS* 00000000 _bss_end
00000050 g .text 00000000 Reset_Handler
-00000bdc g F .text 00000040 UartInit
-00000db8 g F .text 0000001c NvmErase
-0000049c g F .text 0000052c XcpPacketReceived
-00001494 g F .text 0000005c FlashDone
+00000a24 g F .text 00000040 UartInit
+00000bb8 g F .text 00000010 NvmErase
+000003b4 g F .text 000004d4 XcpPacketReceived
+00001208 g F .text 0000005c FlashDone
00000040 g .text 00000000 EntryFromProg
-000003e8 g F .text 00000010 ComIsConnectEntryState
-00000448 g F .text 00000028 XcpInit
-000012a0 g F .text 00000134 FlashErase
-00000148 g F .text 00000130 main
-00000df0 g F .text 00000034 NvmDone
-00000c1c g F .text 000000a8 UartTransmitPacket
-00000dd4 g F .text 0000001c NvmVerifyChecksum
-00000aa4 g F .text 00000044 CpuMemCopy
+0000030c g F .text 00000010 ComIsConnectEntryState
+00000360 g F .text 00000028 XcpInit
+00001030 g F .text 00000118 FlashErase
+00000148 g F .text 000000fc main
+00000bd8 g F .text 0000001c NvmDone
+00000a64 g F .text 00000084 UartTransmitPacket
+00000bc8 g F .text 00000010 NvmVerifyChecksum
+0000091c g F .text 00000038 CpuMemCopy
40001edc g *ABS* 00000000 _stack_end
-00000e70 g F .text 00000010 TimerSet
-000014f0 g F .text 00000028 FIQ_ISR
-00000cc4 g F .text 000000bc UartReceivePacket
+00000c40 g F .text 00000010 TimerSet
+00001264 g F .text 0000001c FIQ_ISR
+00000ae8 g F .text 000000b0 UartReceivePacket
40000200 g .text 00000000 _data
-00000a74 g F .text 00000004 CopInit
-00000b38 g F .text 0000001c CpuReset
+000008f8 g F .text 00000004 CopInit
+00000998 g F .text 00000010 CpuReset
000000f4 g .text 00000000 SetupRAM
-00000d9c g F .text 0000001c NvmWrite
-00000ae8 g F .text 00000050 CpuStartUserProgram
-000013d4 g F .text 00000048 FlashVerifyChecksum
+00000ba8 g F .text 00000010 NvmWrite
+00000954 g F .text 00000044 CpuStartUserProgram
+00001148 g F .text 00000048 FlashVerifyChecksum
40000200 g .text 00000000 _edata
400006f4 g *ABS* 00000000 _end
-00001540 g F .text 00000024 UNDEF_ISR
-000003f8 g F .text 0000001c ComIsConnected
-000009c8 g F .text 0000007c BackDoorCheck
-00000ec8 g F .text 0000001c TimerGet
-00000e80 g F .text 00000048 TimerInit
+0000129c g F .text 00000018 UNDEF_ISR
+0000031c g F .text 00000010 ComIsConnected
+00000888 g F .text 0000004c BackDoorCheck
+00000c98 g F .text 0000001c TimerGet
+00000c50 g F .text 00000048 TimerInit
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.c
new file mode 100644
index 00000000..beefab0b
--- /dev/null
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.c
@@ -0,0 +1,643 @@
+/****************************************************************************************
+| Description: bootloader external flash driver source file
+| File Name: extflash.c
+|
+|----------------------------------------------------------------------------------------
+| C O P Y R I G H T
+|----------------------------------------------------------------------------------------
+| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved
+|
+|----------------------------------------------------------------------------------------
+| L I C E N S E
+|----------------------------------------------------------------------------------------
+| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
+| modify it under the terms of the GNU General Public License as published by the Free
+| Software Foundation, either version 3 of the License, or (at your option) any later
+| version.
+|
+| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+| PURPOSE. See the GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License along with OpenBLT.
+| If not, see .
+|
+| A special exception to the GPL is included to allow you to distribute a combined work
+| that includes OpenBLT without being obliged to provide the source code for any
+| proprietary components. The exception text is included at the bottom of the license
+| file .
+|
+****************************************************************************************/
+
+/****************************************************************************************
+* Include files
+****************************************************************************************/
+#include "boot.h" /* bootloader generic header */
+
+
+#if (BOOT_NVM_HOOKS_ENABLE > 0)
+/****************************************************************************************
+* Macro definitions
+****************************************************************************************/
+#define FLASH_INVALID_SECTOR (0xff)
+#define FLASH_INVALID_ADDRESS (0xffffffff)
+#define FLASH_WRITE_BLOCK_SIZE (512)
+#define FLASH_TOTAL_SECTORS (sizeof(flashLayout)/sizeof(flashLayout[0]))
+/* C3 Intel flash commands */
+#define FLASH_CMD_READ_ARRAY_MODE (0xFF)
+#define FLASH_CMD_READ_ID_MODE (0x90)
+#define FLASH_CMD_ERASE_MODE (0x20)
+#define FLASH_CMD_READ_STATUS_MODE (0x70)
+#define FLASH_CMD_CHANGE_LOCK_MODE (0x60)
+#define FLASH_CMD_UNLOCK_SECTOR (0xD0)
+#define FLASH_CMD_LOCK_SECTOR (0x01)
+#define FLASH_CMD_PROGRAM_MODE (0x40)
+#define FLASH_CMD_ERASE_CONFIRM (0xD0)
+#define FLASH_CMD_CLEAR_STATUS (0x50)
+/* C3 Intel flash info bits */
+#define FLASH_LOCK_BIT (0x01)
+#define FLASH_STATUS_READY_BIT (0x80)
+/* C3 Intel flash error codes */
+#define FLASH_ERR_LOCKED (0x02)
+#define FLASH_ERR_VPP_RANGE (0x08)
+#define FLASH_ERR_PROGRAM (0x10)
+#define FLASH_ERR_CMD_SEQ (0x10)
+#define FLASH_ERR_ERASE (0x20)
+/* flash operation timeout values */
+#define FLASH_ERASE_TIMEOUT ((blt_int32u)5000000)
+#define FLASH_PROGRAM_TIMEOUT ((blt_int32u)1000000)
+/* supported Intel C3 flash device */
+#define FLASH_DEV_MAN_ID ((blt_int16u)0x0089)
+#define FLASH_DEV_ID ((blt_int16u)0x88c3)
+/* address offsets for reading device information */
+#define FLASH_DEVINFO_MAN_ID ((blt_int16u)0x0000)
+#define FLASH_DEVINFO_DEV_ID ((blt_int16u)0x0001)
+#define FLASH_DEVINFO_LOCK_STATUS ((blt_int16u)0x0002)
+/* functions implemented in a macro for run-time and codesize optimization */
+#define ExtFlashGetManID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \
+ FLASH_DEVINFO_MAN_ID))
+#define ExtFlashGetDevID() (ExtFlashGetDeviceInfo(flashLayout[0].sector_start, \
+ FLASH_DEVINFO_DEV_ID))
+#define ExtFlashGetLockStatus(base) (ExtFlashGetDeviceInfo(base, \
+ FLASH_DEVINFO_LOCK_STATUS))
+
+
+/****************************************************************************************
+* Type definitions
+****************************************************************************************/
+/* flash sector descriptor type */
+typedef struct
+{
+ blt_addr sector_start; /* sector start address */
+ blt_int32u sector_size; /* sector size in bytes */
+ blt_int8u sector_num; /* sector number */
+} tFlashSector; /* flash sector description */
+
+/* programming is done per block of max FLASH_WRITE_BLOCK_SIZE. for this a flash block
+ * manager is implemented in this driver. this flash block manager depends on this
+ * flash block info structure. It holds the base address of the flash block and the
+ * data that should be programmed into the flash block.
+ */
+typedef struct
+{
+ blt_addr base_addr;
+ blt_int8u data[FLASH_WRITE_BLOCK_SIZE];
+} tFlashBlockInfo;
+
+
+/****************************************************************************************
+* Function prototypes
+****************************************************************************************/
+static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address);
+static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr);
+static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address,
+ blt_int8u *data, blt_int16u len);
+static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block);
+static blt_bool ExtFlashEraseSector(blt_addr sector_base);
+static blt_int16u ExtFlashGetDeviceInfo(blt_addr block_base, blt_int16u info);
+static void ExtFlashLockSector(blt_addr sector_base);
+static void ExtFlashUnlockSector(blt_addr sector_base);
+static blt_int8u ExtFlashGetSector(blt_addr address);
+
+
+/****************************************************************************************
+* Local constant declarations
+****************************************************************************************/
+/* The current layout supports the 2MB external C3 Intel flash:
+ * - manufacturer id = 0x0089
+ * - device id = 0x88c3 (16 Mbit bottom boot device)
+ * Note that what Intel calls a block in the user manual, is called a sector in this
+ * driver.
+ */
+static const tFlashSector flashLayout[] =
+{
+ { 0x80000000, 0x02000, 0}, /* flash sector 0 - 8 kbyte */
+ { 0x80002000, 0x02000, 1}, /* flash sector 1 - 8 kbyte */
+ { 0x80004000, 0x02000, 2}, /* flash sector 2 - 8 kbyte */
+ { 0x80006000, 0x02000, 3}, /* flash sector 3 - 8 kbyte */
+ { 0x80008000, 0x02000, 4}, /* flash sector 4 - 8 kbyte */
+ { 0x8000A000, 0x02000, 5}, /* flash sector 5 - 8 kbyte */
+ { 0x8000C000, 0x02000, 6}, /* flash sector 6 - 8 kbyte */
+ { 0x8000E000, 0x02000, 7}, /* flash sector 7 - 8 kbyte */
+ { 0x80010000, 0x10000, 8}, /* flash sector 8 - 64 kbyte */
+ { 0x80020000, 0x10000, 9}, /* flash sector 9 - 64 kbyte */
+ { 0x80030000, 0x10000, 10}, /* flash sector 10 - 64 kbyte */
+ { 0x80040000, 0x10000, 11}, /* flash sector 11 - 64 kbyte */
+ { 0x80050000, 0x10000, 12}, /* flash sector 12 - 64 kbyte */
+ { 0x80060000, 0x10000, 13}, /* flash sector 13 - 64 kbyte */
+ { 0x80070000, 0x10000, 14}, /* flash sector 14 - 64 kbyte */
+ { 0x80080000, 0x10000, 15}, /* flash sector 15 - 64 kbyte */
+ { 0x80090000, 0x10000, 16}, /* flash sector 16 - 64 kbyte */
+ { 0x800A0000, 0x10000, 17}, /* flash sector 17 - 64 kbyte */
+ { 0x800B0000, 0x10000, 18}, /* flash sector 18 - 64 kbyte */
+ { 0x800C0000, 0x10000, 19}, /* flash sector 19 - 64 kbyte */
+ { 0x800D0000, 0x10000, 20}, /* flash sector 20 - 64 kbyte */
+ { 0x800E0000, 0x10000, 21}, /* flash sector 21 - 64 kbyte */
+ { 0x800F0000, 0x10000, 22}, /* flash sector 22 - 64 kbyte */
+ { 0x80100000, 0x10000, 23}, /* flash sector 23 - 64 kbyte */
+ { 0x80110000, 0x10000, 24}, /* flash sector 24 - 64 kbyte */
+ { 0x80120000, 0x10000, 25}, /* flash sector 25 - 64 kbyte */
+ { 0x80130000, 0x10000, 26}, /* flash sector 26 - 64 kbyte */
+ { 0x80140000, 0x10000, 27}, /* flash sector 27 - 64 kbyte */
+ { 0x80150000, 0x10000, 28}, /* flash sector 28 - 64 kbyte */
+ { 0x80160000, 0x10000, 29}, /* flash sector 29 - 64 kbyte */
+ { 0x80170000, 0x10000, 30}, /* flash sector 30 - 64 kbyte */
+ { 0x80180000, 0x10000, 31}, /* flash sector 31 - 64 kbyte */
+ { 0x80190000, 0x10000, 32}, /* flash sector 32 - 64 kbyte */
+ { 0x801A0000, 0x10000, 33}, /* flash sector 33 - 64 kbyte */
+ { 0x801B0000, 0x10000, 34}, /* flash sector 34 - 64 kbyte */
+ { 0x801C0000, 0x10000, 35}, /* flash sector 35 - 64 kbyte */
+ { 0x801D0000, 0x10000, 36}, /* flash sector 36 - 64 kbyte */
+ { 0x801E0000, 0x10000, 37}, /* flash sector 37 - 64 kbyte */
+ { 0x801F0000, 0x10000, 38} /* flash sector 38 - 64 kbyte */
+};
+
+
+/****************************************************************************************
+* Local data declarations
+****************************************************************************************/
+/* The smallest amount of flash that can be programmed is FLASH_WRITE_BLOCK_SIZE. A flash
+ * block manager is implemented in this driver and stores info in this variable. Whenever
+ * new data should be flashed, it is first added to a RAM buffer, which is part of this
+ * variable. Whenever the RAM buffer, which has the size of a flash block, is full or
+ * data needs to be written to a different block, the contents of the RAM buffer are
+ * programmed to flash. The flash block manager requires some software overhead, yet
+ * results is faster flash programming because data is first harvested, ideally until
+ * there is enough to program an entire flash block, before the flash device is actually
+ * operated on.
+ */
+static tFlashBlockInfo blockInfo;
+
+
+/****************************************************************************************
+** NAME: ExtFlashInit
+** PARAMETER: none
+** RETURN VALUE: none
+** DESCRIPTION: Initializes the flash driver.
+**
+****************************************************************************************/
+void ExtFlashInit(void)
+{
+ /* init the flash block info struct by setting the address to an invalid address */
+ blockInfo.base_addr = FLASH_INVALID_ADDRESS;
+ /* check the flash device identification */
+ if ((ExtFlashGetManID() != FLASH_DEV_MAN_ID) || (ExtFlashGetDevID() != FLASH_DEV_ID))
+ {
+ ASSERT_RT(BLT_FALSE);
+ }
+} /*** end of ExtFlashInit ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashWrite
+** PARAMETER: addr start address
+** len length in bytes
+** data pointer to the data buffer.
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the write
+** operation failed.
+** DESCRIPTION: Writes the data to flash.
+**
+****************************************************************************************/
+blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
+{
+ /* make sure the addresses are within the flash device */
+ if ( (ExtFlashGetSector(addr) == FLASH_INVALID_SECTOR) || \
+ (ExtFlashGetSector(addr+len-1) == FLASH_INVALID_SECTOR) )
+ {
+ return BLT_NVM_NOT_IN_RANGE;
+ }
+
+ /* let the block manager handle it */
+ if (ExtFlashAddToBlock(&blockInfo, addr, data, len) == BLT_FALSE)
+ {
+ return BLT_NVM_ERROR;
+ }
+ return BLT_NVM_OKAY;
+} /*** end of FlashWrite ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashErase
+** PARAMETER: addr start address
+** len length in bytes
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the erase
+** operation failed.
+** DESCRIPTION: Erases the flash memory. Note that this function also checks that no
+** data is erased outside the flash memory region.
+**
+****************************************************************************************/
+blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len)
+{
+ blt_int8u first_sector;
+ blt_int8u last_sector;
+ blt_int8u sectorIdx;
+
+ /* obtain the first and last sector number */
+ first_sector = ExtFlashGetSector(addr);
+ last_sector = ExtFlashGetSector(addr+len-1);
+ /* check them */
+ if ( (first_sector == FLASH_INVALID_SECTOR) || (last_sector == FLASH_INVALID_SECTOR) )
+ {
+ return BLT_NVM_NOT_IN_RANGE;
+ }
+ /* erase the sectors one-by-one */
+ for (sectorIdx = first_sector; sectorIdx <= last_sector; sectorIdx++)
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* erase the sector */
+ if (ExtFlashEraseSector(flashLayout[sectorIdx].sector_start) == BLT_FALSE)
+ {
+ return BLT_NVM_ERROR;
+ }
+ }
+ /* done so return the result of the operation */
+ return BLT_NVM_OKAY;
+} /*** end of ExtFlashErase ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashDone
+** PARAMETER: none
+** RETURN VALUE: BLT_TRUE is succesful, BLT_FALSE otherwise.
+** DESCRIPTION: Finilizes the flash driver operations.
+**
+****************************************************************************************/
+blt_bool ExtFlashDone(void)
+{
+ /* check if there is still data waiting to be programmed */
+ if (blockInfo.base_addr != FLASH_INVALID_ADDRESS)
+ {
+ if (ExtFlashWriteBlock(&blockInfo) == BLT_FALSE)
+ {
+ return BLT_FALSE;
+ }
+ }
+ /* still here so all is okay */
+ return BLT_TRUE;
+} /*** end of ExtFlashDone ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashInitBlock
+** PARAMETER: block pointer to flash block info structure to operate on.
+** address base address of the block data.
+** RETURN VALUE: BLT_TRUE is succesful, BLT_FALSE otherwise.
+** DESCRIPTION: Copies data currently in flash to the block->data and sets the
+** base address.
+**
+****************************************************************************************/
+static blt_bool ExtFlashInitBlock(tFlashBlockInfo *block, blt_addr address)
+{
+ /* check address alignment */
+ if ((address % FLASH_WRITE_BLOCK_SIZE) != 0)
+ {
+ return BLT_FALSE;
+ }
+ /* make sure that we are initializing a new block and not the same one */
+ if (block->base_addr == address)
+ {
+ /* block already initialized, so nothing to do */
+ return BLT_TRUE;
+ }
+ /* set the base address and copies the current data from flash */
+ block->base_addr = address;
+ CpuMemCopy((blt_addr)block->data, address, FLASH_WRITE_BLOCK_SIZE);
+ return BLT_TRUE;
+} /*** end of ExtFlashInitBlock ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashSwitchBlock
+** PARAMETER: block pointer to flash block info structure to operate on.
+** base_addr base address for the next block
+** RETURN VALUE: the pointer of the block info struct that is no being used, or a NULL
+** pointer in case of error.
+** DESCRIPTION: Switches blocks by programming the current one and initializing the
+** next.
+**
+****************************************************************************************/
+static tFlashBlockInfo *ExtFlashSwitchBlock(tFlashBlockInfo *block, blt_addr base_addr)
+{
+ /* need to switch to a new block, so program the current one and init the next */
+ if (ExtFlashWriteBlock(block) == BLT_FALSE)
+ {
+ return BLT_NULL;
+ }
+ /* initialize the new block when necessary */
+ if (ExtFlashInitBlock(block, base_addr) == BLT_FALSE)
+ {
+ return BLT_NULL;
+ }
+ /* still here to all is okay */
+ return block;
+} /*** end of ExtFlashSwitchBlock ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashAddToBlock
+** PARAMETER: block pointer to flash block info structure to operate on.
+** address flash destination address
+** data pointer to the byte array with data
+** len number of bytes to add to the block
+** RETURN VALUE: BLT_TRUE if successful, BLT_FALSE otherwise.
+** DESCRIPTION: Programming is done per block. This function adds data to the block
+** that is currently collecting data to be written to flash. If the
+** address is outside of the current block, the current block is written
+** to flash an a new block is initialized.
+**
+****************************************************************************************/
+static blt_bool ExtFlashAddToBlock(tFlashBlockInfo *block, blt_addr address,
+ blt_int8u *data, blt_int16u len)
+{
+ blt_addr current_base_addr;
+ blt_int8u *dst;
+ blt_int8u *src;
+
+ /* determine the current base address */
+ current_base_addr = (address/FLASH_WRITE_BLOCK_SIZE)*FLASH_WRITE_BLOCK_SIZE;
+
+ /* make sure the blockInfo is not uninitialized */
+ if (block->base_addr == FLASH_INVALID_ADDRESS)
+ {
+ /* initialize the blockInfo struct for the current block */
+ if (ExtFlashInitBlock(block, current_base_addr) == BLT_FALSE)
+ {
+ return BLT_FALSE;
+ }
+ }
+ /* check if the new data fits in the current block */
+ if (block->base_addr != current_base_addr)
+ {
+ /* need to switch to a new block, so program the current one and init the next */
+ block = ExtFlashSwitchBlock(block, current_base_addr);
+ if (block == BLT_NULL)
+ {
+ return BLT_FALSE;
+ }
+ }
+ /* add the data to the current block, but check for block overflow */
+ dst = &(block->data[address - block->base_addr]);
+ src = data;
+ do
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* buffer overflow? */
+ if ((blt_addr)(dst-&(block->data[0])) >= FLASH_WRITE_BLOCK_SIZE)
+ {
+ /* need to switch to a new block, so program the current one and init the next */
+ block = ExtFlashSwitchBlock(block, current_base_addr+FLASH_WRITE_BLOCK_SIZE);
+ if (block == BLT_NULL)
+ {
+ return BLT_FALSE;
+ }
+ /* reset destination pointer */
+ dst = &(block->data[0]);
+ }
+ /* write the data to the buffer */
+ *dst = *src;
+ /* update pointers */
+ dst++;
+ src++;
+ /* decrement byte counter */
+ len--;
+ }
+ while (len > 0);
+ /* still here so all is good */
+ return BLT_TRUE;
+} /*** end of ExtFlashAddToBlock ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashWriteBlock
+** PARAMETER: block pointer to flash block info structure to operate on.
+** RETURN VALUE: BLT_TRUE if successful, BLT_FALSE otherwise.
+** DESCRIPTION: Programs FLASH_WRITE_BLOCK_SIZE bytes to flash from the block->data
+** array.
+**
+****************************************************************************************/
+static blt_bool ExtFlashWriteBlock(tFlashBlockInfo *block)
+{
+ volatile blt_int16u *pAddr;
+ volatile blt_int16u *pData;
+ blt_bool result = BLT_TRUE;
+ volatile blt_int32u timeout = 0;
+
+ /* unlock the sector */
+ ExtFlashUnlockSector(block->base_addr);
+ /* init pointer to valid address in the flash block */
+ pAddr = (blt_int16u *)block->base_addr;
+ /* init pointer to start of block data */
+ pData = (blt_int16u *)block->data;
+ /* program all block data 16-bits at a time */
+ while ((blt_addr)pAddr < (block->base_addr+FLASH_WRITE_BLOCK_SIZE))
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* issue program setup command */
+ *pAddr = FLASH_CMD_PROGRAM_MODE;
+ /* write 16-bit data that is to be programmed to start programming operation */
+ *pAddr = *pData;
+ /* check status register for completion */
+ *pAddr = FLASH_CMD_READ_STATUS_MODE;
+ /* wait for completion or timeout */
+ while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_PROGRAM_TIMEOUT) )
+ {
+ timeout++;
+ }
+ /* check for possible errors */
+ if ( (timeout >= FLASH_ERASE_TIMEOUT) || \
+ ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_PROGRAM))!= 0) )
+ {
+ result = BLT_FALSE;
+ }
+ /* clear the status register */
+ *pAddr = FLASH_CMD_CLEAR_STATUS;
+ /* increment address and data pointers */
+ pAddr++;
+ pData++;
+ }
+ /* lock the sector. this also switches back to read array mode */
+ ExtFlashLockSector(block->base_addr);
+ /* inform the caller about the result */
+ return result;
+} /*** end of ExtFlashWriteBlock ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashEraseSector
+** PARAMETER: sector_base base address of the sector to erase.
+** RETURN VALUE: BLT_TRUE is erasure was successful, BLT_FALSE otherwise.
+** DESCRIPTION: Erases the flash sector.
+**
+****************************************************************************************/
+static blt_bool ExtFlashEraseSector(blt_addr sector_base)
+{
+ volatile blt_int16u *pAddr;
+ blt_bool result = BLT_TRUE;
+ volatile blt_int32u timeout = 0;
+
+ /* unlock the sector */
+ ExtFlashUnlockSector(sector_base);
+ /* init pointer to valid address in the flash sector */
+ pAddr = (blt_int16u *)sector_base;
+ /* issue erase setup command */
+ *pAddr = FLASH_CMD_ERASE_MODE;
+ /* issue erase confirm command */
+ *pAddr = FLASH_CMD_ERASE_CONFIRM;
+ /* check status register for completion */
+ *pAddr = FLASH_CMD_READ_STATUS_MODE;
+ /* wait for completion or timeout */
+ while( ((*pAddr & FLASH_STATUS_READY_BIT) == 0) && (timeout < FLASH_ERASE_TIMEOUT) )
+ {
+ timeout++;
+ }
+ /* check for possible errors */
+ if ( (timeout >= FLASH_ERASE_TIMEOUT) || \
+ ((*pAddr & (FLASH_ERR_LOCKED | FLASH_ERR_VPP_RANGE | FLASH_ERR_ERASE))!= 0) )
+ {
+ result = BLT_FALSE;
+ }
+ /* clear the status register */
+ *pAddr = FLASH_CMD_CLEAR_STATUS;
+ /* lock the sector. this also switches back to read array mode */
+ ExtFlashLockSector(sector_base);
+ /* inform the caller about the result */
+ return result;
+} /*** end of ExtFlashEraseSector ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashLockSector
+** PARAMETER: sector_base base address of the sector to lock.
+** RETURN VALUE: none
+** DESCRIPTION: Locks the flash sector.
+**
+****************************************************************************************/
+static void ExtFlashLockSector(blt_addr sector_base)
+{
+ volatile blt_int16u *pAddr;
+
+ /* no need to lock a sector that is already locked */
+ if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0)
+ {
+ return;
+ }
+ /* init pointer to valid address in the flash sector */
+ pAddr = (blt_int16u *)sector_base;
+ /* switch to change lock mode */
+ *pAddr = FLASH_CMD_CHANGE_LOCK_MODE;
+ /* unlock the sector */
+ *pAddr = FLASH_CMD_LOCK_SECTOR;
+ /* check that the sector is now actually locked */
+ ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) != 0);
+} /*** end of ExtFlashLockSector ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashUnlockSector
+** PARAMETER: sector_base base address of the sector to unlock.
+** RETURN VALUE: none
+** DESCRIPTION: Unlocks the flash sector.
+**
+****************************************************************************************/
+static void ExtFlashUnlockSector(blt_addr sector_base)
+{
+ volatile blt_int16u *pAddr;
+
+ /* no need to unlock a sector that is already unlocked */
+ if ((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0)
+ {
+ return;
+ }
+ /* init pointer to valid address in the flash sector */
+ pAddr = (blt_int16u *)sector_base;
+ /* switch to change lock mode */
+ *pAddr = FLASH_CMD_CHANGE_LOCK_MODE;
+ /* unlock the sector */
+ *pAddr = FLASH_CMD_UNLOCK_SECTOR;
+ /* check that the sector is now actually unlocked */
+ ASSERT_RT((ExtFlashGetLockStatus(sector_base) & FLASH_LOCK_BIT) == 0);
+} /*** end of ExtFlashUnlockSector ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashGetDeviceInfo
+** PARAMETER: sector_base base address of the sector to get the info from.
+** info identifier to the type of info to obtain.
+** RETURN VALUE: device info.
+** DESCRIPTION: Obtains device information from the flash device.
+**
+****************************************************************************************/
+static blt_int16u ExtFlashGetDeviceInfo(blt_addr sector_base, blt_int16u info)
+{
+ volatile blt_int16u *pAddr;
+ blt_int16u readData;
+
+ /* init pointer to any valid address in the flash device */
+ pAddr = (blt_int16u *)sector_base + info;
+ /* switch to read identifier mode */
+ *pAddr = FLASH_CMD_READ_ID_MODE;
+ /* read the info */
+ readData = *pAddr;
+ /* switch back to reading mode */
+ *pAddr = FLASH_CMD_READ_ARRAY_MODE;
+ /* return the result */
+ return readData;
+} /*** end of ExtFlashGetDeviceInfo ***/
+
+
+/****************************************************************************************
+** NAME: ExtFlashGetSector
+** PARAMETER: address address in the flash sector
+** RETURN VALUE: flash sector number or FLASH_INVALID_SECTOR
+** DESCRIPTION: Determines the flash sector the address is in.
+**
+****************************************************************************************/
+static blt_int8u ExtFlashGetSector(blt_addr address)
+{
+ blt_int8u sectorIdx;
+
+ /* search through the sectors to find the right one */
+ for (sectorIdx = 0; sectorIdx < FLASH_TOTAL_SECTORS; sectorIdx++)
+ {
+ /* keep the watchdog happy */
+ CopService();
+ /* is the address in this sector? */
+ if ( (address >= flashLayout[sectorIdx].sector_start) && \
+ (address < (flashLayout[sectorIdx].sector_start + \
+ flashLayout[sectorIdx].sector_size)) )
+ {
+ /* return the sector number */
+ return flashLayout[sectorIdx].sector_num;
+ }
+ }
+ /* still here so no valid sector found */
+ return FLASH_INVALID_SECTOR;
+} /*** end of ExtFlashGetSector ***/
+#endif
+
+/*********************************** end of extflash.c *********************************/
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.h b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.h
new file mode 100644
index 00000000..bc8c4b15
--- /dev/null
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/extflash.h
@@ -0,0 +1,45 @@
+/****************************************************************************************
+| Description: bootloader external flash driver header file
+| File Name: extflash.h
+|
+|----------------------------------------------------------------------------------------
+| C O P Y R I G H T
+|----------------------------------------------------------------------------------------
+| Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved
+|
+|----------------------------------------------------------------------------------------
+| L I C E N S E
+|----------------------------------------------------------------------------------------
+| This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
+| modify it under the terms of the GNU General Public License as published by the Free
+| Software Foundation, either version 3 of the License, or (at your option) any later
+| version.
+|
+| OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+| without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+| PURPOSE. See the GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License along with OpenBLT.
+| If not, see .
+|
+| A special exception to the GPL is included to allow you to distribute a combined work
+| that includes OpenBLT without being obliged to provide the source code for any
+| proprietary components. The exception text is included at the bottom of the license
+| file .
+|
+****************************************************************************************/
+#ifndef EXTFLASH_H
+#define EXTFLASH_H
+
+#if (BOOT_NVM_HOOKS_ENABLE > 0)
+/****************************************************************************************
+* Function prototypes
+****************************************************************************************/
+void ExtFlashInit(void);
+blt_int8u ExtFlashWrite(blt_addr addr, blt_int32u len, blt_int8u *data);
+blt_int8u ExtFlashErase(blt_addr addr, blt_int32u len);
+blt_bool ExtFlashDone(void);
+#endif
+
+#endif /* EXTFLASH_H */
+/*********************************** end of extflash.h *********************************/
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/hooks.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/hooks.c
index e46906ec..8bbaedb6 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/hooks.c
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/hooks.c
@@ -80,6 +80,7 @@ blt_bool BackDoorEntryHook(void)
****************************************************************************************/
#if (BOOT_NVM_HOOKS_ENABLE > 0)
+#include "extflash.h"
/****************************************************************************************
** NAME: NvmInitHook
** PARAMETER: none
@@ -90,6 +91,8 @@ blt_bool BackDoorEntryHook(void)
****************************************************************************************/
void NvmInitHook(void)
{
+ /* init the external flash driver */
+ ExtFlashInit();
} /*** end of NvmInitHook ***/
@@ -98,20 +101,21 @@ void NvmInitHook(void)
** PARAMETER: addr start address
** len length in bytes
** data pointer to the data buffer.
-** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is
-** not within the supported memory range, or BTL_NVM_ERROR is the write
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the write
** operation failed.
** DESCRIPTION: Callback that gets called at the start of the NVM driver write
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
-** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
+** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
** been written yet.
**
**
****************************************************************************************/
blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
{
- return BTL_NVM_NOT_IN_RANGE;
+ /* attempt to write with the external flash driver */
+ return ExtFlashWrite(addr, len, data);
} /*** end of NvmWriteHook ***/
@@ -119,19 +123,20 @@ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
** NAME: NvmEraseHook
** PARAMETER: addr start address
** len length in bytes
-** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is
-** not within the supported memory range, or BTL_NVM_ERROR is the erase
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the erase
** operation failed.
** DESCRIPTION: Callback that gets called at the start of the NVM driver erase
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
-** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the memory
+** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory
** hasn't been erased yet.
**
****************************************************************************************/
-blt_bool NvmEraseHook(blt_addr addr, blt_int32u len)
+blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len)
{
- return BTL_NVM_NOT_IN_RANGE;
+ /* attempt to erase with the external flash driver */
+ return ExtFlashErase(addr, len);
} /*** end of NvmEraseHook ***/
@@ -144,7 +149,8 @@ blt_bool NvmEraseHook(blt_addr addr, blt_int32u len)
****************************************************************************************/
blt_bool NvmDoneHook(void)
{
- return BLT_TRUE;
+ /* finish up the operations of the external flash driver */
+ return ExtFlashDone();
} /*** end of NvmDoneHook ***/
#endif /* BOOT_NVM_HOOKS_ENABLE > 0 */
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/ide/DemoBoot.project b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/ide/DemoBoot.project
index d496df15..23ad2541 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/ide/DemoBoot.project
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/ide/DemoBoot.project
@@ -47,6 +47,8 @@
+
+
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/main.c b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/main.c
index 60596f77..ad2b0cb7 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/main.c
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/main.c
@@ -80,7 +80,7 @@ int main(void)
static void Init(void)
{
blt_int8u m_sel; /* pll multiplier register value */
- blt_int8u pll_dividers[] = { 1, 2, 4, 8 }; /* possible pll dividers */
+ static blt_int8u pll_dividers[] = { 1, 2, 4, 8 }; /* possible pll dividers */
blt_int8u p_sel_cnt; /* loop counter to find p_sel */
blt_int32u f_cco; /* current controller oscillator */
@@ -144,6 +144,29 @@ static void Init(void)
MAMCR = 0x2;
/* setting peripheral Clock (pclk) to System Clock (cclk) */
VPBDIV = 0x1;
+#if (BOOT_NVM_HOOKS_ENABLE > 0)
+ /* in this the external memory on the Olimex LPC-L2294 board is used so configure
+ * the memory banks for the external flash EEPROM and RAM
+ */
+ /* external flash EEPROM:
+ * IDCY=3 (idle timing)
+ * WST1=4 (read timing)
+ * RBLE=1
+ * WST2=6 (write timing)
+ * MW=1 (16-bit data bus)
+ */
+ BCFG0 = (0x3 << 0) | (0x4 << 5) | (0x1 << 10) | (0x6 << 11) | (0x1 << 28);
+ /* external RAM:
+ * IDCY=0 (idle timing)
+ * WST1=0 (read timing)
+ * RBLE=1
+ * WST2=0 (write timing)
+ * MW=2 (32-bit data bus)
+ */
+ BCFG1 = (0x0 << 0) | (0x0 << 5) | (0x1 << 10) | (0x0 << 11) | (0x2 << 28);
+ /* configure use of data bus and strobe pins for the external memory */
+ PINSEL2 = 0x0F000924;
+#endif
#if (BOOT_COM_UART_ENABLE > 0)
/* configure P0.0 for UART0 Tx and P0.1 for UART0 Rx functionality */
PINSEL0 |= 0x05;
diff --git a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile
index 40744340..b510d89a 100644
--- a/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile
+++ b/Target/Demo/ARM7_LPC2000_Olimex_LPC_L2294_GCC/Boot/makefile
@@ -38,6 +38,8 @@ PROJ_FILES= \
config.h \
hooks.c \
main.c \
+extflash.c \
+extflash.h \
lpc2294.h \
../../../Source/boot.c \
../../../Source/boot.h \
@@ -105,7 +107,7 @@ LIB_PATH = -L../../../Source/ARM7_LPC2000/GCC/
#| Options for compiler binaries |
#|---------------------------------------------------------------------------------------|
AFLAGS = -ahls -mapcs-32 -mcpu=arm7tdmi-s -mfpu=softfpa
-CFLAGS = $(INC_PATH) -O1 -Wall -fmessage-length=0 -mcpu=arm7tdmi-s -g -mlong-calls
+CFLAGS = $(INC_PATH) -O1 -Wall -fmessage-length=0 -mcpu=arm7tdmi-s -g
CFLAGS += -Wa,-adhlns="$(OBJ_PATH)/$(subst .o,.lst,$@)"
LFLAGS = $(LIB_PATH) -T"memory.x" -g -mcpu=arm7tdmi-s -nostartfiles
OCFLAGS = -O ihex
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.elf b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.elf
index 048c3843..ccec1ad2 100644
Binary files a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.elf and b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.elf differ
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.map b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.map
index 8a34685c..a981dabf 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.map
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.map
@@ -19,50 +19,50 @@ Discarded input sections
.text.__get_PSP
0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__set_PSP
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__get_MSP
0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__set_MSP
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__get_BASEPRI
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__set_BASEPRI
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__get_PRIMASK
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__set_PRIMASK
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__get_FAULTMASK
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__set_FAULTMASK
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__get_CONTROL
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__set_CONTROL
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__REV 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o
.text.__REV16 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o
.text.__REVSH 0x00000000 0x4 THUMB Debug/../../obj/core_cm3.o
- .text.__RBIT 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ .text.__RBIT 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__LDREXB
0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__LDREXH
0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__LDREXW
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__STREXB
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__STREXH
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text.__STREXW
- 0x00000000 0x6 THUMB Debug/../../obj/core_cm3.o
+ 0x00000000 0x8 THUMB Debug/../../obj/core_cm3.o
.text 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o
.data 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/system_stm32f10x.o
.text.SystemInit
- 0x00000000 0xf8 THUMB Debug/../../obj/system_stm32f10x.o
+ 0x00000000 0x130 THUMB Debug/../../obj/system_stm32f10x.o
.text.SystemCoreClockUpdate
- 0x00000000 0x64 THUMB Debug/../../obj/system_stm32f10x.o
+ 0x00000000 0xe0 THUMB Debug/../../obj/system_stm32f10x.o
.data.AHBPrescTable
0x00000000 0x10 THUMB Debug/../../obj/system_stm32f10x.o
.data.SystemCoreClock
@@ -89,8 +89,6 @@ Discarded input sections
.text 0x00000000 0x0 THUMB Debug/../../obj/timer.o
.data 0x00000000 0x0 THUMB Debug/../../obj/timer.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/timer.o
- .text.TimerSet
- 0x00000000 0xc THUMB Debug/../../obj/timer.o
.text 0x00000000 0x0 THUMB Debug/../../obj/uart.o
.data 0x00000000 0x0 THUMB Debug/../../obj/uart.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/uart.o
@@ -164,7 +162,7 @@ CM3_System_Control_Space 0xe000e000 0x00001000 xw
Linker script and memory map
- 0x08000d70 __do_debug_operation = __do_debug_operation_bkpt
+ 0x0800122c __do_debug_operation = __do_debug_operation_bkpt
0x08000000 __FLASH_segment_start__ = 0x8000000
0x08004000 __FLASH_segment_end__ = 0x8004000
0x20000000 __RAM_segment_start__ = 0x20000000
@@ -213,146 +211,159 @@ Linker script and memory map
0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .init is too large to fit in FLASH memory segment)
0x080002e8 __text_load_start__ = ALIGN (__init_end__, 0x4)
-.text 0x080002e8 0xaa8
+.text 0x080002e8 0xf64
0x080002e8 __text_start__ = .
*(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*)
.glue_7 0x00000000 0x0 linker stubs
.glue_7t 0x00000000 0x0 linker stubs
- .text.startup.main
- 0x080002e8 0x12c THUMB Debug/../../obj/main.o
+ .text.main 0x080002e8 0x170 THUMB Debug/../../obj/main.o
0x080002e8 main
.text.UnusedISR
- 0x08000414 0xc THUMB Debug/../../obj/vectors.o
- 0x08000414 UnusedISR
+ 0x08000458 0x18 THUMB Debug/../../obj/vectors.o
+ 0x08000458 UnusedISR
.text.CpuStartUserProgram
- 0x08000420 0x24 THUMB Debug/../../obj/cpu.o
- 0x08000420 CpuStartUserProgram
+ 0x08000470 0x28 THUMB Debug/../../obj/cpu.o
+ 0x08000470 CpuStartUserProgram
.text.CpuMemCopy
- 0x08000444 0x20 THUMB Debug/../../obj/cpu.o
- 0x08000444 CpuMemCopy
+ 0x08000498 0x28 THUMB Debug/../../obj/cpu.o
+ 0x08000498 CpuMemCopy
.text.CpuReset
- 0x08000464 0x4 THUMB Debug/../../obj/cpu.o
- 0x08000464 CpuReset
- .text.NvmInit 0x08000468 0x4 THUMB Debug/../../obj/nvm.o
- 0x08000468 NvmInit
+ 0x080004c0 0xc THUMB Debug/../../obj/cpu.o
+ 0x080004c0 CpuReset
+ .text.NvmInit 0x080004cc 0xc THUMB Debug/../../obj/nvm.o
+ 0x080004cc NvmInit
.text.NvmWrite
- 0x0800046c 0x4 THUMB Debug/../../obj/nvm.o
- 0x0800046c NvmWrite
+ 0x080004d8 0xc THUMB Debug/../../obj/nvm.o
+ 0x080004d8 NvmWrite
.text.NvmErase
- 0x08000470 0x4 THUMB Debug/../../obj/nvm.o
- 0x08000470 NvmErase
+ 0x080004e4 0xc THUMB Debug/../../obj/nvm.o
+ 0x080004e4 NvmErase
.text.NvmVerifyChecksum
- 0x08000474 0x4 THUMB Debug/../../obj/nvm.o
- 0x08000474 NvmVerifyChecksum
- .text.NvmDone 0x08000478 0x14 THUMB Debug/../../obj/nvm.o
- 0x08000478 NvmDone
- .text.TimerInit
- 0x0800048c 0x24 THUMB Debug/../../obj/timer.o
- 0x0800048c TimerInit
+ 0x080004f0 0xc THUMB Debug/../../obj/nvm.o
+ 0x080004f0 NvmVerifyChecksum
+ .text.NvmDone 0x080004fc 0x18 THUMB Debug/../../obj/nvm.o
+ 0x080004fc NvmDone
.text.TimerReset
- 0x080004b0 0xc THUMB Debug/../../obj/timer.o
- 0x080004b0 TimerReset
+ 0x08000514 0x10 THUMB Debug/../../obj/timer.o
+ 0x08000514 TimerReset
.text.TimerUpdate
- 0x080004bc 0x1c THUMB Debug/../../obj/timer.o
- 0x080004bc TimerUpdate
+ 0x08000524 0x24 THUMB Debug/../../obj/timer.o
+ 0x08000524 TimerUpdate
+ .text.TimerSet
+ 0x08000548 0xc THUMB Debug/../../obj/timer.o
+ 0x08000548 TimerSet
+ .text.TimerInit
+ 0x08000554 0x2c THUMB Debug/../../obj/timer.o
+ 0x08000554 TimerInit
.text.TimerGet
- 0x080004d8 0x14 THUMB Debug/../../obj/timer.o
- 0x080004d8 TimerGet
+ 0x08000580 0x14 THUMB Debug/../../obj/timer.o
+ 0x08000580 TimerGet
+ .text.UartReceiveByte
+ 0x08000594 0x24 THUMB Debug/../../obj/uart.o
+ .text.UartTransmitByte
+ 0x080005b8 0x4c THUMB Debug/../../obj/uart.o
.text.UartInit
- 0x080004ec 0x28 THUMB Debug/../../obj/uart.o
- 0x080004ec UartInit
+ 0x08000604 0x2c THUMB Debug/../../obj/uart.o
+ 0x08000604 UartInit
.text.UartTransmitPacket
- 0x08000514 0x7c THUMB Debug/../../obj/uart.o
- 0x08000514 UartTransmitPacket
+ 0x08000630 0x70 THUMB Debug/../../obj/uart.o
+ 0x08000630 UartTransmitPacket
.text.UartReceivePacket
- 0x08000590 0x6c THUMB Debug/../../obj/uart.o
- 0x08000590 UartReceivePacket
+ 0x080006a0 0xb0 THUMB Debug/../../obj/uart.o
+ 0x080006a0 UartReceivePacket
+ .text.FlashUnlock
+ 0x08000750 0x24 THUMB Debug/../../obj/flash.o
.text.FlashLock
- 0x080005fc 0x10 THUMB Debug/../../obj/flash.o
+ 0x08000774 0x14 THUMB Debug/../../obj/flash.o
.text.FlashGetSector
- 0x0800060c 0x38 THUMB Debug/../../obj/flash.o
+ 0x08000788 0x48 THUMB Debug/../../obj/flash.o
.text.FlashWriteBlock
- 0x08000644 0xa0 THUMB Debug/../../obj/flash.o
+ 0x080007d0 0xc4 THUMB Debug/../../obj/flash.o
+ .text.FlashGetSectorBaseAddr
+ 0x08000894 0x40 THUMB Debug/../../obj/flash.o
+ .text.FlashInitBlock
+ 0x080008d4 0x38 THUMB Debug/../../obj/flash.o
.text.FlashSwitchBlock
- 0x080006e4 0x54 THUMB Debug/../../obj/flash.o
+ 0x0800090c 0x50 THUMB Debug/../../obj/flash.o
.text.FlashAddToBlock
- 0x08000738 0x8a THUMB Debug/../../obj/flash.o
- *fill* 0x080007c2 0x2 00
+ 0x0800095c 0xa0 THUMB Debug/../../obj/flash.o
.text.FlashInit
- 0x080007c4 0x18 THUMB Debug/../../obj/flash.o
- 0x080007c4 FlashInit
+ 0x080009fc 0x1c THUMB Debug/../../obj/flash.o
+ 0x080009fc FlashInit
.text.FlashWrite
- 0x080007dc 0x4c THUMB Debug/../../obj/flash.o
- 0x080007dc FlashWrite
+ 0x08000a18 0x58 THUMB Debug/../../obj/flash.o
+ 0x08000a18 FlashWrite
.text.FlashErase
- 0x08000828 0x13c THUMB Debug/../../obj/flash.o
- 0x08000828 FlashErase
+ 0x08000a70 0x144 THUMB Debug/../../obj/flash.o
+ 0x08000a70 FlashErase
.text.FlashVerifyChecksum
- 0x08000964 0x54 THUMB Debug/../../obj/flash.o
- 0x08000964 FlashVerifyChecksum
+ 0x08000bb4 0x68 THUMB Debug/../../obj/flash.o
+ 0x08000bb4 FlashVerifyChecksum
.text.FlashWriteChecksum
- 0x080009b8 0x44 THUMB Debug/../../obj/flash.o
- 0x080009b8 FlashWriteChecksum
+ 0x08000c1c 0x50 THUMB Debug/../../obj/flash.o
+ 0x08000c1c FlashWriteChecksum
.text.FlashDone
- 0x080009fc 0x34 THUMB Debug/../../obj/flash.o
- 0x080009fc FlashDone
+ 0x08000c6c 0x58 THUMB Debug/../../obj/flash.o
+ 0x08000c6c FlashDone
.text.AssertFailure
- 0x08000a30 0x18 THUMB Debug/../../obj/assert.o
- 0x08000a30 AssertFailure
+ 0x08000cc4 0x1c THUMB Debug/../../obj/assert.o
+ 0x08000cc4 AssertFailure
.text.BackDoorCheck
- 0x08000a48 0x30 THUMB Debug/../../obj/backdoor.o
- 0x08000a48 BackDoorCheck
+ 0x08000ce0 0x3c THUMB Debug/../../obj/backdoor.o
+ 0x08000ce0 BackDoorCheck
.text.BackDoorInit
- 0x08000a78 0x18 THUMB Debug/../../obj/backdoor.o
- 0x08000a78 BackDoorInit
+ 0x08000d1c 0x1c THUMB Debug/../../obj/backdoor.o
+ 0x08000d1c BackDoorInit
.text.BootInit
- 0x08000a90 0x16 THUMB Debug/../../obj/boot.o
- 0x08000a90 BootInit
+ 0x08000d38 0x18 THUMB Debug/../../obj/boot.o
+ 0x08000d38 BootInit
.text.BootTask
- 0x08000aa6 0x12 THUMB Debug/../../obj/boot.o
- 0x08000aa6 BootTask
- .text.ComInit 0x08000ab8 0x2c THUMB Debug/../../obj/com.o
- 0x08000ab8 ComInit
- .text.ComTask 0x08000ae4 0x20 THUMB Debug/../../obj/com.o
- 0x08000ae4 ComTask
+ 0x08000d50 0x14 THUMB Debug/../../obj/boot.o
+ 0x08000d50 BootTask
+ .text.ComInit 0x08000d64 0x34 THUMB Debug/../../obj/com.o
+ 0x08000d64 ComInit
+ .text.ComTask 0x08000d98 0x24 THUMB Debug/../../obj/com.o
+ 0x08000d98 ComTask
.text.ComTransmitPacket
- 0x08000b04 0x10 THUMB Debug/../../obj/com.o
- 0x08000b04 ComTransmitPacket
+ 0x08000dbc 0x10 THUMB Debug/../../obj/com.o
+ 0x08000dbc ComTransmitPacket
.text.ComSetConnectEntryState
- 0x08000b14 0xc THUMB Debug/../../obj/com.o
- 0x08000b14 ComSetConnectEntryState
+ 0x08000dcc 0x10 THUMB Debug/../../obj/com.o
+ 0x08000dcc ComSetConnectEntryState
.text.ComIsConnected
- 0x08000b20 0x4 THUMB Debug/../../obj/com.o
- 0x08000b20 ComIsConnected
- .text.CopInit 0x08000b24 0x2 THUMB Debug/../../obj/cop.o
- 0x08000b24 CopInit
+ 0x08000ddc 0xc THUMB Debug/../../obj/com.o
+ 0x08000ddc ComIsConnected
+ .text.CopInit 0x08000de8 0x4 THUMB Debug/../../obj/cop.o
+ 0x08000de8 CopInit
.text.CopService
- 0x08000b26 0x2 THUMB Debug/../../obj/cop.o
- 0x08000b26 CopService
+ 0x08000dec 0x4 THUMB Debug/../../obj/cop.o
+ 0x08000dec CopService
+ .text.XcpProtectResources
+ 0x08000df0 0x10 THUMB Debug/../../obj/xcp.o
.text.XcpSetCtoError
- 0x08000b28 0x14 THUMB Debug/../../obj/xcp.o
- .text.XcpInit 0x08000b3c 0x1c THUMB Debug/../../obj/xcp.o
- 0x08000b3c XcpInit
+ 0x08000e00 0x1c THUMB Debug/../../obj/xcp.o
+ .text.XcpInit 0x08000e1c 0x20 THUMB Debug/../../obj/xcp.o
+ 0x08000e1c XcpInit
.text.XcpIsConnected
- 0x08000b58 0x10 THUMB Debug/../../obj/xcp.o
- 0x08000b58 XcpIsConnected
+ 0x08000e3c 0x14 THUMB Debug/../../obj/xcp.o
+ 0x08000e3c XcpIsConnected
.text.XcpPacketTransmitted
- 0x08000b68 0x10 THUMB Debug/../../obj/xcp.o
- 0x08000b68 XcpPacketTransmitted
+ 0x08000e50 0x14 THUMB Debug/../../obj/xcp.o
+ 0x08000e50 XcpPacketTransmitted
.text.XcpPacketReceived
- 0x08000b78 0x1f8 THUMB Debug/../../obj/xcp.o
- 0x08000b78 XcpPacketReceived
+ 0x08000e64 0x3c8 THUMB Debug/../../obj/xcp.o
+ 0x08000e64 XcpPacketReceived
.text.libdebugio_bkpt.__do_debug_operation_bkpt
- 0x08000d70 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v7m_t_le.a(libdebugio_asm.o)
- 0x08000d70 __do_debug_operation_bkpt
+ 0x0800122c 0x18 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v7m_t_le.a(libdebugio_asm.o)
+ 0x0800122c __do_debug_operation_bkpt
.text.libc.__debug_io_lock
- 0x08000d88 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
- 0x08000d88 __debug_io_lock
+ 0x08001244 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
+ 0x08001244 __debug_io_lock
.text.libc.__debug_io_unlock
- 0x08000d8c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
- 0x08000d8c __debug_io_unlock
- 0x08000d90 __text_end__ = (__text_start__ + SIZEOF (.text))
- 0x08000d90 __text_load_end__ = __text_end__
+ 0x08001248 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
+ 0x08001248 __debug_io_unlock
+ 0x0800124c __text_end__ = (__text_start__ + SIZEOF (.text))
+ 0x0800124c __text_load_end__ = __text_end__
.vfp11_veneer 0x00000000 0x0
.vfp11_veneer 0x00000000 0x0 linker stubs
@@ -360,62 +371,65 @@ Linker script and memory map
.v4_bx 0x00000000 0x0
.v4_bx 0x00000000 0x0 linker stubs
0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .text is too large to fit in FLASH memory segment)
- 0x08000d90 __dtors_load_start__ = ALIGN (__text_end__, 0x4)
+ 0x0800124c __dtors_load_start__ = ALIGN (__text_end__, 0x4)
-.dtors 0x08000d90 0x0
- 0x08000d90 __dtors_start__ = .
+.dtors 0x0800124c 0x0
+ 0x0800124c __dtors_start__ = .
*(SORT(.dtors.*))
*(.dtors)
*(.fini_array .fini_array.*)
- 0x08000d90 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors))
- 0x08000d90 __dtors_load_end__ = __dtors_end__
+ 0x0800124c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors))
+ 0x0800124c __dtors_load_end__ = __dtors_end__
0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .dtors is too large to fit in FLASH memory segment)
- 0x08000d90 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4)
+ 0x0800124c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4)
-.ctors 0x08000d90 0x0
- 0x08000d90 __ctors_start__ = .
+.ctors 0x0800124c 0x0
+ 0x0800124c __ctors_start__ = .
*(SORT(.ctors.*))
*(.ctors)
*(.init_array .init_array.*)
- 0x08000d90 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors))
- 0x08000d90 __ctors_load_end__ = __ctors_end__
+ 0x0800124c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors))
+ 0x0800124c __ctors_load_end__ = __ctors_end__
0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .ctors is too large to fit in FLASH memory segment)
- 0x08000d90 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4)
+ 0x0800124c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4)
-.rodata 0x08000d90 0x23c
- 0x08000d90 __rodata_start__ = .
+.rodata 0x0800124c 0x23c
+ 0x0800124c __rodata_start__ = .
*(.rodata .rodata.* .gnu.linkonce.r.*)
- .rodata.str1.1
- 0x08000d90 0x67 THUMB Debug/../../obj/main.o
- .rodata.str1.1
- 0x08000df7 0x92 THUMB Debug/../../obj/vectors.o
- .rodata.str1.1
- 0x08000e89 0x84 THUMB Debug/../../obj/uart.o
- *fill* 0x08000f0d 0x3 00
+ .rodata.str1.4
+ 0x0800124c 0x67 THUMB Debug/../../obj/main.o
+ 0x68 (size before relaxing)
+ *fill* 0x080012b3 0x1 00
+ .rodata.str1.4
+ 0x080012b4 0x92 THUMB Debug/../../obj/vectors.o
+ 0x94 (size before relaxing)
+ *fill* 0x08001346 0x2 00
+ .rodata.str1.4
+ 0x08001348 0x84 THUMB Debug/../../obj/uart.o
.rodata.flashLayout
- 0x08000f10 0xb4 THUMB Debug/../../obj/flash.o
+ 0x080013cc 0xb4 THUMB Debug/../../obj/flash.o
.rodata.xcpStationId
- 0x08000fc4 0x8 THUMB Debug/../../obj/xcp.o
- 0x08000fcc __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata))
- 0x08000fcc __rodata_load_end__ = __rodata_end__
+ 0x08001480 0x8 THUMB Debug/../../obj/xcp.o
+ 0x08001488 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata))
+ 0x08001488 __rodata_load_end__ = __rodata_end__
0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .rodata is too large to fit in FLASH memory segment)
- 0x08000fcc __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4)
+ 0x08001488 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4)
-.ARM.exidx 0x08000fcc 0x0
- 0x08000fcc __ARM.exidx_start__ = .
- 0x08000fcc __exidx_start = __ARM.exidx_start__
+.ARM.exidx 0x08001488 0x0
+ 0x08001488 __ARM.exidx_start__ = .
+ 0x08001488 __exidx_start = __ARM.exidx_start__
*(.ARM.exidx .ARM.exidx.*)
- 0x08000fcc __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx))
- 0x08000fcc __exidx_end = __ARM.exidx_end__
- 0x08000fcc __ARM.exidx_load_end__ = __ARM.exidx_end__
+ 0x08001488 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx))
+ 0x08001488 __exidx_end = __ARM.exidx_end__
+ 0x08001488 __ARM.exidx_load_end__ = __ARM.exidx_end__
0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= (__FLASH_segment_start__ + 0x20000))), error: .ARM.exidx is too large to fit in FLASH memory segment)
- 0x08000fcc __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4)
+ 0x08001488 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4)
-.fast 0x20000000 0x0 load address 0x08000fcc
+.fast 0x20000000 0x0 load address 0x08001488
0x20000000 __fast_start__ = .
*(.fast .fast.*)
0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast))
- 0x08000fcc __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast))
+ 0x08001488 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast))
0x00000001 . = ASSERT ((((__fast_load_start__ + SIZEOF (.fast)) >= __FLASH_segment_start__) && ((__fast_load_start__ + SIZEOF (.fast)) <= (__FLASH_segment_start__ + 0x20000))), error: .fast is too large to fit in FLASH memory segment)
.fast_run 0x20000000 0x0
@@ -424,13 +438,13 @@ Linker script and memory map
0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run))
0x20000000 __fast_run_load_end__ = __fast_run_end__
0x00000001 . = ASSERT (((__fast_run_end__ >= __RAM_segment_start__) && (__fast_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .fast_run is too large to fit in RAM memory segment)
- 0x08000fcc __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4)
+ 0x08001488 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4)
-.data 0x20000000 0x0 load address 0x08000fcc
+.data 0x20000000 0x0 load address 0x08001488
0x20000000 __data_start__ = .
*(.data .data.* .gnu.linkonce.d.*)
0x20000000 __data_end__ = (__data_start__ + SIZEOF (.data))
- 0x08000fcc __data_load_end__ = (__data_load_start__ + SIZEOF (.data))
+ 0x08001488 __data_load_end__ = (__data_load_start__ + SIZEOF (.data))
0x00000001 . = ASSERT ((((__data_load_start__ + SIZEOF (.data)) >= __FLASH_segment_start__) && ((__data_load_start__ + SIZEOF (.data)) <= (__FLASH_segment_start__ + 0x20000))), error: .data is too large to fit in FLASH memory segment)
.data_run 0x20000000 0x0
@@ -441,99 +455,100 @@ Linker script and memory map
0x00000001 . = ASSERT (((__data_run_end__ >= __RAM_segment_start__) && (__data_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .data_run is too large to fit in RAM memory segment)
0x20000000 __bss_load_start__ = ALIGN (__data_run_end__, 0x4)
-.bss 0x20000000 0x4e8
+.bss 0x20000000 0x4ec
0x20000000 __bss_start__ = .
*(.bss .bss.* .gnu.linkonce.b.*)
.bss.millisecond_counter
0x20000000 0x2 THUMB Debug/../../obj/timer.o
+ *fill* 0x20000002 0x2 00
.bss.xcpCtoReqPacket.876
- 0x20000002 0x41 THUMB Debug/../../obj/uart.o
+ 0x20000004 0x44 THUMB Debug/../../obj/uart.o
.bss.xcpCtoRxInProgress.878
- 0x20000043 0x1 THUMB Debug/../../obj/uart.o
+ 0x20000048 0x1 THUMB Debug/../../obj/uart.o
.bss.xcpCtoRxLength.877
- 0x20000044 0x1 THUMB Debug/../../obj/uart.o
- *fill* 0x20000045 0x3 00
+ 0x20000049 0x1 THUMB Debug/../../obj/uart.o
+ *fill* 0x2000004a 0x2 00
.bss.bootBlockInfo
- 0x20000048 0x204 THUMB Debug/../../obj/flash.o
+ 0x2000004c 0x204 THUMB Debug/../../obj/flash.o
.bss.blockInfo
- 0x2000024c 0x204 THUMB Debug/../../obj/flash.o
+ 0x20000250 0x204 THUMB Debug/../../obj/flash.o
.bss.assert_failure_file
- 0x20000450 0x4 THUMB Debug/../../obj/assert.o
- .bss.assert_failure_line
0x20000454 0x4 THUMB Debug/../../obj/assert.o
+ .bss.assert_failure_line
+ 0x20000458 0x4 THUMB Debug/../../obj/assert.o
.bss.backdoorOpen
- 0x20000458 0x1 THUMB Debug/../../obj/backdoor.o
+ 0x2000045c 0x1 THUMB Debug/../../obj/backdoor.o
.bss.comEntryStateConnect
- 0x20000459 0x1 THUMB Debug/../../obj/com.o
+ 0x2000045d 0x1 THUMB Debug/../../obj/com.o
+ *fill* 0x2000045e 0x2 00
.bss.xcpCtoReqPacket.855
- 0x2000045a 0x40 THUMB Debug/../../obj/com.o
- *fill* 0x2000049a 0x2 00
- .bss.xcpInfo 0x2000049c 0x4c THUMB Debug/../../obj/xcp.o
+ 0x20000460 0x40 THUMB Debug/../../obj/com.o
+ .bss.xcpInfo 0x200004a0 0x4c THUMB Debug/../../obj/xcp.o
*(COMMON)
- 0x200004e8 __bss_end__ = (__bss_start__ + SIZEOF (.bss))
- 0x200004e8 __bss_load_end__ = __bss_end__
+ 0x200004ec __bss_end__ = (__bss_start__ + SIZEOF (.bss))
+ 0x200004ec __bss_load_end__ = __bss_end__
0x00000001 . = ASSERT (((__bss_end__ >= __RAM_segment_start__) && (__bss_end__ <= (__RAM_segment_start__ + 0x5000))), error: .bss is too large to fit in RAM memory segment)
- 0x200004e8 __non_init_load_start__ = ALIGN (__bss_end__, 0x4)
+ 0x200004ec __non_init_load_start__ = ALIGN (__bss_end__, 0x4)
-.non_init 0x200004e8 0x0
- 0x200004e8 __non_init_start__ = .
+.non_init 0x200004ec 0x0
+ 0x200004ec __non_init_start__ = .
*(.non_init .non_init.*)
- 0x200004e8 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init))
- 0x200004e8 __non_init_load_end__ = __non_init_end__
+ 0x200004ec __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init))
+ 0x200004ec __non_init_load_end__ = __non_init_end__
0x00000001 . = ASSERT (((__non_init_end__ >= __RAM_segment_start__) && (__non_init_end__ <= (__RAM_segment_start__ + 0x5000))), error: .non_init is too large to fit in RAM memory segment)
- 0x200004e8 __heap_load_start__ = ALIGN (__non_init_end__, 0x4)
+ 0x200004ec __heap_load_start__ = ALIGN (__non_init_end__, 0x4)
-.heap 0x200004e8 0x80
- 0x200004e8 __heap_start__ = .
+.heap 0x200004ec 0x80
+ 0x200004ec __heap_start__ = .
*(.heap .heap.*)
- 0x20000568 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4)
- *fill* 0x200004e8 0x80 00
- 0x20000568 __heap_end__ = (__heap_start__ + SIZEOF (.heap))
- 0x20000568 __heap_load_end__ = __heap_end__
+ 0x2000056c . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4)
+ *fill* 0x200004ec 0x80 00
+ 0x2000056c __heap_end__ = (__heap_start__ + SIZEOF (.heap))
+ 0x2000056c __heap_load_end__ = __heap_end__
0x00000001 . = ASSERT (((__heap_end__ >= __RAM_segment_start__) && (__heap_end__ <= (__RAM_segment_start__ + 0x5000))), error: .heap is too large to fit in RAM memory segment)
- 0x20000568 __stack_load_start__ = ALIGN (__heap_end__, 0x4)
+ 0x2000056c __stack_load_start__ = ALIGN (__heap_end__, 0x4)
-.stack 0x20000568 0x100
- 0x20000568 __stack_start__ = .
+.stack 0x2000056c 0x100
+ 0x2000056c __stack_start__ = .
*(.stack .stack.*)
- 0x20000668 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4)
- *fill* 0x20000568 0x100 00
- 0x20000668 __stack_end__ = (__stack_start__ + SIZEOF (.stack))
- 0x20000668 __stack_load_end__ = __stack_end__
+ 0x2000066c . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4)
+ *fill* 0x2000056c 0x100 00
+ 0x2000066c __stack_end__ = (__stack_start__ + SIZEOF (.stack))
+ 0x2000066c __stack_load_end__ = __stack_end__
0x00000001 . = ASSERT (((__stack_end__ >= __RAM_segment_start__) && (__stack_end__ <= (__RAM_segment_start__ + 0x5000))), error: .stack is too large to fit in RAM memory segment)
- 0x20000668 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4)
+ 0x2000066c __stack_process_load_start__ = ALIGN (__stack_end__, 0x4)
-.stack_process 0x20000668 0x0
- 0x20000668 __stack_process_start__ = .
+.stack_process 0x2000066c 0x0
+ 0x2000066c __stack_process_start__ = .
*(.stack_process .stack_process.*)
- 0x20000668 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4)
- 0x20000668 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process))
- 0x20000668 __stack_process_load_end__ = __stack_process_end__
+ 0x2000066c . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4)
+ 0x2000066c __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process))
+ 0x2000066c __stack_process_load_end__ = __stack_process_end__
0x00000001 . = ASSERT (((__stack_process_end__ >= __RAM_segment_start__) && (__stack_process_end__ <= (__RAM_segment_start__ + 0x5000))), error: .stack_process is too large to fit in RAM memory segment)
- 0x20000668 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4)
+ 0x2000066c __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4)
-.tbss 0x20000668 0x0
- 0x20000668 __tbss_start__ = .
+.tbss 0x2000066c 0x0
+ 0x2000066c __tbss_start__ = .
*(.tbss .tbss.*)
- 0x20000668 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss))
- 0x20000668 __tbss_load_end__ = __tbss_end__
+ 0x2000066c __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss))
+ 0x2000066c __tbss_load_end__ = __tbss_end__
0x00000001 . = ASSERT (((__tbss_end__ >= __RAM_segment_start__) && (__tbss_end__ <= (__RAM_segment_start__ + 0x5000))), error: .tbss is too large to fit in RAM memory segment)
- 0x08000fcc __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4)
+ 0x08001488 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4)
-.tdata 0x20000668 0x0 load address 0x08000fcc
- 0x20000668 __tdata_start__ = .
+.tdata 0x2000066c 0x0 load address 0x08001488
+ 0x2000066c __tdata_start__ = .
*(.tdata .tdata.*)
- 0x20000668 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata))
- 0x08000fcc __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata))
- 0x08000fcc __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata))
+ 0x2000066c __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata))
+ 0x08001488 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata))
+ 0x08001488 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata))
0x00000001 . = ASSERT ((((__tdata_load_start__ + SIZEOF (.tdata)) >= __FLASH_segment_start__) && ((__tdata_load_start__ + SIZEOF (.tdata)) <= (__FLASH_segment_start__ + 0x20000))), error: .tdata is too large to fit in FLASH memory segment)
-.tdata_run 0x20000668 0x0
- 0x20000668 __tdata_run_start__ = .
- 0x20000668 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .)
- 0x20000668 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run))
- 0x20000668 __tdata_run_load_end__ = __tdata_run_end__
- 0x20000668 __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run))
+.tdata_run 0x2000066c 0x0
+ 0x2000066c __tdata_run_start__ = .
+ 0x2000066c . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .)
+ 0x2000066c __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run))
+ 0x2000066c __tdata_run_load_end__ = __tdata_run_end__
+ 0x2000066c __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run))
0x00000001 . = ASSERT (((__tdata_run_end__ >= __RAM_segment_start__) && (__tdata_run_end__ <= (__RAM_segment_start__ + 0x5000))), error: .tdata_run is too large to fit in RAM memory segment)
START GROUP
LOAD THUMB Debug/../../obj/hooks.o
@@ -563,28 +578,28 @@ LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib
END GROUP
OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/../bin/openbtl_olimex_stm32p103.elf elf32-littlearm)
-.debug_info 0x00000000 0x29b6
+.debug_info 0x00000000 0x27fc
.debug_info 0x00000000 0x5e THUMB Debug/../../obj/hooks.o
.debug_info 0x0000005e 0x32a THUMB Debug/../../obj/main.o
.debug_info 0x00000388 0x53d THUMB Debug/../../obj/core_cm3.o
.debug_info 0x000008c5 0x4d9 THUMB Debug/../../obj/system_stm32f10x.o
.debug_info 0x00000d9e 0x114 THUMB Debug/../../obj/cstart.o
- .debug_info 0x00000eb2 0xf4 THUMB Debug/../../obj/vectors.o
- .debug_info 0x00000fa6 0x5e THUMB Debug/../../obj/can.o
- .debug_info 0x00001004 0x13d THUMB Debug/../../obj/cpu.o
- .debug_info 0x00001141 0x15e THUMB Debug/../../obj/nvm.o
- .debug_info 0x0000129f 0x187 THUMB Debug/../../obj/timer.o
- .debug_info 0x00001426 0x300 THUMB Debug/../../obj/uart.o
- .debug_info 0x00001726 0x7b4 THUMB Debug/../../obj/flash.o
- .debug_info 0x00001eda 0xe8 THUMB Debug/../../obj/assert.o
- .debug_info 0x00001fc2 0xa8 THUMB Debug/../../obj/backdoor.o
- .debug_info 0x0000206a 0x8c THUMB Debug/../../obj/boot.o
- .debug_info 0x000020f6 0x18e THUMB Debug/../../obj/com.o
- .debug_info 0x00002284 0x8a THUMB Debug/../../obj/cop.o
- .debug_info 0x0000230e 0x5db THUMB Debug/../../obj/xcp.o
- .debug_info 0x000028e9 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
+ .debug_info 0x00000eb2 0xf5 THUMB Debug/../../obj/vectors.o
+ .debug_info 0x00000fa7 0x5e THUMB Debug/../../obj/can.o
+ .debug_info 0x00001005 0x13e THUMB Debug/../../obj/cpu.o
+ .debug_info 0x00001143 0x162 THUMB Debug/../../obj/nvm.o
+ .debug_info 0x000012a5 0x148 THUMB Debug/../../obj/timer.o
+ .debug_info 0x000013ed 0x28d THUMB Debug/../../obj/uart.o
+ .debug_info 0x0000167a 0x671 THUMB Debug/../../obj/flash.o
+ .debug_info 0x00001ceb 0xe8 THUMB Debug/../../obj/assert.o
+ .debug_info 0x00001dd3 0xa8 THUMB Debug/../../obj/backdoor.o
+ .debug_info 0x00001e7b 0x8c THUMB Debug/../../obj/boot.o
+ .debug_info 0x00001f07 0x18f THUMB Debug/../../obj/com.o
+ .debug_info 0x00002096 0x8a THUMB Debug/../../obj/cop.o
+ .debug_info 0x00002120 0x60f THUMB Debug/../../obj/xcp.o
+ .debug_info 0x0000272f 0xcd C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
-.debug_abbrev 0x00000000 0xf0d
+.debug_abbrev 0x00000000 0xe19
.debug_abbrev 0x00000000 0x2a THUMB Debug/../../obj/hooks.o
.debug_abbrev 0x0000002a 0x109 THUMB Debug/../../obj/main.o
.debug_abbrev 0x00000133 0xa9 THUMB Debug/../../obj/core_cm3.o
@@ -593,38 +608,38 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_
.debug_abbrev 0x0000037c 0xc0 THUMB Debug/../../obj/vectors.o
.debug_abbrev 0x0000043c 0x2a THUMB Debug/../../obj/can.o
.debug_abbrev 0x00000466 0xb1 THUMB Debug/../../obj/cpu.o
- .debug_abbrev 0x00000517 0xbc THUMB Debug/../../obj/nvm.o
- .debug_abbrev 0x000005d3 0x13a THUMB Debug/../../obj/timer.o
- .debug_abbrev 0x0000070d 0x16d THUMB Debug/../../obj/uart.o
- .debug_abbrev 0x0000087a 0x279 THUMB Debug/../../obj/flash.o
- .debug_abbrev 0x00000af3 0x7e THUMB Debug/../../obj/assert.o
- .debug_abbrev 0x00000b71 0x5d THUMB Debug/../../obj/backdoor.o
- .debug_abbrev 0x00000bce 0x41 THUMB Debug/../../obj/boot.o
- .debug_abbrev 0x00000c0f 0xcb THUMB Debug/../../obj/com.o
- .debug_abbrev 0x00000cda 0x41 THUMB Debug/../../obj/cop.o
- .debug_abbrev 0x00000d1b 0x1cd THUMB Debug/../../obj/xcp.o
- .debug_abbrev 0x00000ee8 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
+ .debug_abbrev 0x00000517 0xa5 THUMB Debug/../../obj/nvm.o
+ .debug_abbrev 0x000005bc 0xe1 THUMB Debug/../../obj/timer.o
+ .debug_abbrev 0x0000069d 0x133 THUMB Debug/../../obj/uart.o
+ .debug_abbrev 0x000007d0 0x229 THUMB Debug/../../obj/flash.o
+ .debug_abbrev 0x000009f9 0x7e THUMB Debug/../../obj/assert.o
+ .debug_abbrev 0x00000a77 0x5d THUMB Debug/../../obj/backdoor.o
+ .debug_abbrev 0x00000ad4 0x41 THUMB Debug/../../obj/boot.o
+ .debug_abbrev 0x00000b15 0xe2 THUMB Debug/../../obj/com.o
+ .debug_abbrev 0x00000bf7 0x41 THUMB Debug/../../obj/cop.o
+ .debug_abbrev 0x00000c38 0x1bc THUMB Debug/../../obj/xcp.o
+ .debug_abbrev 0x00000df4 0x25 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
-.debug_line 0x00000000 0x179e
+.debug_line 0x00000000 0x177d
.debug_line 0x00000000 0x1d THUMB Debug/../../obj/hooks.o
- .debug_line 0x0000001d 0x1d6 THUMB Debug/../../obj/main.o
- .debug_line 0x000001f3 0x295 THUMB Debug/../../obj/core_cm3.o
- .debug_line 0x00000488 0x219 THUMB Debug/../../obj/system_stm32f10x.o
- .debug_line 0x000006a1 0x15c THUMB Debug/../../obj/cstart.o
- .debug_line 0x000007fd 0xf1 THUMB Debug/../../obj/vectors.o
- .debug_line 0x000008ee 0x1d THUMB Debug/../../obj/can.o
- .debug_line 0x0000090b 0x113 THUMB Debug/../../obj/cpu.o
- .debug_line 0x00000a1e 0x133 THUMB Debug/../../obj/nvm.o
- .debug_line 0x00000b51 0x140 THUMB Debug/../../obj/timer.o
- .debug_line 0x00000c91 0x17d THUMB Debug/../../obj/uart.o
- .debug_line 0x00000e0e 0x2aa THUMB Debug/../../obj/flash.o
- .debug_line 0x000010b8 0xde THUMB Debug/../../obj/assert.o
- .debug_line 0x00001196 0xfb THUMB Debug/../../obj/backdoor.o
- .debug_line 0x00001291 0xbf THUMB Debug/../../obj/boot.o
- .debug_line 0x00001350 0x138 THUMB Debug/../../obj/com.o
- .debug_line 0x00001488 0xb7 THUMB Debug/../../obj/cop.o
- .debug_line 0x0000153f 0x1eb THUMB Debug/../../obj/xcp.o
- .debug_line 0x0000172a 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
+ .debug_line 0x0000001d 0x1d7 THUMB Debug/../../obj/main.o
+ .debug_line 0x000001f4 0x295 THUMB Debug/../../obj/core_cm3.o
+ .debug_line 0x00000489 0x217 THUMB Debug/../../obj/system_stm32f10x.o
+ .debug_line 0x000006a0 0x15c THUMB Debug/../../obj/cstart.o
+ .debug_line 0x000007fc 0xf0 THUMB Debug/../../obj/vectors.o
+ .debug_line 0x000008ec 0x1d THUMB Debug/../../obj/can.o
+ .debug_line 0x00000909 0x116 THUMB Debug/../../obj/cpu.o
+ .debug_line 0x00000a1f 0x133 THUMB Debug/../../obj/nvm.o
+ .debug_line 0x00000b52 0x131 THUMB Debug/../../obj/timer.o
+ .debug_line 0x00000c83 0x16b THUMB Debug/../../obj/uart.o
+ .debug_line 0x00000dee 0x2c8 THUMB Debug/../../obj/flash.o
+ .debug_line 0x000010b6 0xdc THUMB Debug/../../obj/assert.o
+ .debug_line 0x00001192 0xf4 THUMB Debug/../../obj/backdoor.o
+ .debug_line 0x00001286 0xbf THUMB Debug/../../obj/boot.o
+ .debug_line 0x00001345 0x136 THUMB Debug/../../obj/com.o
+ .debug_line 0x0000147b 0xb7 THUMB Debug/../../obj/cop.o
+ .debug_line 0x00001532 0x1d7 THUMB Debug/../../obj/xcp.o
+ .debug_line 0x00001709 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
.debug_str 0x00000000 0x13e2
.debug_str 0x00000000 0xfc THUMB Debug/../../obj/hooks.o
@@ -728,41 +743,42 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_
.ARM.attributes
0x00000130 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
-.debug_frame 0x00000000 0x810
+.debug_frame 0x00000000 0x8fc
.debug_frame 0x00000000 0x30 THUMB Debug/../../obj/main.o
.debug_frame 0x00000030 0x170 THUMB Debug/../../obj/core_cm3.o
.debug_frame 0x000001a0 0x38 THUMB Debug/../../obj/system_stm32f10x.o
- .debug_frame 0x000001d8 0x20 THUMB Debug/../../obj/vectors.o
- .debug_frame 0x000001f8 0x5c THUMB Debug/../../obj/cpu.o
- .debug_frame 0x00000254 0x6c THUMB Debug/../../obj/nvm.o
- .debug_frame 0x000002c0 0x6c THUMB Debug/../../obj/timer.o
- .debug_frame 0x0000032c 0x64 THUMB Debug/../../obj/uart.o
- .debug_frame 0x00000390 0x150 THUMB Debug/../../obj/flash.o
- .debug_frame 0x000004e0 0x2c THUMB Debug/../../obj/assert.o
- .debug_frame 0x0000050c 0x48 THUMB Debug/../../obj/backdoor.o
- .debug_frame 0x00000554 0x48 THUMB Debug/../../obj/boot.o
- .debug_frame 0x0000059c 0x94 THUMB Debug/../../obj/com.o
- .debug_frame 0x00000630 0x30 THUMB Debug/../../obj/cop.o
- .debug_frame 0x00000660 0x70 THUMB Debug/../../obj/xcp.o
- .debug_frame 0x000006d0 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v7m_t_le.a(libdebugio_asm.o)
- .debug_frame 0x00000770 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
+ .debug_frame 0x000001d8 0x2c THUMB Debug/../../obj/vectors.o
+ .debug_frame 0x00000204 0x68 THUMB Debug/../../obj/cpu.o
+ .debug_frame 0x0000026c 0x9c THUMB Debug/../../obj/nvm.o
+ .debug_frame 0x00000308 0x78 THUMB Debug/../../obj/timer.o
+ .debug_frame 0x00000380 0x90 THUMB Debug/../../obj/uart.o
+ .debug_frame 0x00000410 0x19c THUMB Debug/../../obj/flash.o
+ .debug_frame 0x000005ac 0x2c THUMB Debug/../../obj/assert.o
+ .debug_frame 0x000005d8 0x48 THUMB Debug/../../obj/backdoor.o
+ .debug_frame 0x00000620 0x48 THUMB Debug/../../obj/boot.o
+ .debug_frame 0x00000668 0xa4 THUMB Debug/../../obj/com.o
+ .debug_frame 0x0000070c 0x30 THUMB Debug/../../obj/cop.o
+ .debug_frame 0x0000073c 0x80 THUMB Debug/../../obj/xcp.o
+ .debug_frame 0x000007bc 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libdebugio_v7m_t_le.a(libdebugio_asm.o)
+ .debug_frame 0x0000085c 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
-.debug_loc 0x00000000 0x100c
- .debug_loc 0x00000000 0x76 THUMB Debug/../../obj/main.o
- .debug_loc 0x00000076 0x2ae THUMB Debug/../../obj/core_cm3.o
- .debug_loc 0x00000324 0x10e THUMB Debug/../../obj/system_stm32f10x.o
- .debug_loc 0x00000432 0xc1 THUMB Debug/../../obj/cpu.o
- .debug_loc 0x000004f3 0x7f THUMB Debug/../../obj/nvm.o
- .debug_loc 0x00000572 0x20 THUMB Debug/../../obj/timer.o
- .debug_loc 0x00000592 0x105 THUMB Debug/../../obj/uart.o
- .debug_loc 0x00000697 0x6b4 THUMB Debug/../../obj/flash.o
- .debug_loc 0x00000d4b 0x46 THUMB Debug/../../obj/assert.o
- .debug_loc 0x00000d91 0x40 THUMB Debug/../../obj/backdoor.o
- .debug_loc 0x00000dd1 0x40 THUMB Debug/../../obj/boot.o
- .debug_loc 0x00000e11 0x86 THUMB Debug/../../obj/com.o
- .debug_loc 0x00000e97 0x175 THUMB Debug/../../obj/xcp.o
+.debug_loc 0x00000000 0x11fe
+ .debug_loc 0x00000000 0x82 THUMB Debug/../../obj/main.o
+ .debug_loc 0x00000082 0x2ae THUMB Debug/../../obj/core_cm3.o
+ .debug_loc 0x00000330 0x165 THUMB Debug/../../obj/system_stm32f10x.o
+ .debug_loc 0x00000495 0x20 THUMB Debug/../../obj/vectors.o
+ .debug_loc 0x000004b5 0x111 THUMB Debug/../../obj/cpu.o
+ .debug_loc 0x000005c6 0xff THUMB Debug/../../obj/nvm.o
+ .debug_loc 0x000006c5 0x40 THUMB Debug/../../obj/timer.o
+ .debug_loc 0x00000705 0x115 THUMB Debug/../../obj/uart.o
+ .debug_loc 0x0000081a 0x6c5 THUMB Debug/../../obj/flash.o
+ .debug_loc 0x00000edf 0x46 THUMB Debug/../../obj/assert.o
+ .debug_loc 0x00000f25 0x40 THUMB Debug/../../obj/backdoor.o
+ .debug_loc 0x00000f65 0x40 THUMB Debug/../../obj/boot.o
+ .debug_loc 0x00000fa5 0xb2 THUMB Debug/../../obj/com.o
+ .debug_loc 0x00001057 0x1a7 THUMB Debug/../../obj/xcp.o
-.debug_aranges 0x00000000 0x420
+.debug_aranges 0x00000000 0x450
.debug_aranges
0x00000000 0x20 THUMB Debug/../../obj/main.o
.debug_aranges
@@ -780,38 +796,38 @@ OUTPUT(D:/usr/feaser/software/OpenBLT/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_
.debug_aranges
0x000001c0 0x40 THUMB Debug/../../obj/timer.o
.debug_aranges
- 0x00000200 0x30 THUMB Debug/../../obj/uart.o
+ 0x00000200 0x40 THUMB Debug/../../obj/uart.o
.debug_aranges
- 0x00000230 0x70 THUMB Debug/../../obj/flash.o
+ 0x00000240 0x88 THUMB Debug/../../obj/flash.o
.debug_aranges
- 0x000002a0 0x20 THUMB Debug/../../obj/assert.o
+ 0x000002c8 0x20 THUMB Debug/../../obj/assert.o
.debug_aranges
- 0x000002c0 0x28 THUMB Debug/../../obj/backdoor.o
+ 0x000002e8 0x28 THUMB Debug/../../obj/backdoor.o
.debug_aranges
- 0x000002e8 0x28 THUMB Debug/../../obj/boot.o
+ 0x00000310 0x28 THUMB Debug/../../obj/boot.o
.debug_aranges
- 0x00000310 0x48 THUMB Debug/../../obj/com.o
+ 0x00000338 0x48 THUMB Debug/../../obj/com.o
.debug_aranges
- 0x00000358 0x28 THUMB Debug/../../obj/cop.o
+ 0x00000380 0x28 THUMB Debug/../../obj/cop.o
.debug_aranges
- 0x00000380 0x40 THUMB Debug/../../obj/xcp.o
+ 0x000003a8 0x48 THUMB Debug/../../obj/xcp.o
.debug_aranges
- 0x000003c0 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
+ 0x000003f0 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
-.debug_ranges 0x00000000 0x420
+.debug_ranges 0x00000000 0x360
.debug_ranges 0x00000000 0x10 THUMB Debug/../../obj/main.o
.debug_ranges 0x00000010 0xb8 THUMB Debug/../../obj/core_cm3.o
.debug_ranges 0x000000c8 0x18 THUMB Debug/../../obj/system_stm32f10x.o
.debug_ranges 0x000000e0 0x10 THUMB Debug/../../obj/vectors.o
.debug_ranges 0x000000f0 0x20 THUMB Debug/../../obj/cpu.o
.debug_ranges 0x00000110 0x30 THUMB Debug/../../obj/nvm.o
- .debug_ranges 0x00000140 0x48 THUMB Debug/../../obj/timer.o
- .debug_ranges 0x00000188 0xb0 THUMB Debug/../../obj/uart.o
- .debug_ranges 0x00000238 0x78 THUMB Debug/../../obj/flash.o
- .debug_ranges 0x000002b0 0x10 THUMB Debug/../../obj/assert.o
- .debug_ranges 0x000002c0 0x18 THUMB Debug/../../obj/backdoor.o
- .debug_ranges 0x000002d8 0x18 THUMB Debug/../../obj/boot.o
- .debug_ranges 0x000002f0 0x38 THUMB Debug/../../obj/com.o
- .debug_ranges 0x00000328 0x18 THUMB Debug/../../obj/cop.o
- .debug_ranges 0x00000340 0x90 THUMB Debug/../../obj/xcp.o
- .debug_ranges 0x000003d0 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
+ .debug_ranges 0x00000140 0x30 THUMB Debug/../../obj/timer.o
+ .debug_ranges 0x00000170 0x30 THUMB Debug/../../obj/uart.o
+ .debug_ranges 0x000001a0 0xa8 THUMB Debug/../../obj/flash.o
+ .debug_ranges 0x00000248 0x10 THUMB Debug/../../obj/assert.o
+ .debug_ranges 0x00000258 0x18 THUMB Debug/../../obj/backdoor.o
+ .debug_ranges 0x00000270 0x18 THUMB Debug/../../obj/boot.o
+ .debug_ranges 0x00000288 0x38 THUMB Debug/../../obj/com.o
+ .debug_ranges 0x000002c0 0x18 THUMB Debug/../../obj/cop.o
+ .debug_ranges 0x000002d8 0x38 THUMB Debug/../../obj/xcp.o
+ .debug_ranges 0x00000310 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.1/lib/libc_user_libc_v7m_t_le.a(user_libc.o)
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.srec b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.srec
index d027013b..ebaebde5 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.srec
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/bin/openbtl_olimex_stm32p103.srec
@@ -1,25 +1,25 @@
S02B0000443A2F7573722F6665617365722F736F6674776172652F4F70656E424C542F5461726765742F44657D
-S3150800000068060020DB01000815040008150400082E
-S31508000010150400081504000815040008150400084E
-S31508000020150400081504000815040008150400083E
-S31508000030150400081504000815040008150400082E
-S31508000040150400081504000815040008150400081E
-S31508000050150400081504000815040008150400080E
-S3150800006015040008150400081504000815040008FE
-S3150800007015040008150400081504000815040008EE
-S3150800008015040008150400081504000815040008DE
-S3150800009015040008150400081504000815040008CE
-S315080000A015040008150400081504000815040008BE
-S315080000B015040008150400081504000815040008AE
-S315080000C0150400081504000815040008150400089E
-S315080000D0150400081504000815040008150400088E
-S315080000E0150400081504000815040008150400087E
-S315080000F0150400081504000815040008150400086E
-S31508000100150400081504000815040008150400085D
-S31508000110150400081504000815040008150400084D
-S31508000120150400081504000815040008150400083D
-S31508000130150400081504000815040008150400082D
-S31508000140150400081504000815040008150400081D
+S315080000006C060020DB0100085904000859040008A2
+S31508000010590400085904000859040008590400083E
+S31508000020590400085904000859040008590400082E
+S31508000030590400085904000859040008590400081E
+S31508000040590400085904000859040008590400080E
+S3150800005059040008590400085904000859040008FE
+S3150800006059040008590400085904000859040008EE
+S3150800007059040008590400085904000859040008DE
+S3150800008059040008590400085904000859040008CE
+S3150800009059040008590400085904000859040008BE
+S315080000A059040008590400085904000859040008AE
+S315080000B0590400085904000859040008590400089E
+S315080000C0590400085904000859040008590400088E
+S315080000D0590400085904000859040008590400087E
+S315080000E0590400085904000859040008590400086E
+S315080000F0590400085904000859040008590400085E
+S31508000100590400085904000859040008590400084D
+S31508000110590400085904000859040008590400083D
+S31508000120590400085904000859040008590400082D
+S31508000130590400085904000859040008590400081D
+S31508000140590400085904000859040008590400080D
S3150800015072B64B484B4901604B498D464B484C4952
S315080001604C4A00F07BF84C484C494D4A00F076F86A
S315080001704C484D494D4A00F071F84D484D494E4A94
@@ -28,7 +28,7 @@ S315080001904E494F4A00F062F84E484F49002200F097
S315080001A068F84E484E49091A082903DB00220260FE
S315080001B0043001603F484049884205D0026804304F
S315080001C003B4904703BCF7E700208646EC4600F0E8
-S315080001D0A1FC00200021434A904772B62A498D4661
+S315080001D0FDFD00200021434A904772B62A498D4604
S315080001E02A482B492B4A00F039F82B482B492C4A28
S315080001F000F034F82B482C492C4A00F02FF82C48EC
S315080002002C492D4A00F02AF82C482D492D4A00F091
@@ -39,218 +39,294 @@ S315080002400268043003B4904703BCF7E700208646EB
S31508000250EC4600200021234A9047FEE7884207D053
S31508000260521A05D0037801300B700131013AF9D1E1
S315080002707047884202D002700130FAE770470000E2
-S3150800028008ED00E00000000868060020CC0F000812
+S3150800028008ED00E0000000086C060020881400084D
S315080002900000002000000020E8020008E80200082C
-S315080002A0900D0008CC0F0008000000200000002078
-S315080002B0900D0008900D0008900D0008900D00089C
-S315080002C0900D0008900D0008900D0008900D00088C
-S315080002D0CC0F000800000020E8040020E8040020F5
-S30D080002E068050020E902000888
-S315080002E803B5002300930193444B1A6842F00102B0
-S315080002F81A605968424A0A405A601A6822F0847293
-S3150800030822F480321A601A6822F480221A605A681F
-S3150800031822F4FE025A604FF41F029A601A6842F4E1
-S3150800032880321A6040F2DC52196801F400310191F2
-S31508000338009901310091019911B900999142F3D1B7
-S315080003482E4B1B68980303D42E486F2100F06CFBCC
-S315080003582D4B1A6842F010021A601A6822F0030236
-S315080003681A601A6842F002021A60A3F580535A689E
-S315080003785A605A6842F400525A605A6842F48062CF
-S315080003885A605A6822F47C125A605A6842F4E8128B
-S315080003985A601A6842F080721A601968174A890101
-S315080003A8FBD5536823F003035360536843F00203ED
-S315080003B853605168114B01F00C010829F9D1DA6923
-S315080003C842F40032DA619A6942F005029A61A3F5A5
-S315080003D884331A6822F470621A601A6842F4306222
-S315080003E81A601A6822F470421A601A6842F480423F
-S315080003F81A6000F049FB00F052FBFCE700100240C7
-S315080004080000FFF8900D00080020024001483C2132
-S3150800041800F00ABBF70D000800B500F027F830B160
-S31508000428044B4FF400521A60034B1B6898475DF853
-S3150800043804FB00BF08ED00E00420000870B50C4670
-S3150800044895B2064607E014F8013B013D06F8013B5C
-S3150800045800F065FBADB2002DF5D170BDFFF7B9BE4A
-S3150800046800F0ACB900F0B6B900F0DAB900F076BA1F
-S3150800047800B500F09DFA18B15DF804EB00F0BABAB9
-S315080004885DF804FB054B064900221A6059600521E8
-S315080004989A601960034B1A80704700BF10E000E0A5
-S315080004A83F19010000000020014B00221A6070471E
-S315080004B810E000E0044B1B68DB0303D5034B1A88DE
-S315080004C801321A80704700BF10E000E000000020E3
-S315080004D800B5FFF7EFFF024B18885DF804FB00BF6D
-S315080004E800000020084B00221A819A811A829A82F3
-S315080004F81A8340F271221A819A8992B242F40052FA
-S3150800050842F00C029A817047004400402DE9F041F8
-S31508000518CEB2402E804603D91948882100F084FABD
-S31508000528184C2388180648BFA68002D405E000F0B0
-S31508000538F6FA23881906FAD503E011488B2100F044
-S3150800054873FA104D00242F4614E000F0E8FA2A88BA
-S3150800055818F80430120648BFAB8002D405E000F04C
-S31508000568DEFA3B881B06FAD503E00548932100F016
-S315080005785BFA0134A3B2B342E7D3BDE8F08100BF02
-S31508000588890E00080044004070B5164C164B2278B0
-S3150800059862B9188810F0200022D09988134B1046A3
-S315080005A8197001232370124B1A7070BD1988104AE6
-S315080005B811F02001157810D00C499E884B195E70E9
-S315080005C86B1CDBB213700A789A4208D10131FFF71F
-S315080005D835FF00232370012070BD084670BD002032
-S315080005E870BD00BF43000020004400400200002000
-S315080005F844000020024B1A6942F080021A617047CB
-S315080006080020024070B50C4D0646002400F087FA13
-S315080006182B689E4209D36A689B189E4205D2064BE8
-S315080006280C2202FB0434207A70BD01340C350F2CD9
-S31508000638ECD1FF2070BD00BF100F00082DE9F0436C
-S3150800064804460068FFF7DEFFFF283ED0214F224BFD
-S315080006587B6003F188337B603423FB60FD6815F003
-S31508000668010502D0FFF7C6FF2FE03B69B94643F0FC
-S3150800067801033B612A1DA6582368B2B205EB030895
-S31508000688EA5201E000F04BFAFB68DB07FAD4330CB0
-S31508000698A8F8023001E000F042FAD9F80C3013F055
-S315080006A80103F8D1D8F80020B24205D10435B5F5CA
-S315080006B8007FDFD1012400E01C46064B1A6922F0A8
-S315080006C801021A61FFF796FF00E000242046BDE8FC
-S315080006D8F08300BF0020024023016745114B30B55F
-S315080006E8984204460D4606D00F4A914205D0FFF7B0
-S315080006F8A5FF18B910E00D4C00E01C46EB050DD116
-S315080007082368AB420BD0204640F8045B29464FF4D1
-S315080007180072FFF793FE02E0044600E00024204634
-S3150800072830BD00BF48000020002000084C02002009
-S315080007382DE9F0431FFA83F8036821F4FE7701339D
-S3150800074804460D46164627F0030706D140F8047BEB
-S3150800075839464FF40072FFF771FE2368BB4205D08D
-S3150800076820463946FFF7BAFF044610B3236840F215
-S31508000778FF19ED1A0435651907F5007700F0CFF962
-S31508000788231DEB1A4B4506D920463946FFF7A6FF1F
-S31508000798044680B1051D16F8013B08F1FF381FFA13
-S315080007A888F805F8013BB8F1000FE7D10120BDE844
-S315080007B8F083BDE8F083BDE8F0830000034A4FF0F4
-S315080007C8FF331360024A1360704700BF4C020020CB
-S315080007D84800002070B504460E461546FFF712FF76
-S315080007E8FF2815D0601E8019FFF70CFFFF280FD0C9
-S315080007F824F4FE73074A23F0030393420CBF064802
-S315080008080648B3B221462A46BDE87040FFF790BFAE
-S31508000818002070BD00200008480000204C02002077
-S315080008282DE9F0410E460446FFF7ECFE013C054665
-S31508000838A019FFF7E7FEA5F1FF014C4244EB0104B6
-S31508000848FF2808BF44F001040646002C7DD18542DE
-S3150800085878D8002D73D00F2874D83D4B3D4A5A6076
-S3150800086802F188325A603422DA60DA6812F0010234
-S3150800087802D0FFF7BFFE65E01969374F41F002015C
-S315080008881961B846144600F04AF998F80830AB4298
-S3150800089804D10C235C43304B1C5906E001340F2C59
-S315080008A808F10C08EFD14FF0FF34DFF8AC800025CB
-S315080008B800F035F998F80830B34205D10C235D43A2
-S315080008C8254B53F8058006E001350F2D08F10C086D
-S315080008D8EED14FF0FF38002500F021F93B7AB342F4
-S315080008E805D11D4B0C2202FB05356B6804E0013562
-S315080008F80C370F2DF0D10023C4EB08089844C8F329
-S315080009088F280026124D0EE06C612B6943F04003D0
-S315080009182B6101E000F003F9EB68DA07FAD401362F
-S31508000928B6B204F580644645094BEDD31A6922F038
-S3150800093802021A61FFF75EFE0120BDE8F08128462B
-S31508000948BDE8F0812046BDE8F0810020BDE8F081C9
-S315080009580020024023016745100F00080D4B186850
-S31508000968043B1B68C0180C4B1B68C0180B4B1B684C
-S31508000978C0180B4B1B68C0180A4B1B68C0180A4BD3
-S315080009881B68C018094B1B68C018D0F1010038BF8E
-S315080009980020704704200008082000080C200008DA
-S315080009A81020000814200008182000085021000804
-S315080009B80E4B11B55A689C68A418DA68A4181A69FF
-S315080009C8A4185A69A4189A69DB69A418E418644231
-S315080009D80094FFF7C3FF844205D004216A460448F9
-S315080009E8FFF7F8FE00E0012018BD00BF4800002008
-S315080009F8502100080A4800B50368013302D0FFF7FA
-S31508000A081DFE58B107480368013306D0FFF716FEDE
-S31508000A18003018BF01205DF804FB01205DF804FBCF
-S31508000A28480000204C020020034B00B51860034B11
-S31508000A38196000F074F8FCE75004002054040020FC
-S31508000A4810B500F069F801280FD0084C2378012B57
-S31508000A580BD1FFF73DFD312807D900232370FFF78F
-S31508000A6823FDBDE81040FFF7D7BC10BD5804002089
-S31508000A78044B012200B51A70FFF704FD5DF804EB74
-S31508000A88FFF7DEBF5804002000B500F047F8FFF767
-S31508000A98EFFFFFF7E5FC5DF804EB00F009B800B5D1
-S31508000AA800F03DF800F01AF85DF804EBFFF7C8BF48
-S31508000AB801B5FF238DF8003000238DF8013000F0CA
-S31508000AC839F8FFF70FFD044B1B78012B02D168464E
-S31508000AD800F04EF808BD00BF5904002000B50648C6
-S31508000AE8FFF752FD012804D103485DF804EB00F02E
-S31508000AF83FB85DF804FB00BF5A04002000B5C9B228
-S31508000B08FFF704FD5DF804EB00F02AB8014B012253
-S31508000B181A7070475904002000F01AB870477047D1
-S31508000B28034BFE22DA7002221871A3F84420704794
-S31508000B389C040020054B00221A709A6483F8432007
-S31508000B48A3F844209A705A70704700BF9C04002086
-S31508000B58024B1878003018BF012070479C04002003
-S31508000B68024B002283F84320704700BF9C040020EC
-S31508000B7870B503780546FF2B784C0FD1E370102320
-S31508000B88012200212371402322706272A2726170C9
-S31508000B986171A371E371217208227DE02678012E1E
-S31508000BA840F0DB80F32B40D011D8CF2B00F0B7806C
-S31508000BB805D8C92B77D0CC2B40F0BA80B6E0D12B14
-S31508000BC800F0A7807CD3D22B40F0B28093E0FA2BB2
-S31508000BD847D006D8F52B0CD011D3F62B40F0A880B1
-S31508000BE81FE0FD2B4ED0FE2B59D0FC2B40F0A080E1
-S31508000BF846E042783F2A66D8201DA16C06E043786D
-S31508000C083F2B60D84168A1644278201DFFF716FC7F
-S31508000C18FF23E3706A78A36CD318A3646B7801334F
-S31508000C2874E0FF23E370436848E0FF23E37000237A
-S31508000C38A06C69681A4603E01C5C01331219D2B223
-S31508000C488B42F9D1454B0021DA71120E9A720122AC
-S31508000C581A7108221972597259719971A3F84420A0
-S31508000C6869E0FF23E3703E4B0722A3640023237140
-S31508000C786371A37123726372A372E271082345E054
-S31508000C88002056E0FF236278E3700023627123711F
-S31508000C98A371E37123720622A4F844204BE00023CB
-S31508000CA8237063703DE0421C3F21A06CFFF7DAFB16
-S31508000CB800283BD0FF23E370A36C3F33A36432E0DC
-S31508000CC843783E2B01D9222033E0FF23E370A4F8AA
-S31508000CD84460417821B9FFF7CBFB00282BD125E0E2
-S31508000CE81E4C821CA06CFFF7BDFBF8B16A78A36C92
-S31508000CF8D318A3641FE0FF23E3704022002323715F
-S31508000D086371E37123726372A2710723A4F84430EE
-S31508000D1811E0A06C6968FFF7A7FB10B906E0FFF7B2
-S31508000D289DFBFF23E370A4F8446004E0312000E04B
-S31508000D382020FFF7F5FE094C94F84330012B02D121
-S31508000D481020FFF7EDFEB4F844100648012384F88E
-S31508000D584330BDE87040FFF7D1BE70BD9C04002043
-S31508000D68C40F00089F04002000B503B400F008F873
-S31508000D7803BC02B4694609BE00F004F801BC00BD0C
-S30D08000D88704700BF704700BF69
-S31508000D90443A2F7573722F6665617365722F736F88
-S31508000DA06674776172652F4F70656E424C542F5486
-S31508000DB061726765742F44656D6F2F41524D434DBF
-S31508000DC0335F53544D33325F4F6C696D65785F53AB
-S31508000DD0544D3332503130335F43726F7373776FCC
-S31508000DE0726B732F426F6F742F6964652F2E2E2FC7
-S31508000DF06D61696E2E6300443A2F7573722F6665AE
-S31508000E00617365722F736F6674776172652F4F70A1
-S31508000E10656E424C542F5461726765742F44656D34
-S31508000E206F2F41524D434D335F53544D33325F4F0D
-S31508000E306C696D65785F53544D3332503130335F8A
-S31508000E4043726F7373776F726B732F426F6F742F62
-S31508000E506964652F2E2E2F2E2E2F2E2E2F2E2E2FF7
-S31508000E60536F757263652F41524D434D335F53542B
-S31508000E704D33322F43726F7373776F726B732F769E
-S31508000E806563746F72732E6300443A2F7573722FFD
-S31508000E906665617365722F736F6674776172652F05
-S31508000EA04F70656E424C542F5461726765742F44B7
-S31508000EB0656D6F2F41524D434D335F53544D333259
-S31508000EC05F4F6C696D65785F53544D3332503130DE
-S31508000ED0335F43726F7373776F726B732F426F6FE3
-S31508000EE0742F6964652F2E2E2F2E2E2F2E2E2F2E21
-S31508000EF02E2F536F757263652F41524D434D335FE5
-S31508000F0053544D33322F756172742E6300000000FE
-S31508000F100020000800200000010000000040000832
-S31508000F200020000002000000006000080020000009
-S31508000F3003000000008000080020000004000000F4
-S31508000F4000A00008002000000500000000C00008FE
-S31508000F50002000000600000000E000080020000055
-S31508000F60070000000000010800200000080000003B
-S31508000F7000200108002000000900000000400108C8
-S31508000F80002000000A0000000060010800200000A0
-S31508000F900B00000000800108002000000C00000083
-S31508000FA000A00108002000000D00000000C0010894
-S31508000FB0002000000E00000000E0010800200000EC
-S31108000FC00F0000004F70656E424C540094
+S315080002A04C120008881400080000002000000020F6
+S315080002B04C1200084C1200084C1200084C12000898
+S315080002C04C1200084C1200084C1200084C12000888
+S315080002D08814000800000020EC040020EC0400202C
+S30D080002E06C050020E902000884
+S315080002E800B582B04FF00003009301934FF4805392
+S315080002F8C4F202031A6842F001021A6059684FF0FC
+S315080003080002CFF6FF020A405A601A6822F0847281
+S3150800031822F480321A601A6822F480221A605A680F
+S3150800032822F4FE025A604FF41F029A601A6842F4D1
+S3150800033880321A604FF48053C4F2020340F2DC524A
+S31508000348196801F400310191009901F10101009140
+S31508000358019911B900999142F2D14FF48053C4F228
+S3150800036802031B6813F4003F04D138484FF06F01A5
+S3150800037800F0A4FC4FF40053C4F202031A6842F0D2
+S3150800038810021A601A6822F003021A601A6842F004
+S3150800039802021A604FF48053C4F202035A685A607C
+S315080003A85A6842F400525A605A6842F480625A609F
+S315080003B85A6822F47C125A605A6842F4E8125A605B
+S315080003C81A6842F080721A604FF48053C4F2020326
+S315080003D81A6812F0007FFBD04FF48053C4F2020368
+S315080003E85A6822F003025A605A6842F002025A60B2
+S315080003F84FF48053C4F202035A6802F00C02082A22
+S31508000408FAD14FF48053C4F20203DA6942F400328F
+S31508000418DA619A6942F005029A614FF40063C4F2F8
+S3150800042801031A6822F470621A601A6842F4306284
+S315080004381A601A6822F470421A601A6842F48042EE
+S315080004481A6000F075FC00F07FFCFCE74C12000807
+S3150800045800B541F2B420C0F600004FF03C0100F0A8
+S315080004682DFC5DF804FB00BF00B500F03DF860B14F
+S315080004784EF60853CEF200034FF400521A6042F2C1
+S315080004880403C0F600031B6898475DF804FB00BF21
+S3150800049870B50E4692B272B1044600F1010002F137
+S315080004A8FF3292B2851816F8013B04F8013B00F0B2
+S315080004B899FCAC42F7D170BD00B5FFF78AFE5DF826
+S315080004C804FB00BF00B500F095FA5DF804FB00BF11
+S315080004D800B500F09DFA5DF804FB00BF00B500F012
+S315080004E8C3FA5DF804FB00BF00B500F05FFB5DF8D2
+S315080004F804FB00BF00B500F08DFB18B100F0B2FB95
+S315080005085DF804FB4FF000005DF804FB4EF210039B
+S31508000518CEF200034FF000021A6070474EF210033D
+S31508000528CEF200031B6813F4803F1FBF40F2000396
+S31508000538C2F200031A88013218BF1A80704700BF32
+S3150800054840F20003C2F200031880704700B5FFF7AF
+S31508000558DDFF4EF21003CEF2000341F63F12C0F259
+S3150800056801025A604FF0000098604FF005021A60C1
+S31508000578FFF7E6FF5DF804FB00B5FFF7CFFF40F28B
+S315080005880003C2F2000318885DF804FB4FF4884399
+S31508000598C4F200031B8813F0200F1FBF4FF48843CB
+S315080005A8C4F200039B88037014BF0120002070471B
+S315080005B810B5C0B24FF48843C4F200031B8813F081
+S315080005C8800F15D04FF48843C4F2000398801B881F
+S315080005D813F0800F0FD14FF48844C4F2000400F0DA
+S315080005E801FC238813F0800FF9D04FF0010010BDE5
+S315080005F84FF0000010BD4FF0010010BD4FF48843BE
+S31508000608C4F200034FF000021A819A811A829A826C
+S315080006181A8340F271221A819A8992B242F40052D8
+S3150800062842F00C029A8170472DE9F0410546CCB292
+S31508000638402C07D941F24830C0F600004FF088012F
+S3150800064800F03CFB2046FFF7B3FF012807D041F22C
+S315080006584830C0F600004FF08B0100F02FFB264605
+S31508000668BCB14FF0000441F24837C0F600074FF016
+S31508000678930800F0B7FB285DFFF79AFF012803D017
+S315080006883846414600F01AFB04F10104A3B2B34206
+S31508000698EFD3BDE8F08100BF30B5054640F2480300
+S315080006A8C2F200031B78B3B940F20400C2F2000094
+S315080006B8FFF76CFF01283BD140F24803C2F200035A
+S315080006C84FF001021A7040F24903C2F200034FF0D4
+S315080006D80000187030BD40F24903C2F200031C78C6
+S315080006E840F20403C2F2000304F101001818FFF7E8
+S315080006F84DFF01281FD104F10104E2B240F2490373
+S31508000708C2F200031A7040F20403C2F200031B780F
+S31508000718934213D128460B49FFF7BAFE40F248031D
+S31508000728C2F200034FF000021A704FF0010030BD04
+S315080007384FF0000030BD4FF0000030BD4FF000000C
+S3150800074830BD00BF050000204FF40053C4F2020371
+S3150800075840F22312C4F267525A6048F6AB12CCF636
+S31508000768EF525A604FF03402DA6070474FF400537C
+S31508000778C4F202031A6942F080021A61704700BF80
+S3150800078870B5064641F2CC35C0F600054FF00004B0
+S3150800079800F028FB2B68B3420DD869685B189E429F
+S315080007A809D241F2CC33C0F6000304EB440203EB4A
+S315080007B88203187A70BD04F1010405F10C050F2CA3
+S315080007C8E6D14FF0FF0070BD2DE9F04107460068F5
+S315080007D8FFF7D6FFFF2808BF002454D0FFF7B4FF59
+S315080007E84FF40053C4F20203DB6813F0010F04D078
+S315080007F8FFF7BCFF4FF0000445E04FF40053C4F27E
+S3150800080802031A6942F001021A614FF000054FF413
+S315080008180054C4F202043B6805EB030805F1040218
+S31508000828BE58B2B2EA52E36813F0010F05D000F0D9
+S31508000838D9FAE36813F0010FF9D14FEA1643A8F875
+S315080008480230E36813F0010F05D000F0CBFAE3682D
+S3150800085813F0010FF9D1D8F80030B34207D105F1E2
+S315080008680405B5F5007FD6D14FF0010401E04FF035
+S3150800087800044FF40053C4F202031A6922F0010275
+S315080008881A61FFF773FF2046BDE8F08170B5C6B256
+S3150800089841F2CC35C0F600054FF0000400F0A2FA84
+S315080008A82B7AB34208D141F2CC33C0F6000304EBE5
+S315080008B8440253F8220070BD04F1010405F10C0541
+S315080008C80F2CEBD14FF0FF3070BD00BF00B54FEAD3
+S315080008D8C1534FEAD35363B903688B420DD040F826
+S315080008E8041B4FF40072FFF7D3FD4FF001005DF8C3
+S315080008F804FB4FF000005DF804FB4FF001005DF8BB
+S3150800090804FB00BF30B504460D4640F24C03C2F25C
+S315080009180003984209D04FF40053C0F600039942E1
+S3150800092808D0FFF751FF48B910E040F25024C2F248
+S31508000938000403E040F24C04C2F2000420462946AB
+S31508000948FFF7C4FF002808BF002401E04FF00004A1
+S31508000958204630BD2DE9F04305460C4616469FB29B
+S315080009684FEA51294FEA49290368B3F1FF3F04D1F1
+S315080009784946FFF7ABFF002830D02B684B4505D012
+S3150800098828464946FFF7BEFF054658B32B68E41ABA
+S3150800099804F104042C1906F1010807F1FF37BFB260
+S315080009A8B84440F2FF1709F5007900F01BFA05F17B
+S315080009B80403E31ABB4207D928464946FFF7A2FFAC
+S315080009C8054698B100F1040416F8013B04F8013B02
+S315080009D84645EAD14FF00100BDE8F0834FF0000024
+S315080009E8BDE8F0834FF00000BDE8F0834FF0000043
+S315080009F8BDE8F08340F25023C2F200034FF0FF32FD
+S31508000A081A6040F24C03C2F200031A60704700BF2E
+S31508000A1870B504460D461646FFF7B2FEFF281DD0E8
+S31508000A2804F1FF304019FFF7ABFEFF2819D04FEA4B
+S31508000A3854224FF40053C0F60003B3EB422F07BF06
+S31508000A4840F24C00C2F2000040F25020C2F2000008
+S31508000A58ABB221463246FFF77DFF70BD4FF0000066
+S31508000A6870BD4FF0000070BD2DE9F04104460E46F2
+S31508000A78FFF786FE054604F1FF34A019FFF780FE46
+S31508000A8804460646FF2814BF00230123FF2D08BF86
+S31508000A9843F00103002B40F08480854275D8002D69
+S31508000AA877D00F2879D8FFF74FFE4FF40053C4F2D2
+S31508000AB80203DB6813F0010F05D0FFF757FE4FF066
+S31508000AC80000BDE8F0814FF40053C4F202031A6926
+S31508000AD842F002021A612846FFF7D8FE0746204662
+S31508000AE8FFF7D4FE804641F2CC35C0F600054FF034
+S31508000AF8000400F077F92B7AB34209D141F2CC33D6
+S31508000B08C0F6000304EB440203EB82035B6807E0C4
+S31508000B1804F1010405F10C050F2CEAD14FF0000386
+S31508000B28C7EB08084344C3F38F2303B303F1FF3322
+S31508000B389EB206F101064FEA86264FF000054FF4E5
+S31508000B480054C4F20204EB196361236943F04003B5
+S31508000B582361E36813F0010F05D000F043F9E36851
+S31508000B6813F0010FF9D105F58065B542EBD14FF4BD
+S31508000B780053C4F202031A6922F002021A61FFF747
+S31508000B88F5FD4FF00100BDE8F0814FF00000BDE823
+S31508000B98F0814FF00000BDE8F0814FF00000BDE895
+S31508000BA8F0814FF00000BDE8F08100BF42F2040270
+S31508000BB8C0F600024FF40053C0F6000310681B681D
+S31508000BC8C01842F20803C0F600031B68C01842F2B0
+S31508000BD80C03C0F600031B68C01842F21003C0F6DF
+S31508000BE800031B68C01842F21403C0F600031B680A
+S31508000BF8C01842F21803C0F600031B68C01842F270
+S31508000C085013C0F600031B68C018D0F1010038BF9E
+S31508000C180020704710B581B040F24C03C2F20003B9
+S31508000C289C685A68A418DA68A4181A69A4185A692C
+S31508000C38A4189A69A418DB69E418C4F10004009496
+S31508000C48FFF7B4FF844208BF012008D042F25010CB
+S31508000C58C0F600004FF004016A46FFF7D9FE01B056
+S31508000C6810BD00BF00B540F24C03C2F200031B6872
+S31508000C78B3F1FF3F06D040F24C00C2F20000FFF77E
+S31508000C88A3FD90B140F25023C2F200031B68B3F1EA
+S31508000C98FF3F0ED040F25020C2F20000FFF794FD45
+S31508000CA8003018BF01205DF804FB4FF000005DF81E
+S31508000CB804FB4FF001005DF804FB00BF00B540F2E5
+S31508000CC85443C2F20003186040F25843C2F20003C4
+S31508000CD8196000F087F8FCE700B500F07BF80128F2
+S31508000CE815D040F25C43C2F200031B78012B0ED1E3
+S31508000CF8FFF742FC31280AD940F25C43C2F20003E6
+S31508000D084FF000021A70FFF701FCFFF7ADFB5DF81C
+S31508000D1804FB00BF00B540F25C43C2F200034FF083
+S31508000D2801021A70FFF712FCFFF7D6FF5DF804FBFD
+S31508000D3800B500F055F8FFF7EDFFFFF7C3FB00F025
+S31508000D480DF85DF804FB00BF00B500F04BF800F09D
+S31508000D581FF8FFF7C1FF5DF804FB00BF00B581B0B7
+S31508000D684FF0FF038DF800304FF000038DF801307F
+S31508000D7800F050F8FFF742FC40F25D43C2F2000368
+S31508000D881B78012B02D1684600F068F801B000BD4F
+S31508000D9800B540F26040C2F20000FFF77DFC01286A
+S31508000DA805D140F26040C2F2000000F057F85DF83D
+S31508000DB804FB00BF00B5C9B2FFF736FC00F044F8DB
+S31508000DC85DF804FB40F25D43C2F200034FF00102EE
+S31508000DD81A70704700B500F02DF85DF804FB00BFDF
+S31508000DE8704700BF704700BF40F2A043C2F2000335
+S31508000DF84FF000025A70704740F2A043C2F200034F
+S31508000E084FF0FE02DA7018714FF00202A3F8442078
+S31508000E18704700BF40F2A043C2F200034FF0000239
+S31508000E281A709A6483F84320A3F844209A705A7073
+S31508000E38704700BF40F2A043C2F20003187800309A
+S31508000E4818BF0120704700BF40F2A043C2F2000352
+S31508000E584FF0000283F84320704700BF30B50446B8
+S31508000E680278FF2A1DD1FFF7BFFF40F2A043C2F25E
+S31508000E7800034FF001021A704FF0FF01D9704FF0C6
+S31508000E88100119714FF0000159714FF0400098711F
+S31508000E98D87119725A729A724FF00802A3F8442048
+S31508000EA8A4E140F2A043C2F200031B78012B40F0EC
+S31508000EB8B781A2F1C902352A00F29481DFE812F057
+S31508000EC8F800920192018D01920192017F011901A0
+S31508000ED865014F01920192019201920192019201D4
+S31508000EE89201920192019201920192019201920154
+S31508000EF89201920192019201920192019201920144
+S31508000F089201920192019201920192019201920133
+S31508000F1892019201820054003600740092019201EF
+S31508000F289201B2009201CE00D300E70042783F2A28
+S31508000F3804D94FF02200FFF75FFF57E140F2A045BA
+S31508000F48C2F2000505F10400A96CFFF7A1FA4FF0F3
+S31508000F58FF03EB706278AB6CD318AB64637803F164
+S31508000F680103A5F8443041E143783F2B04D94FF0F3
+S31508000F782200FFF741FF39E1416840F2A045C2F275
+S31508000F880005A96405F104006278FFF781FA4FF0B5
+S31508000F98FF03EB706278AB6CD318AB64637803F124
+S31508000FA80103A5F8443021E140F2A043C2F2000348
+S31508000FB84FF0FF02DA7042689A644FF00102A3F80C
+S31508000FC8442013E140F2A043C2F200034FF0FF02A7
+S31508000FD8DA70996C43684FF000023BB14FF0000293
+S31508000FE811F8010B1218D2B2013BF9D140F2A0430D
+S31508000FF8C2F200034FF00001DA714FEA1220C0B2BC
+S3150800100818724FEA1240C0B258724FEA12629A72C0
+S315080010184FF001021A71597199714FF00802A3F835
+S315080010284420E3E040F2A043C2F200034FF0FF0277
+S31508001038DA7041F28042C0F600029A644FF0000264
+S315080010481A715A719A714FF00701D9711A725A7240
+S315080010589A724FF00802A3F84420C7E04FF0000040
+S31508001068FFF7CAFEC2E040F2A043C2F200034FF0FF
+S31508001078FF02DA704FF000021A71597859719A719D
+S31508001088DA711A724FF00602A3F84420AEE040F26D
+S31508001098A044C2F200044FF000032370FFF7A4FE31
+S315080010A84FF0FF03E3704FF00103A4F844309DE0C6
+S315080010B840F2A043C2F20003986C04F101024FF013
+S315080010C83F01FFF705FA20B94FF03100FFF794FE04
+S315080010D88CE040F2A043C2F200034FF0FF02DA7038
+S315080010E89A6C02F13F029A644FF00102A3F8442071
+S315080010F87CE043783E2B04D94FF02200FFF77CFEAC
+S3150800110874E040F2A043C2F200034FF0FF02DA701F
+S315080011184FF00102A3F84420417841B9FFF7EAF9EC
+S31508001128002863D14FF03100FFF766FE5EE040F213
+S31508001138A043C2F20003986C04F10202FFF7C8F94B
+S3150800114820B94FF03100FFF757FE4FE040F2A043B1
+S31508001158C2F2000361789A6C8A189A6446E040F2EB
+S31508001168A043C2F200034FF0FF02DA704FF0000204
+S315080011781A715A714FF040019971DA711A725A72D6
+S315080011884FF00702A3F8442030E040F2A043C2F229
+S315080011980003986C6168FFF7A1F920B94FF0310090
+S315080011A8FFF72AFE22E040F2A043C2F200034FF0FE
+S315080011B8FF02DA704FF00102A3F8442016E0FFF7A1
+S315080011C87BF940F2A043C2F200034FF0FF02DA703F
+S315080011D84FF00102A3F8442008E04FF03100FFF76A
+S315080011E80BFE03E04FF02000FFF706FE40F2A0438F
+S315080011F8C2F2000393F84330012B03D14FF01000D5
+S31508001208FFF7FAFD40F2A043C2F200034FF00102CD
+S3150800121883F8432003F10300B3F84410FFF7CAFD27
+S3150800122830BD00BF00B503B400F008F803BC02B42B
+S31508001238694609BE00F004F801BC00BD704700BF46
+S30908001248704700BF1E
+S3150800124C443A2F7573722F6665617365722F736FC7
+S3150800125C6674776172652F4F70656E424C542F54C5
+S3150800126C61726765742F44656D6F2F41524D434DFE
+S3150800127C335F53544D33325F4F6C696D65785F53EA
+S3150800128C544D3332503130335F43726F7373776F0B
+S3150800129C726B732F426F6F742F6964652F2E2E2F06
+S315080012AC6D61696E2E630000443A2F7573722F6652
+S315080012BC65617365722F736F6674776172652F4FEC
+S315080012CC70656E424C542F5461726765742F446571
+S315080012DC6D6F2F41524D434D335F53544D33325F2F
+S315080012EC4F6C696D65785F53544D333250313033DA
+S315080012FC5F43726F7373776F726B732F426F6F7472
+S3150800130C2F6964652F2E2E2F2E2E2F2E2E2F2E2E36
+S3150800131C2F536F757263652F41524D434D335F538F
+S3150800132C544D33322F43726F7373776F726B732FFF
+S3150800133C766563746F72732E63000000443A2F75DA
+S3150800134C73722F6665617365722F736F6674776136
+S3150800135C72652F4F70656E424C542F5461726765D7
+S3150800136C742F44656D6F2F41524D434D335F535463
+S3150800137C4D33325F4F6C696D65785F53544D33321C
+S3150800138C503130335F43726F7373776F726B732F91
+S3150800139C426F6F742F6964652F2E2E2F2E2E2F2ECB
+S315080013AC2E2F2E2E2F536F757263652F41524D4378
+S315080013BC4D335F53544D33322F756172742E63005F
+S315080013CC0020000800200000010000000040000872
+S315080013DC0020000002000000006000080020000049
+S315080013EC0300000000800008002000000400000034
+S315080013FC00A00008002000000500000000C000083E
+S3150800140C002000000600000000E000080020000094
+S3150800141C070000000000010800200000080000007A
+S3150800142C0020010800200000090000000040010807
+S3150800143C002000000A0000000060010800200000DF
+S3150800144C0B00000000800108002000000C000000C2
+S3150800145C00A00108002000000D00000000C00108D3
+S3150800146C002000000E00000000E00108002000002B
+S3110800147C0F0000004F70656E424C5400D3
S705080001DB16
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/hooks.c b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/hooks.c
index 5b31c733..85f88c6e 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/hooks.c
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/hooks.c
@@ -97,20 +97,20 @@ void NvmInitHook(void)
** PARAMETER: addr start address
** len length in bytes
** data pointer to the data buffer.
-** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is
-** not within the supported memory range, or BTL_NVM_ERROR is the write
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the write
** operation failed.
** DESCRIPTION: Callback that gets called at the start of the NVM driver write
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
-** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
+** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
** been written yet.
**
**
****************************************************************************************/
blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
{
- return BTL_NVM_NOT_IN_RANGE;
+ return BLT_NVM_NOT_IN_RANGE;
} /*** end of NvmWriteHook ***/
@@ -118,19 +118,19 @@ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
** NAME: NvmEraseHook
** PARAMETER: addr start address
** len length in bytes
-** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is
-** not within the supported memory range, or BTL_NVM_ERROR is the erase
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the erase
** operation failed.
** DESCRIPTION: Callback that gets called at the start of the NVM driver erase
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
-** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the memory
+** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory
** hasn't been erased yet.
**
****************************************************************************************/
-blt_bool NvmEraseHook(blt_addr addr, blt_int32u len)
+blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len)
{
- return BTL_NVM_NOT_IN_RANGE;
+ return BLT_NVM_NOT_IN_RANGE;
} /*** end of NvmEraseHook ***/
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp
index 4da11841..014e9b76 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzp
@@ -1,7 +1,7 @@
-
+
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs
index 4239ffbf..18ba1cfe 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_Crossworks/Boot/ide/stm32f103_crossworks.hzs
@@ -60,7 +60,7 @@
-
+
-
+
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.elf b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.elf
index 96038d70..f8e0bc03 100644
Binary files a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.elf and b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.elf differ
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.map b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.map
index f15854ba..d0f4310f 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.map
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.map
@@ -7,42 +7,42 @@ start address 0x08000000
Program Header:
LOAD off 0x00008000 vaddr 0x08000000 paddr 0x08000000 align 2**15
- filesz 0x00000f87 memsz 0x00000f87 flags r-x
- LOAD off 0x00010000 vaddr 0x20000000 paddr 0x08000f87 align 2**15
+ filesz 0x000014c8 memsz 0x000014c8 flags r-x
+ LOAD off 0x00010000 vaddr 0x20000000 paddr 0x080014c8 align 2**15
filesz 0x00000014 memsz 0x00000600 flags rw-
private flags = 5000002: [Version5 EABI] [has entry point]
Sections:
Idx Name Size VMA LMA File off Algn
- 0 .text 00000f87 08000000 08000000 00008000 2**2
+ 0 .text 000014c8 08000000 08000000 00008000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
- 1 .data 00000014 20000000 08000f87 00010000 2**2
+ 1 .data 00000014 20000000 080014c8 00010000 2**2
CONTENTS, ALLOC, LOAD, DATA
- 2 .bss 000005ec 20000014 08000f9b 00010014 2**2
+ 2 .bss 000005ec 20000014 080014dc 00010014 2**2
ALLOC
- 3 .debug_abbrev 00000ed3 00000000 00000000 00010014 2**0
+ 3 .debug_abbrev 00000e79 00000000 00000000 00010014 2**0
CONTENTS, READONLY, DEBUGGING
- 4 .debug_info 000026dd 00000000 00000000 00010ee7 2**0
+ 4 .debug_info 0000273b 00000000 00000000 00010e8d 2**0
CONTENTS, READONLY, DEBUGGING
- 5 .debug_line 00001045 00000000 00000000 000135c4 2**0
+ 5 .debug_line 00001000 00000000 00000000 000135c8 2**0
CONTENTS, READONLY, DEBUGGING
- 6 .debug_pubtypes 00000471 00000000 00000000 00014609 2**0
+ 6 .debug_pubtypes 00000471 00000000 00000000 000145c8 2**0
CONTENTS, READONLY, DEBUGGING
- 7 .debug_str 00000cfa 00000000 00000000 00014a7a 2**0
+ 7 .debug_str 00000cfa 00000000 00000000 00014a39 2**0
CONTENTS, READONLY, DEBUGGING
- 8 .comment 0000002a 00000000 00000000 00015774 2**0
+ 8 .comment 0000002a 00000000 00000000 00015733 2**0
CONTENTS, READONLY
- 9 .ARM.attributes 00000031 00000000 00000000 0001579e 2**0
+ 9 .ARM.attributes 00000031 00000000 00000000 0001575d 2**0
CONTENTS, READONLY
- 10 .debug_loc 00000f72 00000000 00000000 000157cf 2**0
+ 10 .debug_loc 00001163 00000000 00000000 0001578e 2**0
CONTENTS, READONLY, DEBUGGING
- 11 .debug_pubnames 00000593 00000000 00000000 00016741 2**0
+ 11 .debug_pubnames 00000593 00000000 00000000 000168f1 2**0
CONTENTS, READONLY, DEBUGGING
- 12 .debug_aranges 000003f8 00000000 00000000 00016cd4 2**0
+ 12 .debug_aranges 000003f8 00000000 00000000 00016e84 2**0
CONTENTS, READONLY, DEBUGGING
- 13 .debug_ranges 00000328 00000000 00000000 000170cc 2**0
+ 13 .debug_ranges 000002f8 00000000 00000000 0001727c 2**0
CONTENTS, READONLY, DEBUGGING
- 14 .debug_frame 000007c0 00000000 00000000 000173f4 2**2
+ 14 .debug_frame 0000080c 00000000 00000000 00017574 2**2
CONTENTS, READONLY, DEBUGGING
SYMBOL TABLE:
08000000 l d .text 00000000 .text
@@ -62,8 +62,8 @@ SYMBOL TABLE:
00000000 l d .debug_frame 00000000 .debug_frame
00000000 l df *ABS* 00000000 vectors.c
00000000 l df *ABS* 00000000 cstart.c
-0800017a l F .text 00000000 zero_loop2
-08000e52 l F .text 00000000 zero_loop
+0800019e l F .text 00000000 zero_loop2
+0800139c l F .text 00000000 zero_loop
00000000 l df *ABS* 00000000 hooks.c
00000000 l df *ABS* 00000000 main.c
00000000 l df *ABS* 00000000 core_cm3.c
@@ -71,11 +71,11 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000 boot.c
00000000 l df *ABS* 00000000 com.c
20000014 l O .bss 00000001 comEntryStateConnect
-20000015 l O .bss 00000040 xcpCtoReqPacket.1371
+20000018 l O .bss 00000040 xcpCtoReqPacket.1371
00000000 l df *ABS* 00000000 xcp.c
-0800056c l F .text 0000000c XcpProtectResources
-08000578 l F .text 00000014 XcpSetCtoError
-08000e7b l O .text 00000008 xcpStationId
+0800069c l F .text 00000010 XcpProtectResources
+080006ac l F .text 0000001a XcpSetCtoError
+080013bc l O .text 00000008 xcpStationId
20000058 l O .bss 0000004c xcpInfo
00000000 l df *ABS* 00000000 backdoor.c
200000a4 l O .bss 00000001 backdoorOpen
@@ -86,103 +86,103 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000 cpu.c
00000000 l df *ABS* 00000000 can.c
00000000 l df *ABS* 00000000 uart.c
-08000858 l F .text 0000001c UartReceiveByte
-08000874 l F .text 0000002c UartTransmitByte
+08000b88 l F .text 00000024 UartReceiveByte
+08000bac l F .text 0000004a UartTransmitByte
200000b0 l O .bss 00000041 xcpCtoReqPacket.1392
-200000f1 l O .bss 00000001 xcpCtoRxLength.1393
-200000f2 l O .bss 00000001 xcpCtoRxInProgress.1394
+200000f4 l O .bss 00000001 xcpCtoRxLength.1393
+200000f5 l O .bss 00000001 xcpCtoRxInProgress.1394
00000000 l df *ABS* 00000000 nvm.c
00000000 l df *ABS* 00000000 timer.c
-200000f4 l O .bss 00000002 millisecond_counter
+200000f6 l O .bss 00000002 millisecond_counter
00000000 l df *ABS* 00000000 flash.c
-08000a0c l F .text 0000001c FlashUnlock
-08000a28 l F .text 00000010 FlashLock
-08000a38 l F .text 00000038 FlashGetSector
-08000a70 l F .text 0000008c FlashWriteBlock
-08000afc l F .text 00000030 FlashGetSectorBaseAddr
-08000b2c l F .text 00000026 FlashInitBlock
-08000b54 l F .text 00000044 FlashSwitchBlock
-08000b98 l F .text 00000080 FlashAddToBlock
-08000ea8 l O .text 000000b4 flashLayout
+08000dec l F .text 00000024 FlashUnlock
+08000e10 l F .text 00000012 FlashLock
+08000e24 l F .text 0000004c FlashGetSector
+08000e70 l F .text 000000c2 FlashWriteBlock
+08000f34 l F .text 0000003e FlashGetSectorBaseAddr
+08000f74 l F .text 00000030 FlashInitBlock
+08000fa4 l F .text 00000050 FlashSwitchBlock
+08000ff4 l F .text 0000009a FlashAddToBlock
+080013e8 l O .text 000000b4 flashLayout
200000f8 l O .bss 00000204 bootBlockInfo
200002fc l O .bss 00000204 blockInfo
-080004f8 g F .text 0000002c ComInit
-08000c30 g F .text 0000004c FlashWrite
-08000312 g F .text 00000006 __set_PRIMASK
-080007fc g F .text 00000018 AssertFailure
-08000e34 g F .text 00000038 reset_handler
-080009b0 g F .text 0000001c TimerUpdate
-080005b8 g F .text 00000010 XcpPacketTransmitted
-08000524 g F .text 0000001c ComTask
-08000550 g F .text 0000000c ComSetConnectEntryState
-08000318 g F .text 00000006 __get_FAULTMASK
-08000330 g F .text 00000004 __REV
-080004d0 g F .text 00000016 BootInit
-080007e0 g F .text 00000018 BackDoorInit
-08000364 g F .text 00000006 __STREXW
-08000352 g F .text 00000006 __LDREXW
-080007fa g F .text 00000002 CopService
-08000f87 g .text 00000000 _etext
-080009a4 g F .text 0000000c TimerReset
+08000614 g F .text 00000034 ComInit
+080010ac g F .text 00000058 FlashWrite
+08000374 g F .text 00000006 __set_PRIMASK
+08000b1c g F .text 0000001c AssertFailure
+08001358 g F .text 00000054 reset_handler
+08000d7c g F .text 00000022 TimerUpdate
+080006fc g F .text 00000012 XcpPacketTransmitted
+08000648 g F .text 00000020 ComTask
+08000678 g F .text 00000010 ComSetConnectEntryState
+0800037c g F .text 00000006 __get_FAULTMASK
+0800039c g F .text 00000004 __REV
+080005f0 g F .text 00000014 BootInit
+08000af8 g F .text 0000001a BackDoorInit
+080003d8 g F .text 00000006 __STREXW
+080003c0 g F .text 00000006 __LDREXW
+08000b18 g F .text 00000002 CopService
+080014c8 g .text 00000000 _etext
+08000d6c g F .text 00000010 TimerReset
20000010 g O .data 00000004 SystemCoreClock
-0800033c g F .text 00000006 __RBIT
-080004e6 g F .text 00000012 BootTask
-08000dac g F .text 00000048 FlashWriteChecksum
-0800031e g F .text 00000006 __set_FAULTMASK
-08000540 g F .text 00000010 ComTransmitPacket
-08000324 g F .text 00000006 __get_CONTROL
-080005a8 g F .text 00000010 XcpIsConnected
-08000980 g F .text 00000004 NvmInit
-08000c18 g F .text 00000018 FlashInit
-080002e4 g F .text 00000008 __get_PSP
+080003a8 g F .text 00000006 __RBIT
+08000604 g F .text 00000010 BootTask
+080012a0 g F .text 00000054 FlashWriteChecksum
+08000384 g F .text 00000006 __set_FAULTMASK
+08000668 g F .text 0000000e ComTransmitPacket
+0800038c g F .text 00000006 __get_CONTROL
+080006e8 g F .text 00000012 XcpIsConnected
+08000d38 g F .text 00000008 NvmInit
+08001090 g F .text 0000001a FlashInit
+0800033c g F .text 00000008 __get_PSP
20000500 g .bss 00000000 _ebss
-080002ec g F .text 00000006 __set_PSP
+08000344 g F .text 00000006 __set_PSP
00000100 g *ABS* 00000000 __STACKSIZE__
-08000e28 g F .text 0000000c UnusedISR
-08000342 g F .text 00000008 __LDREXB
-080008a0 g F .text 00000028 UartInit
-08000988 g F .text 00000004 NvmErase
+08001344 g F .text 00000014 UnusedISR
+080003b0 g F .text 00000008 __LDREXB
+08000bf8 g F .text 0000002c UartInit
+08000d48 g F .text 00000008 NvmErase
20000014 g .bss 00000000 _bss
-0800030c g F .text 00000006 __get_PRIMASK
-080005c8 g F .text 000001e8 XcpPacketReceived
+0800036c g F .text 00000006 __get_PRIMASK
+08000710 g F .text 000003ae XcpPacketReceived
20000000 g O .data 00000010 AHBPrescTable
-08000df4 g F .text 00000034 FlashDone
-08000338 g F .text 00000004 __REVSH
-08000150 g F .text 0000004c EntryFromProg
-0800055c g F .text 0000000c ComIsConnectEntryState
-0800058c g F .text 0000001c XcpInit
-08000c7c g F .text 000000dc FlashErase
-080001b0 g F .text 00000134 main
-0800032a g F .text 00000006 __set_CONTROL
-08000990 g F .text 00000012 NvmDone
-080008c8 g F .text 00000050 UartTransmitPacket
-0800098c g F .text 00000004 NvmVerifyChecksum
-08000834 g F .text 00000020 CpuMemCopy
-080009cc g F .text 0000000c TimerSet
-080002f2 g F .text 00000008 __get_MSP
-0800036c g F .text 000000fc SystemInit
-08000918 g F .text 00000068 UartReceivePacket
-08000334 g F .text 00000004 __REV16
+080012f4 g F .text 00000050 FlashDone
+080003a4 g F .text 00000004 __REVSH
+08000150 g F .text 00000062 EntryFromProg
+08000688 g F .text 0000000c ComIsConnectEntryState
+080006c8 g F .text 0000001e XcpInit
+08001104 g F .text 00000134 FlashErase
+080001c8 g F .text 00000174 main
+08000394 g F .text 00000006 __set_CONTROL
+08000d58 g F .text 00000014 NvmDone
+08000c24 g F .text 0000006e UartTransmitPacket
+08000d50 g F .text 00000008 NvmVerifyChecksum
+08000b5c g F .text 00000022 CpuMemCopy
+08000da0 g F .text 0000000c TimerSet
+0800034c g F .text 00000008 __get_MSP
+080003e0 g F .text 00000130 SystemInit
+08000c94 g F .text 000000a4 UartReceivePacket
+080003a0 g F .text 00000004 __REV16
20000000 g .data 00000000 _data
-080002fa g F .text 00000006 __set_MSP
-080007f8 g F .text 00000002 CopInit
-08000854 g F .text 00000004 CpuReset
-08000984 g F .text 00000004 NvmWrite
-08000814 g F .text 00000020 CpuStartUserProgram
+08000354 g F .text 00000006 __set_MSP
+08000b14 g F .text 00000002 CopInit
+08000b80 g F .text 00000008 CpuReset
+08000d40 g F .text 00000008 NvmWrite
+08000b38 g F .text 00000024 CpuStartUserProgram
20000600 g .bss 00000000 _estack
-08000d58 g F .text 00000054 FlashVerifyChecksum
-08000306 g F .text 00000006 __set_BASEPRI
+08001238 g F .text 00000068 FlashVerifyChecksum
+08000364 g F .text 00000006 __set_BASEPRI
20000014 g .data 00000000 _edata
08000000 g O .text 00000150 _vectab
-0800035e g F .text 00000006 __STREXH
-08000468 g F .text 00000068 SystemCoreClockUpdate
-0800034a g F .text 00000008 __LDREXH
-08000568 g F .text 00000004 ComIsConnected
-08000300 g F .text 00000006 __get_BASEPRI
-080007b0 g F .text 00000030 BackDoorCheck
+080003d0 g F .text 00000006 __STREXH
+08000510 g F .text 000000e0 SystemCoreClockUpdate
+080003b8 g F .text 00000008 __LDREXH
+08000694 g F .text 00000008 ComIsConnected
+0800035c g F .text 00000006 __get_BASEPRI
+08000ac0 g F .text 00000038 BackDoorCheck
20000500 g .bss 00000000 _stack
-080009fc g F .text 00000010 TimerGet
-08000358 g F .text 00000006 __STREXB
-080009d8 g F .text 00000024 TimerInit
+08000dd8 g F .text 00000012 TimerGet
+080003c8 g F .text 00000006 __STREXB
+08000dac g F .text 0000002a TimerInit
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.srec b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.srec
index 1034cb05..1a7015fa 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.srec
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/bin/openbtl_olimex_stm32p103.srec
@@ -1,253 +1,337 @@
S024000062696E2F6F70656E62746C5F6F6C696D65785F73746D3332703130332E737265639B
-S3150800000000060020350E0008290E0008290E0008F3
-S31508000010290E0008290E0008290E0008290E0008D6
-S31508000020290E0008290E0008290E0008290E0008C6
-S31508000030290E0008290E0008290E0008290E0008B6
-S31508000040290E0008290E0008290E0008290E0008A6
-S31508000050290E0008290E0008290E0008290E000896
-S31508000060290E0008290E0008290E0008290E000886
-S31508000070290E0008290E0008290E0008290E000876
-S31508000080290E0008290E0008290E0008290E000866
-S31508000090290E0008290E0008290E0008290E000856
-S315080000A0290E0008290E0008290E0008290E000846
-S315080000B0290E0008290E0008290E0008290E000836
-S315080000C0290E0008290E0008290E0008290E000826
-S315080000D0290E0008290E0008290E0008290E000816
-S315080000E0290E0008290E0008290E0008290E000806
-S315080000F0290E0008290E0008290E0008290E0008F6
-S31508000100290E0008290E0008290E0008290E0008E5
-S31508000110290E0008290E0008290E0008290E0008D5
-S31508000120290E0008290E0008290E0008290E0008C5
-S31508000130290E0008290E0008290E0008290E0008B5
-S31508000140290E0008290E0008290E0008290E0008A5
-S3150800015010B572B611481249016012498D460C4A0B
-S315080001600C4B03E052F8041B43F8041B0A498B4264
-S31508000170F8D30D480D494FF000028842B8BF40F841
-S31508000180042BFADB00F0E4F9BDE8104000F010B8E3
-S31508000190870F0008000000201400002008ED00E08A
-S315080001A000000008000600201400002000050020BA
-S315080001B007B5002301930093454B1A6842F00102E4
-S315080001C01A605968434A01EA02025A601A6822F01C
-S315080001D0847222F480321A601A6822F480221A6025
-S315080001E05A6822F4FE025A604FF41F029A601A688F
-S315080001F042F480321A60364B1B6803F400330093CE
-S31508000200019B01330193009B23B9019A40F2DC5309
-S315080002109A42F0D12E4B1B6813F4003F03D12E48A7
-S315080002206F2100F0EBFA2D4B1A6842F010021A60A3
-S315080002301A6822F003021A601A6842F002021A606B
-S31508000240234B5A685A605A6842F400525A605A68F0
-S3150800025042F480625A605A6822F47C125A605A68DC
-S3150800026042F4E8125A601A6842F080721A60184B13
-S315080002701A6812F0007FFAD05A6822F003025A6010
-S315080002805A6842F002025A60114B5A6802F00C0290
-S31508000290082AF9D1DA6942F40032DA619A6942F039
-S315080002A005029A610E4B1A6822F470621A601A687F
-S315080002B042F430621A601A6822F470421A601A68A8
-S315080002C042F480421A6000F003F900F00CF9FCE7EA
-S315080002D0001002400000FFF8740E000800200240DB
-S315080002E000080140EFF309800046704780F309884B
-S315080002F07047EFF308800046704780F30888704718
-S31508000300EFF31280704780F311887047EFF310807F
-S31508000310704780F310887047EFF31380704780F3B7
-S3150800032013887047EFF31480704780F3148870477A
-S3150800033000BA704740BA7047C0BA704790FAA0F042
-S315080003407047D0E84F0FC0B27047D0E85F0F80B251
-S31508000350704750E8000F7047C1E8400F7047C1E882
-S31508000360500F704741E80000704700003A4B82B0D2
-S315080003701A6842F001021A605968384A01EA02020C
-S315080003805A601A6822F0847222F480321A601A6857
-S3150800039022F480221A605A6822F4FE025A604FF448
-S315080003A01F029A600022019200921A6842F4803273
-S315080003B01A60294B1A6802F400320092019A013237
-S315080003C00192009A1AB9019AB2F5A06FF1D11B6889
-S315080003D013F4003318BF01230093009B012B34D17B
-S315080003E01F4B1A6842F010021A601A6822F00302BC
-S315080003F01A601A6842F002021A60174B5A685A6065
-S315080004005A685A605A6842F480625A605A6822F4F6
-S315080004107C125A605A6842F4E8125A601A6842F026
-S3150800042080721A600C4B1A6812F0007FFAD05A686C
-S3150800043022F003025A605A6842F002025A60064BDA
-S315080004405B6803F00C03082BF9D1064B4FF00062EA
-S315080004509A6002B0704700BF001002400000FFF823
-S315080004600020024000ED00E0144A154B516801F0E7
-S315080004700C01042901D0082902D0124A1A6011E099
-S315080004805168506801F47011890C023110F4803FEC
-S3150800049003D0526812F4003F01D00B4A00E0094A23
-S315080004A051431960054A0949526802F0F0021209D7
-S315080004B08A5C196831FA02F21A6070470010024025
-S315080004C01000002000127A0000093D0000000020FC
-S315080004D010B500F091F900F083F900F051FABDE883
-S315080004E0104000F009B810B500F087F900F01AF8C6
-S315080004F0BDE8104000F05CB907B5FF238DF804305D
-S31508000500FF3B8DF8053000F041F800F0C9F9044BBF
-S315080005101B78012B02D101A800F056F80EBD00BFCA
-S315080005201400002010B5054800F0F6F9012804D19A
-S315080005300248BDE8104000F047B810BD150000207D
-S3150800054010B5C9B200F0C0F9BDE8104000F034B8E3
-S31508000550014B01221A70704714000020014B1878CD
-S31508000560704700BF1400002000F01EB8014B00229F
-S315080005705A70704758000020034BFE22DA70022298
-S315080005801871A3F84420704758000020054B002234
-S315080005901A709A6483F84320A3F844209A705A7014
-S315080005A0704700BF58000020024B1878003818BF63
-S315080005B00120704758000020024B002283F8432090
-S315080005C0704700BF580000202DE9F041077805461E
-S315080005D0FF2F744C0FD1FFF7C9FF102201234021CA
-S315080005E02271103A2370E7706271A171E17122726B
-S315080005F06372A3725AE026782046012E40F0D08016
-S31508000600F32F40D011D8CF2F00F0AD8005D8C92FD1
-S315080006106CD0CC2F40F0B080ACE0D12F00F09C809D
-S3150800062071D3D22F40F0A88088E0FA2F40D006D8A0
-S31508000630F52F0CD011D3F62F40F09E801FE0FD2F2A
-S3150800064044D0FE2F4DD0FC2F40F096803CE06A78CF
-S315080006503F2A5BD8201DA16C06E06B783F2B55D846
-S315080006606968201DA1646A7800F0E4F8FF23E37046
-S315080006706A78A36CD318A3646B78013369E0FF2307
-S31508000680E3706B683DE0FF23E370A16C6B680022A2
-S3150800069004E011F8015B013B5219D2B2002BF8D1E4
-S315080006A0C0F80720012222716371A371082350E064
-S315080006B0FF23E3703C4BA364002323716371A3718A
-S315080006C00733C4F80730F1E7002056E0FF236278C5
-S315080006D0E370FF3B2371A371E371237262710623F2
-S315080006E037E000232370FFF741FF3EE0A06C3F216F
-S315080006F06A1C00F047F9002833D0FF23E370A36C87
-S315080007003F33A36433E06B783E2B01D9222034E0D3
-S31508000710FF23E370A4F84460697821B900F038F93A
-S3150800072000282CD11DE0A06CAA1C1E4E00F02AF948
-S31508000730B8B16A78B36CD318B36420E0FF23E370CA
-S315080007404022FF3B23716371E37123726372A271C6
-S315080007500723A4F8443012E0A06C696800F014F985
-S3150800076018B9313009E000F075F8FF23E370A4F8F2
-S31508000770446004E0312000E02020FFF7FDFE94F8F5
-S315080007804330012B02D11020FFF7F6FE0748B4F8D4
-S315080007904410012384F84330BDE8F041FFF7D0BE8A
-S315080007A0BDE8F081580000207B0E00085B000020A1
-S315080007B010B5FFF7D9FE01280FD0084C2378012B76
-S315080007C00BD100F01BF9312807D90023237000F05C
-S315080007D0E9F8BDE8104000F01DB810BDA4000020DF
-S315080007E0044B012210B51A7000F0F6F8BDE8104067
-S315080007F0FFF7DEBFA40000207047704708B5034B1B
-S315080008001860034B1960FFF7F8FFFCE7A800002003
-S31508000810AC00002008B500F0B9F830B1034B4FF42E
-S3150800082000521A60024B1B68984708BD08ED00E0A5
-S315080008300420000870B50C461546064607E014F86D
-S31508000840013B013D06F8013BFFF7D7FFADB2002D8E
-S31508000850F5D170BD00F0EEBA054B1A8812F02002E9
-S3150800086003D09B880370012070471046704700BF6D
-S315080008700044004008B5094B1A8812F080020AD0D5
-S31508000880988001E0FFF7B9FF044B1B8813F0800F2F
-S31508000890F8D0012008BD104608BD00BF004400403E
-S315080008A0084B00221A819A811A829A821A8340F288
-S315080008B071221A819A8992B242F4005242F00C02CD
-S315080008C09A81704700440040402970B506460D4697
-S315080008D003D910488821FFF791FF2846FFF7CAFF7A
-S315080008E0012803D00B488B21FFF788FF00240DE071
-S315080008F0FFF783FF16F8010BFFF7BCFF012803D0AB
-S3150800090004489321FFF77AFF0134A4B2AC42EFD32F
-S3150800091070BD00BF830E00082DE9F843154C8146CB
-S31508000920257845B91448FFF797FF01281FD1134BBF
-S3150800093020701D701BE0114F0F4E97F8008008F1CC
-S31508000940010806EB0800FFF787FF012805460DD1C9
-S3150800095032785FFA88F8424587F8008006D148461B
-S31508000960711CFFF767FF0023237000E00025284667
-S31508000970BDE8F883F2000020B0000020F100002056
-S3150800098000F04AB900F054B900F078B900F0E4B9BB
-S3150800099010B500F00BFA18B1BDE8104000F02ABAFD
-S315080009A010BD0000014B00221A60704710E000E0FD
-S315080009B0044B1B6813F4803F03D0034B1A8801329B
-S315080009C01A80704710E000E0F4000020014B188000
-S315080009D0704700BFF400002010B5FFF7E3FF054B92
-S315080009E0054A00205A60052298601A60BDE8104042
-S315080009F0FFF7ECBF10E000E03F19010008B5FFF76C
-S31508000A00D7FF014B188808BDF4000020034B044AA1
-S31508000A105A60044A5A603422DA607047002002405D
-S31508000A2023016745AB89EFCD024B1A6942F0800274
-S31508000A301A6170470020024070B500240646254614
-S31508000A40FFF7DBFE094B1A59964209D3191949686B
-S31508000A505218964204D20C2202FB0533187A70BD4E
-S31508000A600C340135B42CEBD1FF2070BDA80E00085C
-S31508000A70F8B504460068FFF7DFFFFF2838D0FFF710
-S31508000A80C5FF1D4BDD6815F0010502D0FFF7CCFF49
-S31508000A902EE01A6942F001021A61234653F8042B24
-S31508000AA05E59AF18B3B2AB5201E0FFF7A6FE124B80
-S31508000AB0DB6813F0010FF8D1330C7B8001E0FFF7F8
-S31508000AC09CFE0D4BDB6813F00103F8D13A68B2427D
-S31508000AD005D10435B5F5007FDFD1012400E01C46B9
-S31508000AE0054B1A6922F001021A61FFF79DFF00E023
-S31508000AF000242046F8BD00BF00200240F8B50A4D84
-S31508000B00074600242E46FFF778FE2B7ABB4203D110
-S31508000B100C235C433059F8BD01340C350F2CF2D147
-S31508000B204FF0FF30F8BD00BFA80E0008CA05D20D69
-S31508000B3008B552B902688A4209D040F8041B4FF436
-S31508000B400072FFF777FE012008BD002008BD0120CE
-S31508000B5008BD000038B50D4B044698420D4606D030
-S31508000B600B4A914205D0FFF783FF58B102E0094CC2
-S31508000B7000E01C4620462946FFF7D8FF002808BF94
-S31508000B80002400E00446204638BD00BFF8000020D7
-S31508000B9000200008FC0200202DE9F0419846036871
-S31508000BA021F4FE77B3F1FF3F04460D46164627F0BB
-S31508000BB0030703D13946FFF7B9FF58B32368BB4289
-S31508000BC005D020463946FFF7C5FF0446F0B123682D
-S31508000BD0ED1A65190435FFF710FE231DEB1AB3F558
-S31508000BE0007F07D3204607F50071FFF7B3FF0446D9
-S31508000BF060B1051D16F8013B08F1FF381FFA88F8A1
-S31508000C002B70B8F1000F04D00135E4E72046BDE8A3
-S31508000C10F0810120BDE8F081034A4FF0FF331360ED
-S31508000C20024A1360704700BFFC020020F80000204B
-S31508000C3070B504460E461546FFF7FEFEFF2815D08A
-S31508000C40601E8019FFF7F8FEFF280FD024F4FE7304
-S31508000C50074A23F0030393420CBF06480648B3B27B
-S31508000C6021462A46BDE87040FFF796BF002070BDB2
-S31508000C7000200008F8000020FC0200202DE9F843B7
-S31508000C8004460E46FFF7D8FE0546601E8019FFF794
-S31508000C90D3FEFF2D044655D0FF2856D0854251D89D
-S31508000CA0002D4CD00F284DD8FFF7B0FE284BDE6834
-S31508000CB016F0010602D0FFF7B7FE43E01A69284688
-S31508000CC042F002021A61FFF719FF05462046FFF7B0
-S31508000CD015FF204F8046B946FFF78FFD3B7AA342A2
-S31508000CE004D10C2303FB0696736804E001360C371F
-S31508000CF00F2EF1D10023C5EB0806F618B60AB6B2D0
-S31508000D00002410E05D611A6942F040021A6101E0B0
-S31508000D10FFF773FD0E4BDB6813F0010FF8D10134B2
-S31508000D20A4B205F58065B442094BEBD31A6922F0E3
-S31508000D3002021A61FFF778FE0120BDE8F88328460B
-S31508000D40BDE8F8830020BDE8F8830020BDE8F883F5
-S31508000D5000200240A80E00080D4B1868043B1B68CB
-S31508000D60C0180C4B1B68C0180B4B1B68C0180B4BE4
-S31508000D701B68C0180A4B1B68C0180A4B1B68C018AA
-S31508000D80094B1B68C018D0F1010038BF0020704716
-S31508000D9004200008082000080C200008102000087D
-S31508000DA01420000818200008502100080F4A13B51F
-S31508000DB0D1689468131D52686418A418DA68A418D0
-S31508000DC01A69A4185A699B69A418E418644201941C
-S31508000DD0FFF7C2FF844206D004210DEB0102044846
-S31508000DE0FFF726FF00E001201CBD00BFF800002029
-S31508000DF0502100080A4808B50368B3F1FF3F02D03E
-S31508000E00FFF736FE58B107480368B3F1FF3F05D030
-S31508000E10FFF72EFE003818BF012008BD012008BDC7
-S31508000E20F8000020FC02002001483621FFF7E6BC46
-S31508000E305C0F000872B60A4A0A4B03E052F8041B14
-S31508000E4043F8041B08498B42F8D3084808494FF071
-S31508000E5000028842B8BF40F8042BFADBFFF7A8B9AE
-S31508000E60870F00080000002014000020140000204E
-S31508000E70000500206D61696E2E63004F70656E4235
-S31508000E804C54002E2E2F2E2E2F2E2E2F536F75726A
-S31508000E9063652F41524D434D335F53544D33322FC3
-S31508000EA0756172742E63000000200008002000009F
-S31508000EB001000000004000080020000002000000B9
-S31508000EC00060000800200000030000000080000801
-S31508000ED0002000000400000000A000080020000018
-S31508000EE00500000000C00008002000000600000001
-S31508000EF000E00008002000000700000000000108CC
-S31508000F000020000008000000002001080020000062
-S31508000F100900000000400108002000000A00000047
-S31508000F2000600108002000000B0000000080010896
-S31508000F30002000000C00000000A0010800200000AE
-S31508000F400D00000000C00108002000000E0000008F
-S31508000F5000E00108002000000F0000002E2E2F2EB2
-S31508000F602E2F2E2E2F536F757263652F41524D43C8
-S31508000F704D335F53544D33322F4743432F766563C2
-S30C08000F80746F72732E630003
-S31508000F870000000000000000010203040607080924
-S30908000F9700A24A0458
+S315080000000006002059130008451300084513000888
+S315080000104513000845130008451300084513000852
+S315080000204513000845130008451300084513000842
+S315080000304513000845130008451300084513000832
+S315080000404513000845130008451300084513000822
+S315080000504513000845130008451300084513000812
+S315080000604513000845130008451300084513000802
+S3150800007045130008451300084513000845130008F2
+S3150800008045130008451300084513000845130008E2
+S3150800009045130008451300084513000845130008D2
+S315080000A045130008451300084513000845130008C2
+S315080000B045130008451300084513000845130008B2
+S315080000C045130008451300084513000845130008A2
+S315080000D04513000845130008451300084513000892
+S315080000E04513000845130008451300084513000882
+S315080000F04513000845130008451300084513000872
+S315080001004513000845130008451300084513000861
+S315080001104513000845130008451300084513000851
+S315080001204513000845130008451300084513000841
+S315080001304513000845130008451300084513000831
+S315080001404513000845130008451300084513000821
+S3150800015008B572B617481849016018498D4640F225
+S315080001600002C2F2000240F21403C2F200039A42ED
+S3150800017011D241F2C842C0F6000240F20003C2F2B0
+S31508000180000340F21400C2F2000052F8041B43F8C0
+S31508000190041B8342F9D30A480A494FF000028842F1
+S315080001A0B8BF40F8042BFADB00F066FA00F00CF84A
+S315080001B008BD000008ED00E0000000080006002069
+S315080001C0140000200005002000B583B04FF000039E
+S315080001D0019300934FF48053C4F202031A6842F065
+S315080001E001021A6059684FF00002CFF6FF0201EAD1
+S315080001F002025A601A6822F0847222F480321A6067
+S315080002001A6822F480221A605A6822F4FE025A609A
+S315080002104FF41F029A601A6842F480321A604FF44B
+S315080002208053C4F2020340F2DC52196801F400312B
+S315080002300091019901F101010191009911B9019902
+S315080002409142F2D14FF48053C4F202031B6813F4AF
+S31508000250003F07D141F2B430C0F600004FF06F01FD
+S3150800026000F05CFC4FF40053C4F202031A6842F033
+S3150800027010021A601A6822F003021A601A6842F01D
+S3150800028002021A604FF48053C4F202035A685A6095
+S315080002905A6842F400525A605A6842F480625A60B8
+S315080002A05A6822F47C125A605A6842F4E8125A6074
+S315080002B01A6842F080721A604FF48053C4F202033F
+S315080002C01A6812F0007FFBD04FF48053C4F2020381
+S315080002D05A6822F003025A605A6842F002025A60CB
+S315080002E04FF48053C4F202035A6802F00C02082A3B
+S315080002F0FAD14FF48053C4F20203DA6942F40032A9
+S31508000300DA619A6942F005029A614FF40063C4F211
+S3150800031001031A6822F470621A601A6842F430629D
+S315080003201A601A6822F470421A601A6842F4804207
+S315080003301A6000F05DF900F065F9FCE7EFF3098053
+S315080003400046704780F30988704700BFEFF30880BE
+S315080003500046704780F30888704700BFEFF31280A5
+S31508000360704700BF80F31188704700BFEFF3108015
+S31508000370704700BF80F31088704700BFEFF3138003
+S31508000380704700BF80F31388704700BFEFF31480EF
+S31508000390704700BF80F31488704700BF00BA7047E3
+S315080003A040BA7047C0BA704790FAA0F0704700BFCD
+S315080003B0D0E84F0FC0B27047D0E85F0F80B27047E1
+S315080003C050E8000F704700BFC1E8400F704700BFF4
+S315080003D0C1E8500F704700BF41E80000704700BFF2
+S315080003E082B04FF48053C4F202031A6842F0010245
+S315080003F01A6059684FF00002CFF6FF0201EA0202BE
+S315080004005A601A6822F0847222F480321A601A68D6
+S3150800041022F480221A605A6822F4FE025A604FF4C7
+S315080004201F029A604FF00002019200921A6842F485
+S3150800043080321A604FF48052C4F20202136803F441
+S3150800044000330093019B03F101030193009B1BB941
+S31508000450019BB3F5A06FF1D14FF48053C4F20203A8
+S315080004601B6813F4003F14BF012300230093009B6D
+S31508000470012B44D14FF40053C4F202031A6842F028
+S3150800048010021A601A6822F003021A601A6842F00B
+S3150800049002021A604FF48053C4F202035A685A6083
+S315080004A05A685A605A6842F480625A605A6822F456
+S315080004B07C125A605A6842F4E8125A601A6842F086
+S315080004C080721A604FF48052C4F20202136813F065
+S315080004D0007FFBD04FF48053C4F202035A6822F01F
+S315080004E003025A605A6842F002025A604FF4805278
+S315080004F0C4F20202536803F00C03082BFAD14FF436
+S315080005006D43CEF200034FF000629A6002B0704766
+S315080005104FF48053C4F202035B6803F00C03042B08
+S315080005200DD0082B15D0002B44D140F21003C2F28F
+S3150800053000034FF49052C0F27A021A6043E040F288
+S315080005401003C2F200034FF49052C0F27A021A6006
+S3150800055039E04FF48053C4F202035A685B68C2F369
+S31508000560834202F1020213F4803F0BD140F21003DA
+S31508000570C2F200034FF41061C0F23D0101FB02F222
+S315080005801A6020E04FF48053C4F202035B6813F448
+S31508000590003F40F21003C2F2000319BF4FF4106186
+S315080005A0C0F23D014FF49051C0F27A0101FB02F20C
+S315080005B01A6008E040F21003C2F200034FF49052AA
+S315080005C0C0F27A021A604FF48053C4F202035A68E2
+S315080005D0C2F3031240F20003C2F200039A5C40F22F
+S315080005E01003C2F20003196821FA02F21A60704772
+S315080005F008B500F08FFA00F07FFA00F09DFB00F0D6
+S3150800060009F808BD08B500F087FA00F01DF800F0F3
+S3150800061057FA08BD00B583B04FF0FF038DF80430D4
+S315080006204FF000038DF8053000F04EF800F0E4FABC
+S3150800063040F21403C2F200031B78012B02D101A871
+S3150800064000F066F803B000BD08B540F21800C2F223
+S31508000650000000F01FFB012805D140F21800C2F285
+S31508000660000000F055F808BD08B5C9B200F0DAFA7E
+S3150800067000F044F808BD00BF40F21403C2F20003BC
+S315080006804FF001021A70704740F21403C2F20003D9
+S315080006901878704708B500F027F808BD40F25803E7
+S315080006A0C2F200034FF000025A70704740F2580336
+S315080006B0C2F200034FF0FE02DA7018714FF0020220
+S315080006C0A3F84420704700BF40F25803C2F2000363
+S315080006D04FF000021A709A6483F84320A3F8442066
+S315080006E09A705A70704700BF40F25803C2F200036E
+S315080006F01878003818BF0120704700BF40F2580329
+S31508000700C2F200034FF0000283F84320704700BF8F
+S3150800071038B504460278FF2A1DD1FFF7BFFF40F21D
+S315080007205803C2F200034FF001021A704FF0FF019E
+S31508000730D9704FF0100119714FF0000159714FF03F
+S3150800074040009871D87119725A729A724FF008025D
+S31508000750A3F8442098E140F25803C2F200031B783C
+S31508000760012B40F0AB81A2F1C902352A00F288813B
+S31508000770DFE812F0EC008601860181018601860118
+S3150800078073010D015901430186018601860186011F
+S315080007908601860186018601860186018601860113
+S315080007A08601860186018601860186018601860103
+S315080007B086018601860186018601860186018601F3
+S315080007C0860186018601860182005400360074007F
+S315080007D0860186018601A8008601C200C700DB00E3
+S315080007E042783F2A04D94FF02200FFF75FFF4BE11A
+S315080007F040F25805C2F2000505F10400A96C00F0A4
+S31508000800ADF94FF0FF03EB706278AB6CD318AB64AD
+S31508000810637803F10103A5F8443035E143783F2BAB
+S3150800082004D94FF02200FFF741FF2DE1416840F25D
+S315080008305805C2F20005A96405F10400627800F0C3
+S315080008408DF94FF0FF03EB706278AB6CD318AB648D
+S31508000850637803F10103A5F8443015E140F2580323
+S31508000860C2F200034FF0FF02DA7042689A644FF052
+S315080008700102A3F8442007E140F25805C2F2000538
+S315080008804FF0FF03EB70A96C43684FF000023BB1D1
+S315080008904FF0000211F8010B1218D2B2013BF9D140
+S315080008A0C5F8072040F25803C2F200034FF00102D0
+S315080008B01A714FF000025A719A714FF00802A3F8A4
+S315080008C04420E1E040F25803C2F200034FF0FF0271
+S315080008D0DA7041F2BC32C0F600029A644FF00002A8
+S315080008E01A715A719A714FF00702C3F807204FF030
+S315080008F00802A3F84420C7E04FF00000FFF7D6FE31
+S31508000900C2E040F25803C2F200034FF0FF02DA7069
+S315080009104FF000021A71597859719A71DA711A7280
+S315080009204FF00602A3F84420AEE040F25804C2F2A3
+S3150800093000044FF000032370FFF7B0FE4FF0FF03EB
+S31508000940E3704FF00103A4F844309DE040F25803E9
+S31508000950C2F20003986C4FF03F0104F1010200F067
+S31508000960EFF920B94FF03100FFF7A0FE8CE040F216
+S315080009705803C2F200034FF0FF02DA709A6C02F1D4
+S315080009803F029A644FF00102A3F844207CE04378C2
+S315080009903E2B04D94FF02200FFF788FE74E040F2A0
+S315080009A05803C2F200034FF0FF02DA704FF001025B
+S315080009B0A3F84420417841B900F0CEF9002863D164
+S315080009C04FF03100FFF772FE5EE040F25803C2F2C4
+S315080009D00003986C04F1020200F0B2F920B94FF056
+S315080009E03100FFF763FE4FE040F25803C2F20003FE
+S315080009F061789A6C8A189A6446E040F25803C2F203
+S31508000A0000034FF0FF02DA704FF000021A715A71B4
+S31508000A104FF040019971DA711A725A724FF0070253
+S31508000A20A3F8442030E040F25803C2F20003986C61
+S31508000A30616800F089F920B94FF03100FFF736FEFA
+S31508000A4022E040F25803C2F200034FF0FF02DA70C8
+S31508000A504FF00102A3F8442016E000F091F840F2A6
+S31508000A605803C2F200034FF0FF02DA704FF001029A
+S31508000A70A3F8442008E04FF03100FFF717FE03E023
+S31508000A804FF02000FFF712FE40F25803C2F20003AF
+S31508000A9093F84330012B03D14FF01000FFF706FE01
+S31508000AA040F25803C2F200034FF0010283F84320D4
+S31508000AB003F10300B3F84410FFF7D6FD38BD00BFB5
+S31508000AC008B5FFF7E7FD012815D040F2A403C2F2E6
+S31508000AD000031B78012B0ED100F07EF931280AD9C4
+S31508000AE040F2A403C2F200034FF000021A7000F0AD
+S31508000AF03DF900F021F808BD08B540F2A403C2F29A
+S31508000B0000034FF001021A7000F050F9FFF7D8FF02
+S31508000B1008BD00BF704700BF704700BF08B540F268
+S31508000B20A803C2F20003186040F2AC03C2F2000345
+S31508000B301960FFF7F1FFFCE708B500F009F960B1A5
+S31508000B404EF60853CEF200034FF400521A6042F2F2
+S31508000B500403C0F600031B68984708BD70B50D4628
+S31508000B6014465AB1064615F8013B06F8013BFFF74D
+S31508000B70D3FF04F1FF34A4B2002CF4D170BD00BF3A
+S31508000B8008B500F0E9FB08BD4FF48843C4F200033A
+S31508000B901B8813F0200F1FBF4FF48843C4F20003CD
+S31508000BA09B88037014BF01200020704710B54FF4CE
+S31508000BB08843C4F200031B8813F0800F15D04FF446
+S31508000BC08843C4F2000398801B8813F0800F0FD166
+S31508000BD04FF48844C4F20004FFF79EFF238813F0FD
+S31508000BE0800FF9D04FF0010010BD4FF0000010BD86
+S31508000BF04FF0010010BD00BF4FF48843C4F2000354
+S31508000C004FF000021A819A811A829A821A8340F258
+S31508000C1071221A819A8992B242F4005242F00C0269
+S31508000C209A8170472DE9F04105460C46402907D9B7
+S31508000C3041F2C430C0F600004FF08801FFF76EFF9E
+S31508000C402046FFF7B3FF012807D041F2C430C0F6AB
+S31508000C5000004FF08B01FFF761FF2646BCB14FF04D
+S31508000C60000441F2C437C0F600074FF09308FFF7B7
+S31508000C7053FF285DFFF79AFF012803D038464146FF
+S31508000C80FFF74CFF04F10104A3B2B342EFD3BDE86A
+S31508000C90F08100BF38B5054640F2F503C2F20003FD
+S31508000CA01B78B3B940F2B000C2F20000FFF76CFF40
+S31508000CB0012836D140F2F503C2F200034FF00102D3
+S31508000CC01A7040F2F403C2F200034FF000001870E5
+S31508000CD038BD40F2F403C2F200031C781548201808
+S31508000CE0FFF752FF01281FD104F10104E2B240F2D6
+S31508000CF0F403C2F200031A7040F2B003C2F2000312
+S31508000D001B78934213D128460A49FFF727FF40F27A
+S31508000D10F503C2F200034FF000021A704FF001000B
+S31508000D2038BD4FF0000038BD4FF0000038BD4FF019
+S31508000D30000038BDB100002008B500F0A9F908BDCB
+S31508000D4008B500F0B3F908BD08B500F0DBF908BD31
+S31508000D5008B500F071FA08BD08B500F0A1FA10B19F
+S31508000D6000F0C8FA08BD4FF0000008BD4EF21003A7
+S31508000D70CEF200034FF000021A6070474EF21003DD
+S31508000D80CEF200031B6813F4803F1FBF40F2F60340
+S31508000D90C2F200031A88013218BF1A80704700BFD2
+S31508000DA040F2F603C2F200031880704708B5FFF751
+S31508000DB0DDFF4EF21003CEF2000341F63F12C0F2F9
+S31508000DC001025A604FF0000098604FF005021A6061
+S31508000DD0FFF7E6FF08BD00BF08B5FFF7CFFF40F2F3
+S31508000DE0F603C2F20003188808BD00BF4FF400538B
+S31508000DF0C4F2020340F22312C4F267525A6048F65C
+S31508000E00AB12CCF6EF525A604FF03402DA607047F4
+S31508000E104FF40053C4F202031A6942F080021A61C1
+S31508000E20704700BFF8B507464FF00004254641F263
+S31508000E30E836C0F60006FFF76FFE3359BB420ED8F8
+S31508000E40311949685B189F4209D241F2E833C0F666
+S31508000E50000305EB450203EB8203187AF8BD05F19A
+S31508000E60010504F10C04B42CE5D14FF0FF00F8BDE0
+S31508000E702DE9F84380460068FFF7D4FFFF2808BF2E
+S31508000E80002453D0FFF7B2FF4FF40053C4F2020315
+S31508000E90DB6813F0010F04D0FFF7BAFF4FF0000428
+S31508000EA044E04FF40053C4F202031A6942F0010207
+S31508000EB01A614FF0000508F104094FF40054C4F212
+S31508000EC00204D8F80030EF1859F80560B2B2EA52B1
+S31508000ED0E36813F0010F05D0FFF71EFEE36813F071
+S31508000EE0010FF9D14FEA16437B80E36813F0010F2F
+S31508000EF005D0FFF711FEE36813F0010FF9D13B683F
+S31508000F00B34207D105F10405B5F5007FD9D14FF0F5
+S31508000F10010401E04FF000044FF40053C4F2020349
+S31508000F201A6922F001021A61FFF772FF2046BDE82E
+S31508000F30F88300BF70B5064641F2E835C0F60005ED
+S31508000F404FF00004FFF7E8FD2B7AB34208D141F2CF
+S31508000F50E833C0F6000304EB440253F8220070BDE0
+S31508000F6004F1010405F10C050F2CEBD14FF0FF300D
+S31508000F7070BD00BF08B54FEAC1534FEAD3535BB9FA
+S31508000F8003688B420BD040F8041B4FF40072FFF73E
+S31508000F90E5FD4FF0010008BD4FF0000008BD4FF019
+S31508000FA0010008BD38B504460D4640F2F803C2F202
+S31508000FB00003984209D04FF40053C0F60003994243
+S31508000FC008D0FFF755FF88B108E040F2FC24C2F2CA
+S31508000FD0000403E040F2F804C2F200042046294661
+S31508000FE0FFF7C8FF002808BF002401E04FF00004FF
+S31508000FF0204638BD2DE9F84305460C4617461E46D9
+S315080010004FEA51294FEA49290368B3F1FF3F03D153
+S315080010104946FFF7AFFF50B32B684B4505D0284626
+S315080010204946FFF7BFFF054628B32B68E41A2C1973
+S3150800103004F1040440F2FF1809F50079FFF76CFD86
+S3150800104005F10403E31A434507D928464946FFF73D
+S31508001050A9FF054698B100F1040417F8013B23706F
+S3150800106006F1FF36B6B276B104F10104E6E74FF0B1
+S315080010700000BDE8F8834FF00000BDE8F8834FF0A4
+S315080010800000BDE8F8834FF00100BDE8F88300BF13
+S3150800109040F2FC23C2F200034FF0FF321A6040F21E
+S315080010A0F803C2F200031A60704700BF70B5044621
+S315080010B00D461646FFF7B6FEFF281DD004F1FF3091
+S315080010C04019FFF7AFFEFF2819D04FEA54224FF414
+S315080010D00053C0F60003B3EB422F07BF40F2F800F7
+S315080010E0C2F2000040F2FC20C2F20000214632465D
+S315080010F0ABB2FFF77FFF70BD4FF0000070BD4FF039
+S31508001100000070BD2DE9F04105460E46FFF78AFE40
+S31508001110044605F1FF308019FFF784FE0546FF28CF
+S3150800112014BF00230123FF2C08BF43F00103002B43
+S315080011307ED1844270D8002C72D00F2874D8FFF75D
+S3150800114055FE4FF40053C4F20203DB6813F0010F97
+S3150800115005D0FFF75DFE4FF00000BDE8F0814FF4C3
+S315080011600053C4F202031A6942F002021A612046C9
+S31508001170FFF7E0FE07462846FFF7DCFE804641F209
+S31508001180E836C0F600064FF00004FFF7C5FC337AD0
+S31508001190AB4209D141F2E833C0F6000304EB44023E
+S315080011A003EB82035E6807E004F1010406F10C060E
+S315080011B00F2CEAD14FF00006C7EB08084644C6F3E1
+S315080011C08F26DEB14FF000054FF40054C4F2020436
+S315080011D06761236943F040032361E36813F0010F55
+S315080011E005D0FFF799FCE36813F0010FF9D105F173
+S315080011F00105ADB207F58067AE42E9D84FF4005352
+S31508001200C4F202031A6922F002021A61FFF700FE0D
+S315080012104FF00100BDE8F0814FF00000BDE8F08115
+S315080012204FF00000BDE8F0814FF00000BDE8F08106
+S315080012304FF00000BDE8F08142F20402C0F6000259
+S315080012404FF40053C0F6000310681B68C01842F23A
+S315080012500803C0F600031B68C01842F20C03C0F668
+S3150800126000031B68C01842F21003C0F600031B688F
+S31508001270C01842F21403C0F600031B68C01842F2F5
+S315080012801803C0F600031B68C01842F25013C0F6D4
+S3150800129000031B68C018D0F1010038BF0020704752
+S315080012A010B582B040F2F802C2F2000202F104035D
+S315080012B09468D16864185268A418DA68A4181A6978
+S315080012C0A4185A69A4189B69E418C4F10004019487
+S315080012D0FFF7B2FF844208BF012009D042F250103E
+S315080012E0C0F600004FF004010DEB0102FFF7DEFE29
+S315080012F002B010BD08B540F2F803C2F200031B683D
+S31508001300B3F1FF3F06D040F2F800C2F20000FFF743
+S31508001310AFFD88B140F2FC23C2F200031B68B3F1AB
+S31508001320FF3F0CD040F2FC20C2F20000FFF7A0FD00
+S31508001330003818BF012008BD4FF0000008BD4FF067
+S31508001340010008BD08B541F29C40C0F600004FF008
+S315080013503601FFF7E3FB08BD08B572B640F2000296
+S31508001360C2F2000240F21403C2F200039A4211D2FA
+S3150800137041F2C842C0F6000240F20003C2F200037E
+S3150800138040F21400C2F2000052F8041B43F8041B92
+S315080013908342F9D3054806494FF000028842B8BF90
+S315080013A040F8042BFADBFEF70FFF08BD14000020F7
+S315080013B0000500206D61696E2E6300004F70656E32
+S315080013C0424C54002E2E2F2E2E2F2E2E2F536F7555
+S315080013D07263652F41524D434D335F53544D33323B
+S315080013E02F756172742E630000200008002000002B
+S315080013F00100000000400008002000000200000074
+S3150800140000600008002000000300000000800008BB
+S31508001410002000000400000000A0000800200000D2
+S315080014200500000000C000080020000006000000BB
+S3150800143000E0000800200000070000000000010886
+S31508001440002000000800000000200108002000001D
+S315080014500900000000400108002000000A00000002
+S3150800146000600108002000000B0000000080010851
+S31508001470002000000C00000000A001080020000069
+S315080014800D00000000C00108002000000E0000004A
+S3150800149000E00108002000000F0000002E2E2F2E6D
+S315080014A02E2F2E2E2F536F757263652F41524D4383
+S315080014B04D335F53544D33322F4743432F7665637D
+S30D080014C0746F72732E630000BD
+S315080014C800000000000000000102030406070809DE
+S309080014D800A24A0412
S70508000000F2
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/hooks.c b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/hooks.c
index 5b31c733..85f88c6e 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/hooks.c
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/hooks.c
@@ -97,20 +97,20 @@ void NvmInitHook(void)
** PARAMETER: addr start address
** len length in bytes
** data pointer to the data buffer.
-** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is
-** not within the supported memory range, or BTL_NVM_ERROR is the write
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the write
** operation failed.
** DESCRIPTION: Callback that gets called at the start of the NVM driver write
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
-** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
+** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the data hasn't
** been written yet.
**
**
****************************************************************************************/
blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
{
- return BTL_NVM_NOT_IN_RANGE;
+ return BLT_NVM_NOT_IN_RANGE;
} /*** end of NvmWriteHook ***/
@@ -118,19 +118,19 @@ blt_int8u NvmWriteHook(blt_addr addr, blt_int32u len, blt_int8u *data)
** NAME: NvmEraseHook
** PARAMETER: addr start address
** len length in bytes
-** RETURN VALUE: BTL_NVM_OKAY if successful, BTL_NVM_NOT_IN_RANGE if the address is
-** not within the supported memory range, or BTL_NVM_ERROR is the erase
+** RETURN VALUE: BLT_NVM_OKAY if successful, BLT_NVM_NOT_IN_RANGE if the address is
+** not within the supported memory range, or BLT_NVM_ERROR is the erase
** operation failed.
** DESCRIPTION: Callback that gets called at the start of the NVM driver erase
** routine. It allows additional memory to be operated on. If the address
** is not within the range of the additional memory, then
-** BTL_NVM_NOT_IN_RANGE must be returned to indicate that the memory
+** BLT_NVM_NOT_IN_RANGE must be returned to indicate that the memory
** hasn't been erased yet.
**
****************************************************************************************/
-blt_bool NvmEraseHook(blt_addr addr, blt_int32u len)
+blt_int8u NvmEraseHook(blt_addr addr, blt_int32u len)
{
- return BTL_NVM_NOT_IN_RANGE;
+ return BLT_NVM_NOT_IN_RANGE;
} /*** end of NvmEraseHook ***/
diff --git a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/makefile b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/makefile
index a34626c0..b7977d1d 100644
--- a/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/makefile
+++ b/Target/Demo/ARMCM3_STM32_Olimex_STM32P103_GCC/Boot/makefile
@@ -108,7 +108,7 @@ LIB_PATH = -L../../../Source/ARMCM3_STM32/GCC/
#|---------------------------------------------------------------------------------------|
#| Options for compiler binaries |
#|---------------------------------------------------------------------------------------|
-CFLAGS = -g -D inline= -mthumb -mcpu=cortex-m3 -Os -T memory.x
+CFLAGS = -g -D inline= -mthumb -mcpu=cortex-m3 -O1 -T memory.x
CFLAGS += -D PACK_STRUCT_END=__attribute\(\(packed\)\) -Wno-main
CFLAGS += -D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\)
CFLAGS += -ffunction-sections -fdata-sections $(INC_PATH) -D STM32F10X_MD -D GCC_ARMCM3
diff --git a/Target/Source/ARM7_LPC2000/nvm.c b/Target/Source/ARM7_LPC2000/nvm.c
index a6bc6040..7aaea39c 100644
--- a/Target/Source/ARM7_LPC2000/nvm.c
+++ b/Target/Source/ARM7_LPC2000/nvm.c
@@ -79,7 +79,7 @@ void NvmInit(void)
blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
{
#if (BOOT_NVM_HOOKS_ENABLE > 0)
- blt_int8u result = BTL_NVM_NOT_IN_RANGE;
+ blt_int8u result = BLT_NVM_NOT_IN_RANGE;
#endif
#if (BOOT_NVM_HOOKS_ENABLE > 0)
@@ -89,14 +89,14 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
result = NvmWriteHook(addr, len, data);
/* process the return code */
- if (result == BTL_NVM_OKAY)
+ if (result == BLT_NVM_OKAY)
{
/* data was within range of the additionally supported memory and succesfully
* programmed, so we are all done.
*/
return BLT_TRUE;
}
- else if (result == BTL_NVM_ERROR)
+ else if (result == BLT_NVM_ERROR)
{
/* data was within range of the additionally supported memory and attempted to be
* programmed, but an error occurred, so we can't continue.
@@ -105,7 +105,7 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
}
#endif
- /* still here to the internal driver should try and perform the program operation */
+ /* still here so the internal driver should try and perform the program operation */
return FlashWrite(addr, len, data);
} /*** end of NvmWrite ***/
@@ -121,7 +121,7 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
blt_bool NvmErase(blt_addr addr, blt_int32u len)
{
#if (BOOT_NVM_HOOKS_ENABLE > 0)
- blt_int8u result = BTL_NVM_NOT_IN_RANGE;
+ blt_int8u result = BLT_NVM_NOT_IN_RANGE;
#endif
#if (BOOT_NVM_HOOKS_ENABLE > 0)
@@ -131,14 +131,14 @@ blt_bool NvmErase(blt_addr addr, blt_int32u len)
result = NvmEraseHook(addr, len);
/* process the return code */
- if (result == BTL_NVM_OKAY)
+ if (result == BLT_NVM_OKAY)
{
/* address was within range of the additionally supported memory and succesfully
* erased, so we are all done.
*/
return BLT_TRUE;
}
- else if (result == BTL_NVM_ERROR)
+ else if (result == BLT_NVM_ERROR)
{
/* address was within range of the additionally supported memory and attempted to be
* erased, but an error occurred, so we can't continue.
@@ -147,7 +147,7 @@ blt_bool NvmErase(blt_addr addr, blt_int32u len)
}
#endif
- /* still here to the internal driver should try and perform the erase operation */
+ /* still here so the internal driver should try and perform the erase operation */
return FlashErase(addr, len);
} /*** end of NvmErase ***/
diff --git a/Target/Source/ARM7_LPC2000/nvm.h b/Target/Source/ARM7_LPC2000/nvm.h
index 943ca0a2..c143d71a 100644
--- a/Target/Source/ARM7_LPC2000/nvm.h
+++ b/Target/Source/ARM7_LPC2000/nvm.h
@@ -51,9 +51,9 @@ blt_bool NvmDone(void);
* Macro definitions
****************************************************************************************/
/* return codes for hook function NvmWrite/Erase */
-#define BTL_NVM_ERROR (0x00) /* return code for success */
-#define BTL_NVM_OKAY (0x01) /* return code for error */
-#define BTL_NVM_NOT_IN_RANGE (0x02) /* return code for not in range */
+#define BLT_NVM_ERROR (0x00) /* return code for success */
+#define BLT_NVM_OKAY (0x01) /* return code for error */
+#define BLT_NVM_NOT_IN_RANGE (0x02) /* return code for not in range */
#endif /* NVM_H */
diff --git a/Target/Source/ARMCM3_STM32/nvm.c b/Target/Source/ARMCM3_STM32/nvm.c
index a6bc6040..7aaea39c 100644
--- a/Target/Source/ARMCM3_STM32/nvm.c
+++ b/Target/Source/ARMCM3_STM32/nvm.c
@@ -79,7 +79,7 @@ void NvmInit(void)
blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
{
#if (BOOT_NVM_HOOKS_ENABLE > 0)
- blt_int8u result = BTL_NVM_NOT_IN_RANGE;
+ blt_int8u result = BLT_NVM_NOT_IN_RANGE;
#endif
#if (BOOT_NVM_HOOKS_ENABLE > 0)
@@ -89,14 +89,14 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
result = NvmWriteHook(addr, len, data);
/* process the return code */
- if (result == BTL_NVM_OKAY)
+ if (result == BLT_NVM_OKAY)
{
/* data was within range of the additionally supported memory and succesfully
* programmed, so we are all done.
*/
return BLT_TRUE;
}
- else if (result == BTL_NVM_ERROR)
+ else if (result == BLT_NVM_ERROR)
{
/* data was within range of the additionally supported memory and attempted to be
* programmed, but an error occurred, so we can't continue.
@@ -105,7 +105,7 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
}
#endif
- /* still here to the internal driver should try and perform the program operation */
+ /* still here so the internal driver should try and perform the program operation */
return FlashWrite(addr, len, data);
} /*** end of NvmWrite ***/
@@ -121,7 +121,7 @@ blt_bool NvmWrite(blt_addr addr, blt_int32u len, blt_int8u *data)
blt_bool NvmErase(blt_addr addr, blt_int32u len)
{
#if (BOOT_NVM_HOOKS_ENABLE > 0)
- blt_int8u result = BTL_NVM_NOT_IN_RANGE;
+ blt_int8u result = BLT_NVM_NOT_IN_RANGE;
#endif
#if (BOOT_NVM_HOOKS_ENABLE > 0)
@@ -131,14 +131,14 @@ blt_bool NvmErase(blt_addr addr, blt_int32u len)
result = NvmEraseHook(addr, len);
/* process the return code */
- if (result == BTL_NVM_OKAY)
+ if (result == BLT_NVM_OKAY)
{
/* address was within range of the additionally supported memory and succesfully
* erased, so we are all done.
*/
return BLT_TRUE;
}
- else if (result == BTL_NVM_ERROR)
+ else if (result == BLT_NVM_ERROR)
{
/* address was within range of the additionally supported memory and attempted to be
* erased, but an error occurred, so we can't continue.
@@ -147,7 +147,7 @@ blt_bool NvmErase(blt_addr addr, blt_int32u len)
}
#endif
- /* still here to the internal driver should try and perform the erase operation */
+ /* still here so the internal driver should try and perform the erase operation */
return FlashErase(addr, len);
} /*** end of NvmErase ***/
diff --git a/Target/Source/ARMCM3_STM32/nvm.h b/Target/Source/ARMCM3_STM32/nvm.h
index 943ca0a2..c143d71a 100644
--- a/Target/Source/ARMCM3_STM32/nvm.h
+++ b/Target/Source/ARMCM3_STM32/nvm.h
@@ -51,9 +51,9 @@ blt_bool NvmDone(void);
* Macro definitions
****************************************************************************************/
/* return codes for hook function NvmWrite/Erase */
-#define BTL_NVM_ERROR (0x00) /* return code for success */
-#define BTL_NVM_OKAY (0x01) /* return code for error */
-#define BTL_NVM_NOT_IN_RANGE (0x02) /* return code for not in range */
+#define BLT_NVM_ERROR (0x00) /* return code for success */
+#define BLT_NVM_OKAY (0x01) /* return code for error */
+#define BLT_NVM_NOT_IN_RANGE (0x02) /* return code for not in range */
#endif /* NVM_H */