- added support for CAN1 and CAN2 on the STM32CM4 target.

git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@57 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
Frank Voorburg 2013-08-15 14:20:46 +00:00
parent 4b214120a8
commit 02be6fef95
41 changed files with 3999 additions and 2827 deletions

View File

@ -1,5 +1,5 @@
[sci] [sci]
port=7 port=3
baudrate=8 baudrate=8
[xcp] [xcp]
seedkey= seedkey=

View File

@ -706,7 +706,7 @@ S31508002BF009480068401C08490860704780B5FFF717
S31508002C00F3FF0548006802BD14E000E03F19010023 S31508002C00F3FF0548006802BD14E000E03F19010023
S31508002C1018E000E010E000E03C0F002080B5DFF887 S31508002C1018E000E010E000E03C0F002080B5DFF887
S31508002C20780600210170DFF874160020FEF707FD0C S31508002C20780600210170DFF874160020FEF707FD0C
S31508002C30C0B2002804D09E21DFF8640600F0C0FB6D S31508002C30C0B2002804D07C21DFF8640600F0C0FB8F
S31508002C4001BDDFF854060078002801D1012000E014 S31508002C4001BDDFF854060078002801D1012000E014
S31508002C500020704780B500F0F1FB012801D1002063 S31508002C500020704780B500F0F1FB012801D1002063
S31508002C6011E0DFF834060078002801D000200AE0D9 S31508002C6011E0DFF834060078002801D000200AE0D9
@ -785,8 +785,8 @@ S315080030E0A41C200000F047F90500AE19A41C200016
S315080030F000F041F986196D1EA41CADB2022DF6DA50 S315080030F000F041F986196D1EA41CADB2022DF6DA50
S31508003100F6B2F643200000F036F9F6B2864201D050 S31508003100F6B2F643200000F036F9F6B2864201D050
S31508003110002000E0012070BD2DE9F04105000E00F9 S31508003110002000E0012070BD2DE9F04105000E00F9
S3150800312014005FF00008002E01D0002D04D14FF4E2 S3150800312014005FF00008002E01D0002D04D140F2F3
S3150800313016715B4800F044F92800FFF7AFFF070057 S3150800313036215B4800F044F92800FFF7AFFF070087
S31508003140FFB2032F01D10020A3E02800FFF7C5FF37 S31508003140FFB2032F01D10020A3E02800FFF7C5FF37
S31508003150002802D15FF0FF309BE0FFB2002F03D0BA S31508003150002802D15FF0FF309BE0FFB2002F03D0BA
S31508003160022F5AD028D392E0AD1C280000F003F9AC S31508003160022F5AD028D392E0AD1C280000F003F9AC

View File

@ -12,12 +12,12 @@
<Column0>214</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths> <Column0>287</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace> </Workspace>
<Build><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Debug-Log</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1059</ColumnWidth1><ColumnWidth2>282</ColumnWidth2><ColumnWidth3>70</ColumnWidth3></Build><Debug-Log><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Build</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1413</ColumnWidth1></Debug-Log><TerminalIO/><Find-in-Files><ColumnWidth0>664</ColumnWidth0><ColumnWidth1>94</ColumnWidth1><ColumnWidth2>1138</ColumnWidth2></Find-in-Files></Static> <Build><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Debug-Log</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1059</ColumnWidth1><ColumnWidth2>282</ColumnWidth2><ColumnWidth3>70</ColumnWidth3></Build><Debug-Log><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Build</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1413</ColumnWidth1></Debug-Log><TerminalIO/><Find-in-Files><ColumnWidth0>664</ColumnWidth0><ColumnWidth1>94</ColumnWidth1><ColumnWidth2>1138</ColumnWidth2></Find-in-Files></Static>
<Windows> <Windows>
<Wnd1> <Wnd0>
<Tabs> <Tabs>
<Tab> <Tab>
<Identity>TabID-32216-31616</Identity> <Identity>TabID-32216-31616</Identity>
@ -29,20 +29,20 @@
</Tab> </Tab>
</Tabs> </Tabs>
<SelectedTab>0</SelectedTab></Wnd1><Wnd3><Tabs><Tab><Identity>TabID-13144-32069</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-25023-6652</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab><Tab><Identity>TabID-18334-26223</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows> <SelectedTab>0</SelectedTab></Wnd0><Wnd2><Tabs><Tab><Identity>TabID-13144-32069</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab><Tab><Identity>TabID-25023-6652</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab><Tab><Identity>TabID-18334-26223</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd2></Windows>
<Editor> <Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>16</YPos2><SelStart2>2198</SelStart2><SelEnd2>2198</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\hooks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>266</YPos2><SelStart2>13853</SelStart2><SelEnd2>13853</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\fatfs\mmc.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>109</YPos2><SelStart2>4648</SelStart2><SelEnd2>4670</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor> <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>16</YPos2><SelStart2>2198</SelStart2><SelEnd2>2198</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\hooks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>266</YPos2><SelStart2>13853</SelStart2><SelEnd2>13853</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\fatfs\mmc.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>109</YPos2><SelStart2>4648</SelStart2><SelEnd2>4670</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>72</YPos2><SelStart2>4701</SelStart2><SelEnd2>4701</SelEnd2></Tab><ActiveTab>3</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM3_STM32\can.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>310</YPos2><SelStart2>14069</SelStart2><SelEnd2>14069</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions> <Positions>
<Top><Row0><Sizes><Toolbar-0131cf20><key>iaridepm.enu1</key></Toolbar-0131cf20></Sizes></Row0></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>617</Bottom><Right>305</Right><x>-2</x><y>-2</y><xscreen>176</xscreen><yscreen>166</yscreen><sizeHorzCX>136012</sizeHorzCX><sizeHorzCY>201701</sizeHorzCY><sizeVertCX>237249</sizeVertCX><sizeVertCY>752126</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>161</Bottom><Right>1296</Right><x>-2</x><y>-2</y><xscreen>1298</xscreen><yscreen>163</yscreen><sizeHorzCX>1003091</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>104328</sizeVertCX><sizeVertCY>198056</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions> <Top><Row0><Sizes><Toolbar-02afeb38><key>iaridepm.enu1</key></Toolbar-02afeb38></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>621</Bottom><Right>378</Right><x>-2</x><y>-2</y><xscreen>218</xscreen><yscreen>167</yscreen><sizeHorzCX>136250</sizeHorzCX><sizeHorzCY>201691</sizeHorzCY><sizeVertCX>237500</sizeVertCX><sizeVertCY>752415</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>162</Bottom><Right>1602</Right><x>-2</x><y>-2</y><xscreen>1604</xscreen><yscreen>164</yscreen><sizeHorzCX>1002500</sizeHorzCX><sizeHorzCY>198068</sizeHorzCY><sizeVertCX>104375</sizeVertCX><sizeVertCY>198068</sizeVertCY></Rect></Wnd2></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop> </Desktop>
</Workspace> </Workspace>

View File

@ -1633,6 +1633,18 @@ Discarded input sections
.text 0x00000000 0x0 THUMB Debug/../../obj/uart.o .text 0x00000000 0x0 THUMB Debug/../../obj/uart.o
.data 0x00000000 0x0 THUMB Debug/../../obj/uart.o .data 0x00000000 0x0 THUMB Debug/../../obj/uart.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/uart.o .bss 0x00000000 0x0 THUMB Debug/../../obj/uart.o
.text 0x00000000 0x0 THUMB Debug/../../obj/can.o
.data 0x00000000 0x0 THUMB Debug/../../obj/can.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/can.o
.debug_info 0x00000000 0x64 THUMB Debug/../../obj/can.o
.debug_abbrev 0x00000000 0x26 THUMB Debug/../../obj/can.o
.debug_aranges
0x00000000 0x18 THUMB Debug/../../obj/can.o
.debug_line 0x00000000 0x1d THUMB Debug/../../obj/can.o
.debug_str 0x00000000 0x18a THUMB Debug/../../obj/can.o
.comment 0x00000000 0x4f THUMB Debug/../../obj/can.o
.ARM.attributes
0x00000000 0x33 THUMB Debug/../../obj/can.o
.text 0x00000000 0x0 THUMB Debug/../../obj/assert.o .text 0x00000000 0x0 THUMB Debug/../../obj/assert.o
.data 0x00000000 0x0 THUMB Debug/../../obj/assert.o .data 0x00000000 0x0 THUMB Debug/../../obj/assert.o
.bss 0x00000000 0x0 THUMB Debug/../../obj/assert.o .bss 0x00000000 0x0 THUMB Debug/../../obj/assert.o
@ -2449,7 +2461,7 @@ CM3_System_Control_Space 0xe000e000 0x00001000 xw
Linker script and memory map Linker script and memory map
0x08006624 __do_debug_operation = __do_debug_operation_mempoll 0x08006648 __do_debug_operation = __do_debug_operation_mempoll
0x08000000 __FLASH_segment_start__ = 0x8000000 0x08000000 __FLASH_segment_start__ = 0x8000000
0x08008000 __FLASH_segment_end__ = 0x8008000 0x08008000 __FLASH_segment_end__ = 0x8008000
0x10000000 __DATA_SRAM_segment_start__ = 0x10000000 0x10000000 __DATA_SRAM_segment_start__ = 0x10000000
@ -2534,7 +2546,7 @@ Linker script and memory map
0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__init_end__ >= __FLASH_segment_start__) && (__init_end__ <= __FLASH_segment_end__)), error: .init is too large to fit in FLASH memory segment)
0x08000328 __text_load_start__ = ALIGN (__init_end__, 0x4) 0x08000328 __text_load_start__ = ALIGN (__init_end__, 0x4)
.text 0x08000328 0x6340 .text 0x08000328 0x6364
0x08000328 __text_start__ = . 0x08000328 __text_start__ = .
*(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*)
.glue_7 0x00000000 0x0 linker stubs .glue_7 0x00000000 0x0 linker stubs
@ -2932,43 +2944,50 @@ Linker script and memory map
0x08005df0 0x1c THUMB Debug/../../obj/file.o 0x08005df0 0x1c THUMB Debug/../../obj/file.o
.text.FileLibByteToHexString .text.FileLibByteToHexString
0x08005e0c 0x24 THUMB Debug/../../obj/file.o 0x08005e0c 0x24 THUMB Debug/../../obj/file.o
.text.SrecParseLine
0x08005e30 0x258 THUMB Debug/../../obj/file.o
.text.FileInit .text.FileInit
0x08006088 0x30 THUMB Debug/../../obj/file.o 0x08005e30 0x30 THUMB Debug/../../obj/file.o
0x08006088 FileInit 0x08005e30 FileInit
.text.FileIsIdle .text.FileIsIdle
0x080060b8 0x14 THUMB Debug/../../obj/file.o 0x08005e60 0x14 THUMB Debug/../../obj/file.o
0x080060b8 FileIsIdle 0x08005e60 FileIsIdle
.text.FileHandleFirmwareUpdateRequest .text.FileHandleFirmwareUpdateRequest
0x080060cc 0x3c THUMB Debug/../../obj/file.o 0x08005e74 0x3c THUMB Debug/../../obj/file.o
0x080060cc FileHandleFirmwareUpdateRequest 0x08005e74 FileHandleFirmwareUpdateRequest
.text.FileSrecGetLineType
0x08005eb0 0x44 THUMB Debug/../../obj/file.o
0x08005eb0 FileSrecGetLineType
.text.FileSrecVerifyChecksum
0x08005ef4 0x94 THUMB Debug/../../obj/file.o
0x08005ef4 FileSrecVerifyChecksum
.text.FileSrecParseLine
0x08005f88 0x1a4 THUMB Debug/../../obj/file.o
0x08005f88 FileSrecParseLine
.text.FileTask .text.FileTask
0x08006108 0x4b4 THUMB Debug/../../obj/file.o 0x0800612c 0x4b4 THUMB Debug/../../obj/file.o
0x08006108 FileTask 0x0800612c FileTask
.text.libc.isdigit .text.libc.isdigit
0x080065bc 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) 0x080065e0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x080065bc isdigit 0x080065e0 isdigit
.text.libc.toupper .text.libc.toupper
0x080065cc 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) 0x080065f0 0x10 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x080065cc toupper 0x080065f0 toupper
.text.libc.memcpy .text.libc.memcpy
0x080065dc 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) 0x08006600 0x48 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o)
0x080065dc __aeabi_memcpy 0x08006600 __aeabi_memcpy
0x080065dc __aeabi_memcpy4 0x08006600 __aeabi_memcpy4
0x080065dc __aeabi_memcpy8 0x08006600 __aeabi_memcpy8
0x080065dc memcpy 0x08006600 memcpy
.text.libdebugio.__do_debug_operation_mempoll .text.libdebugio.__do_debug_operation_mempoll
0x08006624 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) 0x08006648 0x3c C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x08006624 __do_debug_operation_mempoll 0x08006648 __do_debug_operation_mempoll
.text.libc.__debug_io_lock .text.libc.__debug_io_lock
0x08006660 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) 0x08006684 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x08006660 __debug_io_lock 0x08006684 __debug_io_lock
.text.libc.__debug_io_unlock .text.libc.__debug_io_unlock
0x08006664 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) 0x08006688 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x08006664 __debug_io_unlock 0x08006688 __debug_io_unlock
0x08006668 __text_end__ = (__text_start__ + SIZEOF (.text)) 0x0800668c __text_end__ = (__text_start__ + SIZEOF (.text))
0x08006668 __text_load_end__ = __text_end__ 0x0800668c __text_load_end__ = __text_end__
.vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0
.vfp11_veneer 0x00000000 0x0 linker stubs .vfp11_veneer 0x00000000 0x0 linker stubs
@ -2979,87 +2998,87 @@ Linker script and memory map
.iplt 0x00000000 0x0 .iplt 0x00000000 0x0
.iplt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o .iplt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o
0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__text_end__ >= __FLASH_segment_start__) && (__text_end__ <= __FLASH_segment_end__)), error: .text is too large to fit in FLASH memory segment)
0x08006668 __dtors_load_start__ = ALIGN (__text_end__, 0x4) 0x0800668c __dtors_load_start__ = ALIGN (__text_end__, 0x4)
.dtors 0x08006668 0x0 .dtors 0x0800668c 0x0
0x08006668 __dtors_start__ = . 0x0800668c __dtors_start__ = .
*(SORT(.dtors.*)) *(SORT(.dtors.*))
*(.dtors) *(.dtors)
*(.fini_array .fini_array.*) *(.fini_array .fini_array.*)
0x08006668 __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors)) 0x0800668c __dtors_end__ = (__dtors_start__ + SIZEOF (.dtors))
0x08006668 __dtors_load_end__ = __dtors_end__ 0x0800668c __dtors_load_end__ = __dtors_end__
0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__dtors_end__ >= __FLASH_segment_start__) && (__dtors_end__ <= __FLASH_segment_end__)), error: .dtors is too large to fit in FLASH memory segment)
0x08006668 __ctors_load_start__ = ALIGN (__dtors_end__, 0x4) 0x0800668c __ctors_load_start__ = ALIGN (__dtors_end__, 0x4)
.ctors 0x08006668 0x0 .ctors 0x0800668c 0x0
0x08006668 __ctors_start__ = . 0x0800668c __ctors_start__ = .
*(SORT(.ctors.*)) *(SORT(.ctors.*))
*(.ctors) *(.ctors)
*(.init_array .init_array.*) *(.init_array .init_array.*)
0x08006668 __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors)) 0x0800668c __ctors_end__ = (__ctors_start__ + SIZEOF (.ctors))
0x08006668 __ctors_load_end__ = __ctors_end__ 0x0800668c __ctors_load_end__ = __ctors_end__
0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__ctors_end__ >= __FLASH_segment_start__) && (__ctors_end__ <= __FLASH_segment_end__)), error: .ctors is too large to fit in FLASH memory segment)
0x08006668 __rodata_load_start__ = ALIGN (__ctors_end__, 0x4) 0x0800668c __rodata_load_start__ = ALIGN (__ctors_end__, 0x4)
.rodata 0x08006668 0x96c .rodata 0x0800668c 0x96c
0x08006668 __rodata_start__ = . 0x0800668c __rodata_start__ = .
*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata .rodata.* .gnu.linkonce.r.*)
.rodata.firmwareFilename .rodata.firmwareFilename
0x08006668 0x20 THUMB Debug/../../obj/hooks.o 0x0800668c 0x20 THUMB Debug/../../obj/hooks.o
.rodata.str1.4 .rodata.str1.4
0x08006688 0xd THUMB Debug/../../obj/hooks.o 0x080066ac 0xd THUMB Debug/../../obj/hooks.o
0x10 (size before relaxing) 0x10 (size before relaxing)
*fill* 0x08006695 0x3 00 *fill* 0x080066b9 0x3 00
.rodata.str1.4 .rodata.str1.4
0x08006698 0x8c THUMB Debug/../../obj/vectors.o 0x080066bc 0x8c THUMB Debug/../../obj/vectors.o
.rodata.flashSectorNumToMask .rodata.flashSectorNumToMask
0x08006724 0x30 THUMB Debug/../../obj/flash.o 0x08006748 0x30 THUMB Debug/../../obj/flash.o
.rodata.flashLayout .rodata.flashLayout
0x08006754 0x78 THUMB Debug/../../obj/flash.o 0x08006778 0x78 THUMB Debug/../../obj/flash.o
.rodata.str1.4 .rodata.str1.4
0x080067cc 0x7e THUMB Debug/../../obj/uart.o 0x080067f0 0x7e THUMB Debug/../../obj/uart.o
0x80 (size before relaxing) 0x80 (size before relaxing)
*fill* 0x0800684a 0x2 00 *fill* 0x0800686e 0x2 00
.rodata.xcpStationId .rodata.xcpStationId
0x0800684c 0x8 THUMB Debug/../../obj/xcp.o 0x08006870 0x8 THUMB Debug/../../obj/xcp.o
.rodata.str1.4 .rodata.str1.4
0x08006854 0x13 THUMB Debug/../../obj/ff.o 0x08006878 0x13 THUMB Debug/../../obj/ff.o
0x14 (size before relaxing) 0x14 (size before relaxing)
*fill* 0x08006867 0x1 00 *fill* 0x0800688b 0x1 00
.rodata.ExCvt 0x08006868 0x80 THUMB Debug/../../obj/ff.o .rodata.ExCvt 0x0800688c 0x80 THUMB Debug/../../obj/ff.o
.rodata.LfnOfs .rodata.LfnOfs
0x080068e8 0x10 THUMB Debug/../../obj/ff.o 0x0800690c 0x10 THUMB Debug/../../obj/ff.o
.rodata.tbl_lower.3809 .rodata.tbl_lower.3809
0x080068f8 0x1e0 THUMB Debug/../../obj/unicode.o 0x0800691c 0x1e0 THUMB Debug/../../obj/unicode.o
.rodata.Tbl 0x08006ad8 0x100 THUMB Debug/../../obj/unicode.o .rodata.Tbl 0x08006afc 0x100 THUMB Debug/../../obj/unicode.o
.rodata.tbl_upper.3810 .rodata.tbl_upper.3810
0x08006bd8 0x1e0 THUMB Debug/../../obj/unicode.o 0x08006bfc 0x1e0 THUMB Debug/../../obj/unicode.o
.rodata.str1.4 .rodata.str1.4
0x08006db8 0x21c THUMB Debug/../../obj/file.o 0x08006ddc 0x21c THUMB Debug/../../obj/file.o
0x220 (size before relaxing) 0x220 (size before relaxing)
0x08006fd4 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata)) 0x08006ff8 __rodata_end__ = (__rodata_start__ + SIZEOF (.rodata))
0x08006fd4 __rodata_load_end__ = __rodata_end__ 0x08006ff8 __rodata_load_end__ = __rodata_end__
.rel.dyn 0x08000000 0x0 .rel.dyn 0x08000000 0x0
.rel.iplt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o .rel.iplt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o
0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__rodata_end__ >= __FLASH_segment_start__) && (__rodata_end__ <= __FLASH_segment_end__)), error: .rodata is too large to fit in FLASH memory segment)
0x08006fd4 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4) 0x08006ff8 __ARM.exidx_load_start__ = ALIGN (__rodata_end__, 0x4)
.ARM.exidx 0x08006fd4 0x0 .ARM.exidx 0x08006ff8 0x0
0x08006fd4 __ARM.exidx_start__ = . 0x08006ff8 __ARM.exidx_start__ = .
0x08006fd4 __exidx_start = __ARM.exidx_start__ 0x08006ff8 __exidx_start = __ARM.exidx_start__
*(.ARM.exidx .ARM.exidx.*) *(.ARM.exidx .ARM.exidx.*)
0x08006fd4 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx)) 0x08006ff8 __ARM.exidx_end__ = (__ARM.exidx_start__ + SIZEOF (.ARM.exidx))
0x08006fd4 __exidx_end = __ARM.exidx_end__ 0x08006ff8 __exidx_end = __ARM.exidx_end__
0x08006fd4 __ARM.exidx_load_end__ = __ARM.exidx_end__ 0x08006ff8 __ARM.exidx_load_end__ = __ARM.exidx_end__
0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__ARM.exidx_end__ >= __FLASH_segment_start__) && (__ARM.exidx_end__ <= __FLASH_segment_end__)), error: .ARM.exidx is too large to fit in FLASH memory segment)
0x08006fd4 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4) 0x08006ff8 __fast_load_start__ = ALIGN (__ARM.exidx_end__, 0x4)
.fast 0x20000000 0x0 load address 0x08006fd4 .fast 0x20000000 0x0 load address 0x08006ff8
0x20000000 __fast_start__ = . 0x20000000 __fast_start__ = .
*(.fast .fast.*) *(.fast .fast.*)
0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast)) 0x20000000 __fast_end__ = (__fast_start__ + SIZEOF (.fast))
0x08006fd4 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast)) 0x08006ff8 __fast_load_end__ = (__fast_load_start__ + SIZEOF (.fast))
0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__fast_load_end__ >= __FLASH_segment_start__) && (__fast_load_end__ <= __FLASH_segment_end__)), error: .fast is too large to fit in FLASH memory segment)
.fast_run 0x20000000 0x0 .fast_run 0x20000000 0x0
@ -3068,9 +3087,9 @@ Linker script and memory map
0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run)) 0x20000000 __fast_run_end__ = (__fast_run_start__ + SIZEOF (.fast_run))
0x20000000 __fast_run_load_end__ = __fast_run_end__ 0x20000000 __fast_run_load_end__ = __fast_run_end__
0x00000001 . = ASSERT (((__fast_run_end__ >= __RAM_segment_start__) && (__fast_run_end__ <= __RAM_segment_end__)), error: .fast_run is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__fast_run_end__ >= __RAM_segment_start__) && (__fast_run_end__ <= __RAM_segment_end__)), error: .fast_run is too large to fit in RAM memory segment)
0x08006fd4 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4) 0x08006ff8 __data_load_start__ = ALIGN ((__fast_load_start__ + SIZEOF (.fast)), 0x4)
.data 0x20000000 0x18 load address 0x08006fd4 .data 0x20000000 0x18 load address 0x08006ff8
0x20000000 __data_start__ = . 0x20000000 __data_start__ = .
*(.data .data.* .gnu.linkonce.d.*) *(.data .data.* .gnu.linkonce.d.*)
.data.DMAEndOfTransfer .data.DMAEndOfTransfer
@ -3080,13 +3099,13 @@ Linker script and memory map
.data.APBAHBPrescTable .data.APBAHBPrescTable
0x20000008 0x10 THUMB Debug/../../obj/stm32f4xx_rcc.o 0x20000008 0x10 THUMB Debug/../../obj/stm32f4xx_rcc.o
0x20000018 __data_end__ = (__data_start__ + SIZEOF (.data)) 0x20000018 __data_end__ = (__data_start__ + SIZEOF (.data))
0x08006fec __data_load_end__ = (__data_load_start__ + SIZEOF (.data)) 0x08007010 __data_load_end__ = (__data_load_start__ + SIZEOF (.data))
.igot.plt 0x00000000 0x0 .igot.plt 0x00000000 0x0
.igot.plt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o .igot.plt 0x00000000 0x0 THUMB Debug/../../obj/mmc.o
0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__data_load_end__ >= __FLASH_segment_start__) && (__data_load_end__ <= __FLASH_segment_end__)), error: .data is too large to fit in FLASH memory segment)
.data_run 0x20000000 0x18 load address 0x08006fd4 .data_run 0x20000000 0x18 load address 0x08006ff8
0x20000000 __data_run_start__ = . 0x20000000 __data_run_start__ = .
0x20000018 . = MAX ((__data_run_start__ + SIZEOF (.data)), .) 0x20000018 . = MAX ((__data_run_start__ + SIZEOF (.data)), .)
*fill* 0x20000000 0x18 00 *fill* 0x20000000 0x18 00
@ -3095,7 +3114,7 @@ Linker script and memory map
0x00000001 . = ASSERT (((__data_run_end__ >= __RAM_segment_start__) && (__data_run_end__ <= __RAM_segment_end__)), error: .data_run is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__data_run_end__ >= __RAM_segment_start__) && (__data_run_end__ <= __RAM_segment_end__)), error: .data_run is too large to fit in RAM memory segment)
0x20000018 __bss_load_start__ = ALIGN (__data_run_end__, 0x4) 0x20000018 __bss_load_start__ = ALIGN (__data_run_end__, 0x4)
.bss 0x20000018 0x1028 .bss 0x20000018 0x1024
0x20000018 __bss_start__ = . 0x20000018 __bss_start__ = .
*(.bss .bss.* .gnu.linkonce.b.*) *(.bss .bss.* .gnu.linkonce.b.*)
.bss.TransferError .bss.TransferError
@ -3124,115 +3143,114 @@ Linker script and memory map
0x20000514 0x204 THUMB Debug/../../obj/flash.o 0x20000514 0x204 THUMB Debug/../../obj/flash.o
.bss.millisecond_counter .bss.millisecond_counter
0x20000718 0x4 THUMB Debug/../../obj/timer.o 0x20000718 0x4 THUMB Debug/../../obj/timer.o
.bss.xcpCtoRxInProgress.7303 .bss.xcpCtoReqPacket.7320
0x2000071c 0x1 THUMB Debug/../../obj/uart.o 0x2000071c 0x44 THUMB Debug/../../obj/uart.o
*fill* 0x2000071d 0x3 00 .bss.xcpCtoRxLength.7321
.bss.xcpCtoReqPacket.7301 0x20000760 0x1 THUMB Debug/../../obj/uart.o
0x20000720 0x44 THUMB Debug/../../obj/uart.o .bss.xcpCtoRxInProgress.7322
.bss.xcpCtoRxLength.7302 0x20000761 0x1 THUMB Debug/../../obj/uart.o
0x20000764 0x1 THUMB Debug/../../obj/uart.o *fill* 0x20000762 0x2 00
*fill* 0x20000765 0x3 00
.bss.assert_failure_file .bss.assert_failure_file
0x20000768 0x4 THUMB Debug/../../obj/assert.o 0x20000764 0x4 THUMB Debug/../../obj/assert.o
.bss.assert_failure_line .bss.assert_failure_line
0x2000076c 0x4 THUMB Debug/../../obj/assert.o 0x20000768 0x4 THUMB Debug/../../obj/assert.o
.bss.backdoorOpen .bss.backdoorOpen
0x20000770 0x1 THUMB Debug/../../obj/backdoor.o 0x2000076c 0x1 THUMB Debug/../../obj/backdoor.o
*fill* 0x20000771 0x3 00 *fill* 0x2000076d 0x3 00
.bss.backdoorOpenTime .bss.backdoorOpenTime
0x20000774 0x4 THUMB Debug/../../obj/backdoor.o 0x20000770 0x4 THUMB Debug/../../obj/backdoor.o
.bss.comEntryStateConnect .bss.comEntryStateConnect
0x20000778 0x1 THUMB Debug/../../obj/com.o 0x20000774 0x1 THUMB Debug/../../obj/com.o
*fill* 0x20000779 0x3 00 *fill* 0x20000775 0x3 00
.bss.xcpCtoReqPacket.3915 .bss.xcpCtoReqPacket.3934
0x2000077c 0x40 THUMB Debug/../../obj/com.o 0x20000778 0x40 THUMB Debug/../../obj/com.o
.bss.xcpInfo 0x200007bc 0x4c THUMB Debug/../../obj/xcp.o .bss.xcpInfo 0x200007b8 0x4c THUMB Debug/../../obj/xcp.o
.bss.LfnBuf 0x20000808 0x200 THUMB Debug/../../obj/ff.o .bss.LfnBuf 0x20000804 0x200 THUMB Debug/../../obj/ff.o
.bss.Fsid 0x20000a08 0x2 THUMB Debug/../../obj/ff.o .bss.Fsid 0x20000a04 0x2 THUMB Debug/../../obj/ff.o
*fill* 0x20000a0a 0x2 00 *fill* 0x20000a06 0x2 00
.bss.FatFs 0x20000a0c 0x4 THUMB Debug/../../obj/ff.o .bss.FatFs 0x20000a08 0x4 THUMB Debug/../../obj/ff.o
.bss.loggingStr .bss.loggingStr
0x20000a10 0x40 THUMB Debug/../../obj/file.o 0x20000a0c 0x40 THUMB Debug/../../obj/file.o
.bss.firmwareUpdateState .bss.firmwareUpdateState
0x20000a50 0x1 THUMB Debug/../../obj/file.o 0x20000a4c 0x1 THUMB Debug/../../obj/file.o
*fill* 0x20000a51 0x3 00 *fill* 0x20000a4d 0x3 00
.bss.eraseInfo .bss.eraseInfo
0x20000a54 0x8 THUMB Debug/../../obj/file.o 0x20000a50 0x8 THUMB Debug/../../obj/file.o
.bss.fatFsObjects .bss.fatFsObjects
0x20000a5c 0x458 THUMB Debug/../../obj/file.o 0x20000a58 0x458 THUMB Debug/../../obj/file.o
.bss.lineParseObject .bss.lineParseObject
0x20000eb4 0x184 THUMB Debug/../../obj/file.o 0x20000eb0 0x184 THUMB Debug/../../obj/file.o
.bss.libdebugio.dbgCommWord .bss.libdebugio.dbgCommWord
0x20001038 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) 0x20001034 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x20001038 dbgCommWord 0x20001034 dbgCommWord
.bss.libdebugio.dbgCntrlWord_mempoll .bss.libdebugio.dbgCntrlWord_mempoll
0x2000103c 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) 0x20001038 0x4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x2000103c dbgCntrlWord_mempoll 0x20001038 dbgCntrlWord_mempoll
*(COMMON) *(COMMON)
0x20001040 __bss_end__ = (__bss_start__ + SIZEOF (.bss)) 0x2000103c __bss_end__ = (__bss_start__ + SIZEOF (.bss))
0x20001040 __bss_load_end__ = __bss_end__ 0x2000103c __bss_load_end__ = __bss_end__
0x00000001 . = ASSERT (((__bss_end__ >= __RAM_segment_start__) && (__bss_end__ <= __RAM_segment_end__)), error: .bss is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__bss_end__ >= __RAM_segment_start__) && (__bss_end__ <= __RAM_segment_end__)), error: .bss is too large to fit in RAM memory segment)
0x20001040 __non_init_load_start__ = ALIGN (__bss_end__, 0x4) 0x2000103c __non_init_load_start__ = ALIGN (__bss_end__, 0x4)
.non_init 0x20001040 0x0 .non_init 0x2000103c 0x0
0x20001040 __non_init_start__ = . 0x2000103c __non_init_start__ = .
*(.non_init .non_init.*) *(.non_init .non_init.*)
0x20001040 __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init)) 0x2000103c __non_init_end__ = (__non_init_start__ + SIZEOF (.non_init))
0x20001040 __non_init_load_end__ = __non_init_end__ 0x2000103c __non_init_load_end__ = __non_init_end__
0x00000001 . = ASSERT (((__non_init_end__ >= __RAM_segment_start__) && (__non_init_end__ <= __RAM_segment_end__)), error: .non_init is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__non_init_end__ >= __RAM_segment_start__) && (__non_init_end__ <= __RAM_segment_end__)), error: .non_init is too large to fit in RAM memory segment)
0x20001040 __heap_load_start__ = ALIGN (__non_init_end__, 0x4) 0x2000103c __heap_load_start__ = ALIGN (__non_init_end__, 0x4)
.heap 0x20001040 0x800 .heap 0x2000103c 0x800
0x20001040 __heap_start__ = . 0x2000103c __heap_start__ = .
*(.heap .heap.*) *(.heap .heap.*)
0x20001840 . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4) 0x2000183c . = ALIGN (MAX ((__heap_start__ + __HEAPSIZE__), .), 0x4)
*fill* 0x20001040 0x800 00 *fill* 0x2000103c 0x800 00
0x20001840 __heap_end__ = (__heap_start__ + SIZEOF (.heap)) 0x2000183c __heap_end__ = (__heap_start__ + SIZEOF (.heap))
0x20001840 __heap_load_end__ = __heap_end__ 0x2000183c __heap_load_end__ = __heap_end__
0x00000001 . = ASSERT (((__heap_end__ >= __RAM_segment_start__) && (__heap_end__ <= __RAM_segment_end__)), error: .heap is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__heap_end__ >= __RAM_segment_start__) && (__heap_end__ <= __RAM_segment_end__)), error: .heap is too large to fit in RAM memory segment)
0x20001840 __stack_load_start__ = ALIGN (__heap_end__, 0x4) 0x2000183c __stack_load_start__ = ALIGN (__heap_end__, 0x4)
.stack 0x20001840 0x800 .stack 0x2000183c 0x800
0x20001840 __stack_start__ = . 0x2000183c __stack_start__ = .
*(.stack .stack.*) *(.stack .stack.*)
0x20002040 . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4) 0x2000203c . = ALIGN (MAX ((__stack_start__ + __STACKSIZE__), .), 0x4)
*fill* 0x20001840 0x800 00 *fill* 0x2000183c 0x800 00
0x20002040 __stack_end__ = (__stack_start__ + SIZEOF (.stack)) 0x2000203c __stack_end__ = (__stack_start__ + SIZEOF (.stack))
0x20002040 __stack_load_end__ = __stack_end__ 0x2000203c __stack_load_end__ = __stack_end__
0x00000001 . = ASSERT (((__stack_end__ >= __RAM_segment_start__) && (__stack_end__ <= __RAM_segment_end__)), error: .stack is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__stack_end__ >= __RAM_segment_start__) && (__stack_end__ <= __RAM_segment_end__)), error: .stack is too large to fit in RAM memory segment)
0x20002040 __stack_process_load_start__ = ALIGN (__stack_end__, 0x4) 0x2000203c __stack_process_load_start__ = ALIGN (__stack_end__, 0x4)
.stack_process 0x20002040 0x0 .stack_process 0x2000203c 0x0
0x20002040 __stack_process_start__ = . 0x2000203c __stack_process_start__ = .
*(.stack_process .stack_process.*) *(.stack_process .stack_process.*)
0x20002040 . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4) 0x2000203c . = ALIGN (MAX ((__stack_process_start__ + __STACKSIZE_PROCESS__), .), 0x4)
0x20002040 __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process)) 0x2000203c __stack_process_end__ = (__stack_process_start__ + SIZEOF (.stack_process))
0x20002040 __stack_process_load_end__ = __stack_process_end__ 0x2000203c __stack_process_load_end__ = __stack_process_end__
0x00000001 . = ASSERT (((__stack_process_end__ >= __RAM_segment_start__) && (__stack_process_end__ <= __RAM_segment_end__)), error: .stack_process is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__stack_process_end__ >= __RAM_segment_start__) && (__stack_process_end__ <= __RAM_segment_end__)), error: .stack_process is too large to fit in RAM memory segment)
0x20002040 __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4) 0x2000203c __tbss_load_start__ = ALIGN (__stack_process_end__, 0x4)
.tbss 0x20002040 0x0 .tbss 0x2000203c 0x0
0x20002040 __tbss_start__ = . 0x2000203c __tbss_start__ = .
*(.tbss .tbss.*) *(.tbss .tbss.*)
0x20002040 __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss)) 0x2000203c __tbss_end__ = (__tbss_start__ + SIZEOF (.tbss))
0x20002040 __tbss_load_end__ = __tbss_end__ 0x2000203c __tbss_load_end__ = __tbss_end__
0x00000001 . = ASSERT (((__tbss_end__ >= __RAM_segment_start__) && (__tbss_end__ <= __RAM_segment_end__)), error: .tbss is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__tbss_end__ >= __RAM_segment_start__) && (__tbss_end__ <= __RAM_segment_end__)), error: .tbss is too large to fit in RAM memory segment)
0x08006fec __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) 0x08007010 __tdata_load_start__ = ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4)
.tdata 0x20002040 0x0 load address 0x08006fec .tdata 0x2000203c 0x0 load address 0x08007010
0x20002040 __tdata_start__ = . 0x2000203c __tdata_start__ = .
*(.tdata .tdata.*) *(.tdata .tdata.*)
0x20002040 __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata)) 0x2000203c __tdata_end__ = (__tdata_start__ + SIZEOF (.tdata))
0x08006fec __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata)) 0x08007010 __tdata_load_end__ = (__tdata_load_start__ + SIZEOF (.tdata))
0x08006fec __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata)) 0x08007010 __FLASH_segment_used_end__ = (ALIGN ((__data_load_start__ + SIZEOF (.data)), 0x4) + SIZEOF (.tdata))
0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment) 0x00000001 . = ASSERT (((__tdata_load_end__ >= __FLASH_segment_start__) && (__tdata_load_end__ <= __FLASH_segment_end__)), error: .tdata is too large to fit in FLASH memory segment)
.tdata_run 0x20002040 0x0 .tdata_run 0x2000203c 0x0
0x20002040 __tdata_run_start__ = . 0x2000203c __tdata_run_start__ = .
0x20002040 . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .) 0x2000203c . = MAX ((__tdata_run_start__ + SIZEOF (.tdata)), .)
0x20002040 __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run)) 0x2000203c __tdata_run_end__ = (__tdata_run_start__ + SIZEOF (.tdata_run))
0x20002040 __tdata_run_load_end__ = __tdata_run_end__ 0x2000203c __tdata_run_load_end__ = __tdata_run_end__
0x20002040 __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run)) 0x2000203c __RAM_segment_used_end__ = (ALIGN (__tbss_end__, 0x4) + SIZEOF (.tdata_run))
0x00000001 . = ASSERT (((__tdata_run_end__ >= __RAM_segment_start__) && (__tdata_run_end__ <= __RAM_segment_end__)), error: .tdata_run is too large to fit in RAM memory segment) 0x00000001 . = ASSERT (((__tdata_run_end__ >= __RAM_segment_start__) && (__tdata_run_end__ <= __RAM_segment_end__)), error: .tdata_run is too large to fit in RAM memory segment)
START GROUP START GROUP
LOAD THUMB Debug/../../obj/mmc.o LOAD THUMB Debug/../../obj/mmc.o
@ -3277,6 +3295,7 @@ LOAD THUMB Debug/../../obj/flash.o
LOAD THUMB Debug/../../obj/nvm.o LOAD THUMB Debug/../../obj/nvm.o
LOAD THUMB Debug/../../obj/timer.o LOAD THUMB Debug/../../obj/timer.o
LOAD THUMB Debug/../../obj/uart.o LOAD THUMB Debug/../../obj/uart.o
LOAD THUMB Debug/../../obj/can.o
LOAD THUMB Debug/../../obj/assert.o LOAD THUMB Debug/../../obj/assert.o
LOAD THUMB Debug/../../obj/backdoor.o LOAD THUMB Debug/../../obj/backdoor.o
LOAD THUMB Debug/../../obj/boot.o LOAD THUMB Debug/../../obj/boot.o
@ -3296,7 +3315,7 @@ LOAD C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib
END GROUP END GROUP
OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossworks/Boot/ide/../bin/openbtl_olimex_stm32e407.elf elf32-littlearm) OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossworks/Boot/ide/../bin/openbtl_olimex_stm32e407.elf elf32-littlearm)
.debug_frame 0x00000000 0x3b20 .debug_frame 0x00000000 0x3b54
.debug_frame 0x00000000 0x4e0 THUMB Debug/../../obj/mmc.o .debug_frame 0x00000000 0x4e0 THUMB Debug/../../obj/mmc.o
.debug_frame 0x000004e0 0x38 THUMB Debug/../../obj/system_stm32f4xx.o .debug_frame 0x000004e0 0x38 THUMB Debug/../../obj/system_stm32f4xx.o
.debug_frame 0x00000518 0x2c8 THUMB Debug/../../obj/stm32f4xx_flash.o .debug_frame 0x00000518 0x2c8 THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3320,13 +3339,13 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_frame 0x00001698 0x80 THUMB Debug/../../obj/xcp.o .debug_frame 0x00001698 0x80 THUMB Debug/../../obj/xcp.o
.debug_frame 0x00001718 0x688 THUMB Debug/../../obj/ff.o .debug_frame 0x00001718 0x688 THUMB Debug/../../obj/ff.o
.debug_frame 0x00001da0 0x30 THUMB Debug/../../obj/unicode.o .debug_frame 0x00001da0 0x30 THUMB Debug/../../obj/unicode.o
.debug_frame 0x00001dd0 0x120 THUMB Debug/../../obj/file.o .debug_frame 0x00001dd0 0x154 THUMB Debug/../../obj/file.o
.debug_frame 0x00001ef0 0x12e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) .debug_frame 0x00001f24 0x12e0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_frame 0x000031d0 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o) .debug_frame 0x00003204 0x120 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2_asm.o)
.debug_frame 0x000032f0 0x790 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) .debug_frame 0x00003324 0x790 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_frame 0x00003a80 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) .debug_frame 0x00003ab4 0xa0 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_info 0x00000000 0x1000f .debug_info 0x00000000 0x10008
.debug_info 0x00000000 0x35cb THUMB Debug/../../obj/mmc.o .debug_info 0x00000000 0x35cb THUMB Debug/../../obj/mmc.o
.debug_info 0x000035cb 0x61d THUMB Debug/../../obj/system_stm32f4xx.o .debug_info 0x000035cb 0x61d THUMB Debug/../../obj/system_stm32f4xx.o
.debug_info 0x00003be8 0x8a0 THUMB Debug/../../obj/stm32f4xx_flash.o .debug_info 0x00003be8 0x8a0 THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3351,12 +3370,12 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_info 0x00009ba6 0x83a THUMB Debug/../../obj/xcp.o .debug_info 0x00009ba6 0x83a THUMB Debug/../../obj/xcp.o
.debug_info 0x0000a3e0 0x3562 THUMB Debug/../../obj/ff.o .debug_info 0x0000a3e0 0x3562 THUMB Debug/../../obj/ff.o
.debug_info 0x0000d942 0x169 THUMB Debug/../../obj/unicode.o .debug_info 0x0000d942 0x169 THUMB Debug/../../obj/unicode.o
.debug_info 0x0000daab 0x122d THUMB Debug/../../obj/file.o .debug_info 0x0000daab 0x1226 THUMB Debug/../../obj/file.o
.debug_info 0x0000ecd8 0xd02 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) .debug_info 0x0000ecd1 0xd02 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_info 0x0000f9da 0x55f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) .debug_info 0x0000f9d3 0x55f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_info 0x0000ff39 0xd6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) .debug_info 0x0000ff32 0xd6 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_abbrev 0x00000000 0x27e3 .debug_abbrev 0x00000000 0x2799
.debug_abbrev 0x00000000 0x370 THUMB Debug/../../obj/mmc.o .debug_abbrev 0x00000000 0x370 THUMB Debug/../../obj/mmc.o
.debug_abbrev 0x00000370 0x158 THUMB Debug/../../obj/system_stm32f4xx.o .debug_abbrev 0x00000370 0x158 THUMB Debug/../../obj/system_stm32f4xx.o
.debug_abbrev 0x000004c8 0x1a9 THUMB Debug/../../obj/stm32f4xx_flash.o .debug_abbrev 0x000004c8 0x1a9 THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3381,12 +3400,12 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_abbrev 0x00001e2a 0x24d THUMB Debug/../../obj/xcp.o .debug_abbrev 0x00001e2a 0x24d THUMB Debug/../../obj/xcp.o
.debug_abbrev 0x00002077 0x337 THUMB Debug/../../obj/ff.o .debug_abbrev 0x00002077 0x337 THUMB Debug/../../obj/ff.o
.debug_abbrev 0x000023ae 0xa8 THUMB Debug/../../obj/unicode.o .debug_abbrev 0x000023ae 0xa8 THUMB Debug/../../obj/unicode.o
.debug_abbrev 0x00002456 0x25c THUMB Debug/../../obj/file.o .debug_abbrev 0x00002456 0x212 THUMB Debug/../../obj/file.o
.debug_abbrev 0x000026b2 0xcb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) .debug_abbrev 0x00002668 0xcb C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_abbrev 0x0000277d 0x3e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) .debug_abbrev 0x00002733 0x3e C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_abbrev 0x000027bb 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) .debug_abbrev 0x00002771 0x28 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_loc 0x00000000 0xeb2d .debug_loc 0x00000000 0xeb43
.debug_loc 0x00000000 0x2289 THUMB Debug/../../obj/mmc.o .debug_loc 0x00000000 0x2289 THUMB Debug/../../obj/mmc.o
.debug_loc 0x00002289 0x1a7 THUMB Debug/../../obj/system_stm32f4xx.o .debug_loc 0x00002289 0x1a7 THUMB Debug/../../obj/system_stm32f4xx.o
.debug_loc 0x00002430 0x83a THUMB Debug/../../obj/stm32f4xx_flash.o .debug_loc 0x00002430 0x83a THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3409,11 +3428,11 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_loc 0x00005c84 0x248 THUMB Debug/../../obj/xcp.o .debug_loc 0x00005c84 0x248 THUMB Debug/../../obj/xcp.o
.debug_loc 0x00005ecc 0x68fe THUMB Debug/../../obj/ff.o .debug_loc 0x00005ecc 0x68fe THUMB Debug/../../obj/ff.o
.debug_loc 0x0000c7ca 0x179 THUMB Debug/../../obj/unicode.o .debug_loc 0x0000c7ca 0x179 THUMB Debug/../../obj/unicode.o
.debug_loc 0x0000c943 0x964 THUMB Debug/../../obj/file.o .debug_loc 0x0000c943 0x97a THUMB Debug/../../obj/file.o
.debug_loc 0x0000d2a7 0x1092 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) .debug_loc 0x0000d2bd 0x1092 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_loc 0x0000e339 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) .debug_loc 0x0000e34f 0x7f4 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_aranges 0x00000000 0x1360 .debug_aranges 0x00000000 0x1370
.debug_aranges .debug_aranges
0x00000000 0x140 THUMB Debug/../../obj/mmc.o 0x00000000 0x140 THUMB Debug/../../obj/mmc.o
.debug_aranges .debug_aranges
@ -3463,15 +3482,15 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_aranges .debug_aranges
0x00000b58 0x28 THUMB Debug/../../obj/unicode.o 0x00000b58 0x28 THUMB Debug/../../obj/unicode.o
.debug_aranges .debug_aranges
0x00000b80 0x60 THUMB Debug/../../obj/file.o 0x00000b80 0x70 THUMB Debug/../../obj/file.o
.debug_aranges .debug_aranges
0x00000be0 0x508 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) 0x00000bf0 0x508 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_aranges .debug_aranges
0x000010e8 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) 0x000010f8 0x218 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_aranges .debug_aranges
0x00001300 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) 0x00001310 0x60 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_ranges 0x00000000 0x1468 .debug_ranges 0x00000000 0x1420
.debug_ranges 0x00000000 0x1f0 THUMB Debug/../../obj/mmc.o .debug_ranges 0x00000000 0x1f0 THUMB Debug/../../obj/mmc.o
.debug_ranges 0x000001f0 0x18 THUMB Debug/../../obj/system_stm32f4xx.o .debug_ranges 0x000001f0 0x18 THUMB Debug/../../obj/system_stm32f4xx.o
.debug_ranges 0x00000208 0x108 THUMB Debug/../../obj/stm32f4xx_flash.o .debug_ranges 0x00000208 0x108 THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3495,12 +3514,12 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_ranges 0x00000910 0x80 THUMB Debug/../../obj/xcp.o .debug_ranges 0x00000910 0x80 THUMB Debug/../../obj/xcp.o
.debug_ranges 0x00000990 0x2c8 THUMB Debug/../../obj/ff.o .debug_ranges 0x00000990 0x2c8 THUMB Debug/../../obj/ff.o
.debug_ranges 0x00000c58 0x18 THUMB Debug/../../obj/unicode.o .debug_ranges 0x00000c58 0x18 THUMB Debug/../../obj/unicode.o
.debug_ranges 0x00000c70 0xa8 THUMB Debug/../../obj/file.o .debug_ranges 0x00000c70 0x60 THUMB Debug/../../obj/file.o
.debug_ranges 0x00000d18 0x4f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) .debug_ranges 0x00000cd0 0x4f8 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_ranges 0x00001210 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) .debug_ranges 0x000011c8 0x208 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_ranges 0x00001418 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) .debug_ranges 0x000013d0 0x50 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_line 0x00000000 0x5e02 .debug_line 0x00000000 0x5e4c
.debug_line 0x00000000 0xb4f THUMB Debug/../../obj/mmc.o .debug_line 0x00000000 0xb4f THUMB Debug/../../obj/mmc.o
.debug_line 0x00000b4f 0x21c THUMB Debug/../../obj/system_stm32f4xx.o .debug_line 0x00000b4f 0x21c THUMB Debug/../../obj/system_stm32f4xx.o
.debug_line 0x00000d6b 0x49f THUMB Debug/../../obj/stm32f4xx_flash.o .debug_line 0x00000d6b 0x49f THUMB Debug/../../obj/stm32f4xx_flash.o
@ -3525,12 +3544,12 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
.debug_line 0x00003bcf 0x1fd THUMB Debug/../../obj/xcp.o .debug_line 0x00003bcf 0x1fd THUMB Debug/../../obj/xcp.o
.debug_line 0x00003dcc 0xfb9 THUMB Debug/../../obj/ff.o .debug_line 0x00003dcc 0xfb9 THUMB Debug/../../obj/ff.o
.debug_line 0x00004d85 0x185 THUMB Debug/../../obj/unicode.o .debug_line 0x00004d85 0x185 THUMB Debug/../../obj/unicode.o
.debug_line 0x00004f0a 0x381 THUMB Debug/../../obj/file.o .debug_line 0x00004f0a 0x3cb THUMB Debug/../../obj/file.o
.debug_line 0x0000528b 0x5b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) .debug_line 0x000052d5 0x5b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
.debug_line 0x0000583e 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) .debug_line 0x00005888 0x550 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
.debug_line 0x00005d8e 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) .debug_line 0x00005dd8 0x74 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
.debug_str 0x00000000 0x4a49 .debug_str 0x00000000 0x4a55
.debug_str 0x00000000 0x1460 THUMB Debug/../../obj/mmc.o .debug_str 0x00000000 0x1460 THUMB Debug/../../obj/mmc.o
0x1526 (size before relaxing) 0x1526 (size before relaxing)
.debug_str 0x00001460 0x276 THUMB Debug/../../obj/system_stm32f4xx.o .debug_str 0x00001460 0x276 THUMB Debug/../../obj/system_stm32f4xx.o
@ -3577,13 +3596,13 @@ OUTPUT(C:/Work/software/OpenBLT/Target/Demo/ARMCM4_STM32_Olimex_STM32E407_Crossw
0x74c (size before relaxing) 0x74c (size before relaxing)
.debug_str 0x00003cc4 0x99 THUMB Debug/../../obj/unicode.o .debug_str 0x00003cc4 0x99 THUMB Debug/../../obj/unicode.o
0x165 (size before relaxing) 0x165 (size before relaxing)
.debug_str 0x00003d5d 0x2f8 THUMB Debug/../../obj/file.o .debug_str 0x00003d5d 0x304 THUMB Debug/../../obj/file.o
0x7dd (size before relaxing) 0x7e9 (size before relaxing)
.debug_str 0x00004055 0x56f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o) .debug_str 0x00004061 0x56f C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_v7em_t_le_eabi.a(libc2.o)
0x655 (size before relaxing) 0x655 (size before relaxing)
.debug_str 0x000045c4 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o) .debug_str 0x000045d0 0x3b3 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libdebugio_v7em_t_le_eabi.a(libdebugio.o)
0x3fc (size before relaxing) 0x3fc (size before relaxing)
.debug_str 0x00004977 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o) .debug_str 0x00004983 0xd2 C:/Program Files (x86)/Rowley Associates Limited/CrossWorks for ARM 2.3/lib/libc_user_libc_v7em_t_le_eabi.a(user_libc.o)
0x11b (size before relaxing) 0x11b (size before relaxing)
.comment 0x00000000 0x4e .comment 0x00000000 0x4e

View File

@ -1,5 +1,5 @@
S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF S02B0000433A2F576F726B2F736F6674776172652F4F70656E424C542F5461726765742F44656D6F2F41524DEF
S315080000004020002017020008D1220008D12200084B S315080000003C20002017020008D1220008D12200084F
S31508000010D1220008D1220008D1220008D1220008E6 S31508000010D1220008D1220008D1220008D1220008E6
S31508000020D1220008D1220008D1220008D1220008D6 S31508000020D1220008D1220008D1220008D1220008D6
S31508000030D1220008D1220008D1220008D1220008C6 S31508000030D1220008D1220008D1220008D1220008C6
@ -44,12 +44,12 @@ S3150800028803BCF7E700208646EC4600200021234AEF
S315080002989047FEE7884207D0521A05D003780130FE S315080002989047FEE7884207D0521A05D003780130FE
S315080002A80B700131013AF9D17047884202D00270C1 S315080002A80B700131013AF9D17047884202D00270C1
S315080002B80130FAE77047000008ED00E00000000882 S315080002B80130FAE77047000008ED00E00000000882
S315080002C840200020D46F00080000002018000020F5 S315080002C83C200020F86F00080000002018000020D5
S315080002D8280300082803000868660008D46F000881 S315080002D828030008280300088C660008F86F000839
S315080002E8000000200000002068660008686600080C S315080002E800000020000000208C6600088C660008C4
S315080002F86866000868660008686600086866000890 S315080002F88C6600088C6600088C6600088C66000800
S315080003086866000868660008D46F000818000020A8 S315080003088C6600088C660008F86F0008180000203C
S315080003184010002040100020401800204522000800 S315080003183C1000203C1000203C180020452200080C
S3150800032808B54FF43053C4F20103586B10F0450F63 S3150800032808B54FF43053C4F20103586B10F0450F63
S3150800033807D14FF43052C4F20102506B10F0450F42 S3150800033807D14FF43052C4F20102506B10F0450F42
S31508000348FBD010F0040F06D04FF0040001F01EFE93 S31508000348FBD010F0040F06D04FF0040001F01EFE93
@ -376,13 +376,13 @@ S3150800174840F20402C2F20002107808BD2DE9B0433F
S31508001758ADF5027D88461746C8B120E04FF0000966 S31508001758ADF5027D88461746C8B120E04FF0000966
S315080017684FF40075E219009502A84FEA42224B4643 S315080017684FF40075E219009502A84FEA42224B4643
S31508001778FFF71AFDB0B9FFF7A3FF0128FBD008EB5E S31508001778FFF71AFDB0B9FFF7A3FF0128FBD008EB5E
S31508001788442002A92A4604F025FF8CB90DE003F186 S31508001788442002A92A4604F037FF8CB90DE003F174
S31508001798FF34E4B2002BE1D14FF001000CE04FF022 S31508001798FF34E4B2002BE1D14FF001000CE04FF022
S315080017A8010009E04FF0010006E04FF0000003E0F1 S315080017A8010009E04FF0010006E04FF0000003E0F1
S315080017B804F1FF30C4B2D5E70DF5027DBDE8B08364 S315080017B804F1FF30C4B2D5E70DF5027DBDE8B08364
S315080017C82DE9F043ADF5037D0F469046E8B124E0D0 S315080017C82DE9F043ADF5037D0F469046E8B124E0D0
S315080017D84FF400754FF0000902A807EB44212A4682 S315080017D84FF400754FF0000902A807EB44212A4682
S315080017E804F0F8FE04EB0802009502A84FEA422224 S315080017E804F00AFF04EB0802009502A84FEA422211
S315080017F84B46FFF7F3FD064608B1052810D1FFF753 S315080017F84B46FFF7F3FD064608B1052810D1FFF753
S315080018085FFF0128FBD08CB90DE003F1FF34E4B281 S315080018085FFF0128FBD08CB90DE003F1FF34E4B281
S31508001818002BDDD14FF001000CE04FF0010009E084 S31508001818002BDDD14FF001000CE04FF0010009E084
@ -527,18 +527,18 @@ S315080020B823F400514FEA01424FEA124383817047DD
S315080020C84FEAC1514FEAD1528280704780884FEA59 S315080020C84FEAC1514FEAD1528280704780884FEA59
S315080020D8C0514FEAD1507047038819420CBF0020F7 S315080020D8C0514FEAD1507047038819420CBF0020F7
S315080020E80120704700B589B04FF0000300930193AB S315080020E80120704700B589B04FF0000300930193AB
S315080020F802930393049305930693079346F268603D S315080020F802930393049305930693079346F28C6019
S31508002108C0F60000694603F0BFFC40B9009848B11C S31508002108C0F60000694603F0BFFC40B9009848B11C
S315080021189DF8081081F01002C2F3001004E04FF091 S315080021189DF8081081F01002C2F3001004E04FF091
S31508002128000001E04FF0000009B000BD46F2686003 S31508002128000001E04FF0000009B000BD46F28C60DF
S31508002138C0F60000704700BF08B540F2E800C2F2D2 S31508002138C0F60000704700BF08B540F2E800C2F2D2
S3150800214800004FF0000380F8243246F28861C0F692 S3150800214800004FF0000380F8243246F2AC61C0F66E
S3150800215800014FF00A0203F09BF838B940F2E8008C S3150800215800014FF00A0203F09BF838B940F2E8008C
S31508002168C2F200004FF0010280F8242208BD00BF21 S31508002168C2F200004FF0010280F8242208BD00BF21
S3150800217838B540F2E803C2F2000393F824020128AE S3150800217838B540F2E803C2F2000393F824020128AE
S3150800218805D140F2E800C2F2000003F093FB4FF4D1 S3150800218805D140F2E800C2F2000003F093FB4FF4D1
S31508002198A054C4F201044FF0400520462946FFF72B S31508002198A054C4F201044FF0400520462946FFF72B
S315080021A89BFF0028F9D046F26860C0F6000003F0E5 S315080021A89BFF0028F9D046F28C60C0F6000003F0C1
S315080021B893FC38BD08B540F2E803C2F2000393F869 S315080021B893FC38BD08B540F2E803C2F2000393F869
S315080021C82402012805D140F2E800C2F2000003F013 S315080021C82402012805D140F2E800C2F2000003F013
S315080021D871FB08BD70B5064640F2E803C2F2000373 S315080021D871FB08BD70B5064640F2E803C2F2000373
@ -556,7 +556,7 @@ S315080022882BFD4FF000038DF806304FF001008DF84E
S3150800229807004FF002058DF804504FF040010091F1 S3150800229807004FF002058DF804504FF040010091F1
S315080022A88DF8055020466946FFF760FC8DF80450FE S315080022A88DF8055020466946FFF760FC8DF80450FE
S315080022B84FF08002009220466946FFF757FC00F067 S315080022B84FF08002009220466946FFF757FC00F067
S315080022C85DFD00F069FDFCE708B546F29860C0F6C2 S315080022C85DFD00F069FDFCE708B546F2BC60C0F69E
S315080022D800004FF03D0100F009FD08BD08B500F003 S315080022D800004FF03D0100F009FD08BD08B500F003
S315080022E891FB80B100F08EFD00F09AFB4EF608537C S315080022E891FB80B100F08EFD00F09AFB4EF608537C
S315080022F8CEF200034FF400421A6048F20400C0F612 S315080022F8CEF200034FF400421A6048F20400C0F612
@ -588,7 +588,7 @@ S31508002488B4F1016F38BF09211AD326E04FF00001CD
S3150800249816E04FF0010113E04FF0020110E04FF08B S3150800249816E04FF0010113E04FF0020110E04FF08B
S315080024A803010DE04FF004010AE04FF0050107E0CB S315080024A803010DE04FF004010AE04FF0050107E0CB
S315080024B84FF0060104E04FF0070101E04FF008016C S315080024B84FF0060104E04FF0070101E04FF008016C
S315080024C801EB410346F25472C0F6000202EB8300A0 S315080024C801EB410346F27872C0F6000202EB83007C
S315080024D8007A10BD4FF0FF0010BD4FF0FF0010BD89 S315080024D8007A10BD4FF0FF0010BD4FF0FF0010BD89
S315080024E82DE9F04105460068FFF742FFFF283BD073 S315080024E82DE9F04105460068FFF742FFFF283BD073
S315080024F8FFF776FA4FF0F300FFF792FAFFF796FA26 S315080024F8FFF776FA4FF0F300FFF792FAFFF796FA26
@ -640,7 +640,7 @@ S315080027C8FFF7D6FD054606F1FF300019FFF7D0FDDD
S315080027D80446FF2D59D0FF285BD0854249D8012DDC S315080027D80446FF2D59D0FF285BD0854249D8012DDC
S315080027E84BD90B284DD8FFF7FBF84FF0F300FFF746 S315080027E84BD90B284DD8FFF7FBF84FF0F300FFF746
S315080027F817F9FFF71BF9012805D1FFF707F94FF075 S315080027F817F9FFF71BF9012805D1FFF707F94FF075
S315080028080000BDE8F08146F22476C0F600064FF0CF S315080028080000BDE8F08146F24876C0F600064FF0AB
S315080028180207631B03F0010800F00CFB36F81500E5 S315080028180207631B03F0010800F00CFB36F81500E5
S315080028283946FFF76BF9082837D008E000F002FBAD S315080028283946FFF76BF9082837D008E000F002FBAD
S3150800283836F815003946FFF761F9082805D0FFF775 S3150800283836F815003946FFF761F9082805D0FFF775
@ -694,10 +694,10 @@ S31508002B280000ADF80400ADF80600ADF80800ADF8E9
S31508002B380C004FF00C01ADF80A104FF4A054C4F27B S31508002B380C004FF00C01ADF80A104FF4A054C4F27B
S31508002B48010420466946FFF727FA20464FF0010197 S31508002B48010420466946FFF727FA20464FF0010197
S31508002B58FFF7A6FA04B010BD2DE9F84305460C465A S31508002B58FFF7A6FA04B010BD2DE9F84305460C465A
S31508002B68402907D946F2CC70C0F600004FF0760126 S31508002B68402907D946F2F070C0F600004FF0760102
S31508002B7800F0BCF82046FFF7A9FF012807D046F25F S31508002B7800F0BCF82046FFF7A9FF012807D046F25F
S31508002B88CC70C0F600004FF0790100F0AFF8264681 S31508002B88F070C0F600004FF0790100F0AFF826465D
S31508002B9844B346F2CC77C0F600074FF081084FF0E9 S31508002B9844B346F2F077C0F600074FF081084FF0C5
S31508002BA8000406F1FF3303F0010900F043F9285D34 S31508002BA8000406F1FF3303F0010900F043F9285D34
S31508002BB8FFF78CFF012817D11AE000F03BF9285DCA S31508002BB8FFF78CFF012817D11AE000F03BF9285DCA
S31508002BC8FFF784FF012803D03846414600F08EF8FF S31508002BC8FFF784FF012803D03846414600F08EF8FF
@ -708,51 +708,51 @@ S31508002C0800F018F9285DFFF761FF012803D0384658
S31508002C18414600F06BF804F10104A1B2B142CCD3E5 S31508002C18414600F06BF804F10104A1B2B142CCD3E5
S31508002C28BDE8F8833846414600F060F804F1010427 S31508002C28BDE8F8833846414600F060F804F1010427
S31508002C38A2B2B242C1D3BDE8F88300BF10B50446B4 S31508002C38A2B2B242C1D3BDE8F88300BF10B50446B4
S31508002C4840F21C73C2F200031878B0B940F220703B S31508002C4840F26173C2F200031878B0B940F21C70FA
S31508002C58C2F20000FFF720FF01283CD140F21C739E S31508002C58C2F20000FFF720FF01283CD140F2617359
S31508002C68C2F200034FF0010018704FF0000040F25E S31508002C68C2F200034FF0010018704FF0000040F25E
S31508002C786471C2F20001087010BD40F26471C2F2B4 S31508002C786071C2F20001087010BD40F26071C2F2BC
S31508002C8800010A7802F1010240F22073C2F2000339 S31508002C8800010A7802F1010240F21C73C2F200033D
S31508002C989818FFF701FF012820D140F26470C2F2A4 S31508002C989818FFF701FF012820D140F26070C2F2A8
S31508002CA80000017801F10101CAB2027040F22073EE S31508002CA80000017801F10101CAB2027040F21C73F2
S31508002CB8C2F200031878904213D120460A49FFF752 S31508002CB8C2F200031878904213D120460A49FFF752
S31508002CC823FB40F21C71C2F200014FF000020A70A1 S31508002CC823FB40F26171C2F200014FF000020A705C
S31508002CD84FF0010010BD4FF0000010BD4FF0000086 S31508002CD84FF0010010BD4FF0000010BD4FF0000086
S31508002CE810BD4FF0000010BD2107002008B540F2BE S31508002CE810BD4FF0000010BD1D07002008B540F2C2
S31508002CF86873C2F20003186040F26C70C2F20000F2 S31508002CF86473C2F20003186040F26870C2F20000FA
S31508002D08016000F097F8FCE708B500F08DF801288F S31508002D08016000F097F8FCE708B500F08DF801288F
S31508002D1820D003F0CDF9E8B140F27073C2F200038F S31508002D1820D003F0A1F8E8B140F26C73C2F20003C0
S31508002D281878012816D1FFF7ADFE40F27471C2F281 S31508002D281878012816D1FFF7ADFE40F27071C2F285
S31508002D3800010A6802F1320290420BD340F270731E S31508002D3800010A6802F1320290420BD340F26C7322
S31508002D48C2F200034FF00000187003F0BBF908B987 S31508002D48C2F200034FF00000187003F08FF808B9B4
S31508002D58FFF7C4FA08BD00BF08B540F27073C2F29F S31508002D58FFF7C4FA08BD00BF08B540F26C73C2F2A3
S31508002D6800034FF001021A70FFF78CFE40F27471E7 S31508002D6800034FF001021A70FFF78CFE40F27071EB
S31508002D78C2F200010860FFF7C7FF08BD08B500F0F2 S31508002D78C2F200010860FFF7C7FF08BD08B500F0F2
S31508002D8857F8FFF755FEFFF731FE03F079F900F01B S31508002D8857F8FFF755FEFFF731FE03F04DF800F048
S31508002D980FF8FFF7E1FF08BD08B500F04BF8FFF795 S31508002D980FF8FFF7E1FF08BD08B500F04BF8FFF795
S31508002DA85FFE03F0ADF900F01DF8FFF7ADFF08BDAB S31508002DA85FFE03F0BFF900F01DF8FFF7ADFF08BD99
S31508002DB800B583B04FF0FF038DF804304FF00000DC S31508002DB800B583B04FF0FF038DF804304FF00000DC
S31508002DC88DF8050000F04EF8FFF7A4FE40F278717A S31508002DC88DF8050000F04EF8FFF7A4FE40F274717E
S31508002DD8C2F200010A78012A02D101A800F066F8B1 S31508002DD8C2F200010A78012A02D101A800F066F8B1
S31508002DE803B000BD08B540F27C70C2F20000FFF7D8 S31508002DE803B000BD08B540F27870C2F20000FFF7DC
S31508002DF825FF012805D140F27C70C2F2000000F0D8 S31508002DF825FF012805D140F27870C2F2000000F0DC
S31508002E0855F808BD704700BF08B5C9B2FFF7A4FE54 S31508002E0855F808BD704700BF08B5C9B2FFF7A4FE54
S31508002E1800F042F808BD00BF40F27873C2F200031A S31508002E1800F042F808BD00BF40F27473C2F200031E
S31508002E284FF001021A70704708B500F02BF808BD74 S31508002E284FF001021A70704708B500F02BF808BD74
S31508002E38704700BF704700BF40F2BC73C2F2000378 S31508002E38704700BF704700BF40F2B873C2F200037C
S31508002E484FF000025A70704740F2BC73C2F2000392 S31508002E484FF000025A70704740F2B873C2F2000396
S31508002E584FF0FE02DA7018714FF00200A3F844002A S31508002E584FF0FE02DA7018714FF00200A3F844002A
S31508002E68704700BF40F2BC73C2F200034FF000027D S31508002E68704700BF40F2B873C2F200034FF0000281
S31508002E781A709A6483F84320A3F844209A705A7003 S31508002E781A709A6483F84320A3F844209A705A7003
S31508002E88704700BF40F2BC73C2F2000318780030DE S31508002E88704700BF40F2B873C2F2000318780030E2
S31508002E9818BF0120704700BF40F2BC73C2F2000396 S31508002E9818BF0120704700BF40F2B873C2F200039A
S31508002EA84FF0000283F84320704700BF38B5044640 S31508002EA84FF0000283F84320704700BF38B5044640
S31508002EB80378FF2B25D103F0FBF820B94FF0100053 S31508002EB80378FF2B25D102F0CFFF20B94FF0100079
S31508002EC8FFF7C2FFC7E1FFF7B7FF40F2BC73C2F2CC S31508002EC8FFF7C2FFC7E1FFF7B7FF40F2B873C2F2D0
S31508002ED800034FF001021A704FF0FF00D8704FF048 S31508002ED800034FF001021A704FF0FF00D8704FF048
S31508002EE8100119714FF0000159714FF0400098719F S31508002EE8100119714FF0000159714FF0400098719F
S31508002EF8D87119725A729A724FF00802A3F84420C8 S31508002EF8D87119725A729A724FF00802A3F84420C8
S31508002F08A9E140F2BC72C2F200021078012840F02A S31508002F08A9E140F2B872C2F200021078012840F02E
S31508002F18BC81A3F1C903352B00F29981DFE813F0C8 S31508002F18BC81A3F1C903352B00F29981DFE813F0C8
S31508002F28FD009701970192019701970184011E01F7 S31508002F28FD009701970192019701970184011E01F7
S31508002F386A0154019701970197019701970197012B S31508002F386A0154019701970197019701970197012B
@ -761,53 +761,53 @@ S31508002F58970197019701970197019701970197019B
S31508002F68970197019701970197019701970197018B S31508002F68970197019701970197019701970197018B
S31508002F78970197018200540036007400970197015B S31508002F78970197018200540036007400970197015B
S31508002F889701B9009701D300D800EC0062783F2A68 S31508002F889701B9009701D300D800EC0062783F2A68
S31508002F9804D94FF02200FFF757FF5CE140F2BC75F1 S31508002F9804D94FF02200FFF757FF5CE140F2B875F5
S31508002FA8C2F2000505F10400A96CFFF7ADF94FF068 S31508002FA8C2F2000505F10400A96CFFF7ADF94FF068
S31508002FB8FF00E8706178AB6CCA18AA64607800F1FB S31508002FB8FF00E8706178AB6CCA18AA64607800F1FB
S31508002FC80100A5F8440046E161783F2904D94FF085 S31508002FC80100A5F8440046E161783F2904D94FF085
S31508002FD82200FFF739FF3EE1616840F2BC75C2F28C S31508002FD82200FFF739FF3EE1616840F2B875C2F290
S31508002FE80005A96405F104006278FFF78DF94FF02A S31508002FE80005A96405F104006278FFF78DF94FF02A
S31508002FF8FF03EB706278A86C1118A964637803F16B S31508002FF8FF03EB706278A86C1118A964637803F16B
S315080030080103A5F8443026E140F2BC70C2F200007C S315080030080103A5F8443026E140F2B870C2F2000080
S315080030184FF0FF01C170636883644FF00102A0F89E S315080030184FF0FF01C170636883644FF00102A0F89E
S31508003028442018E140F2BC70C2F200004FF0FF02DB S31508003028442018E140F2B870C2F200004FF0FF02DF
S31508003038C270836C6468C4B1E4186FEA030108199E S31508003038C270836C6468C4B1E4186FEA030108199E
S3150800304800F0010213F8011BA34240F01F810EE0AD S3150800304800F0010213F8011BA34240F01F810EE0AD
S315080030581A4612F8010B09185B7853FA81F0C1B2BF S315080030581A4612F8010B09185B7853FA81F0C1B2BF
S3150800306802F10103A342F3D101E04FF0000140F257 S3150800306802F10103A342F3D101E04FF0000140F257
S31508003078BC73C2F20003C3F807104FF001021A71B5 S31508003078B873C2F20003C3F807104FF001021A71B9
S315080030884FF00001597199714FF00800A3F84400F0 S315080030884FF00001597199714FF00800A3F84400F0
S31508003098E1E040F2BC70C2F200004FF0FF03C370D3 S31508003098E1E040F2B870C2F200004FF0FF03C370D7
S315080030A846F64C02C0F6000282644FF00001017130 S315080030A846F67002C0F6000282644FF0000101710C
S315080030B8417181714FF00703C0F807304FF00802D5 S315080030B8417181714FF00703C0F807304FF00802D5
S315080030C8A0F84420C7E04FF00000FFF7BDFEC2E0B5 S315080030C8A0F84420C7E04FF00000FFF7BDFEC2E0B5
S315080030D840F2BC70C2F200004FF0FF01C1704FF019 S315080030D840F2B870C2F200004FF0FF01C1704FF01D
S315080030E800030371427842718371C37103724FF00A S315080030E800030371427842718371C37103724FF00A
S315080030F80601A0F84410AEE040F2BC74C2F200041F S315080030F80601A0F84410AEE040F2B874C2F2000423
S315080031084FF000012170FFF797FE4FF0FF03E370B9 S315080031084FF000012170FFF797FE4FF0FF03E370B9
S315080031184FF00102A4F844209DE040F2BC73C2F2C5 S315080031184FF00102A4F844209DE040F2B873C2F2C9
S315080031280003986C4FF03F0104F10102FFF762FCB7 S315080031280003986C4FF03F0104F10102FFF762FCB7
S3150800313820B94FF03100FFF787FE8CE040F2BC70EB S3150800313820B94FF03100FFF787FE8CE040F2B870EF
S31508003148C2F200004FF0FF01C170826C02F13F0223 S31508003148C2F200004FF0FF01C170826C02F13F0223
S3150800315882644FF00103A0F844307CE063783E2B84 S3150800315882644FF00103A0F844307CE063783E2B84
S3150800316804D94FF02200FFF76FFE74E040F2BC70F6 S3150800316804D94FF02200FFF76FFE74E040F2B870FA
S31508003178C2F200004FF0FF01C1704FF00102A0F83B S31508003178C2F200004FF0FF01C1704FF00102A0F83B
S315080031884420617841B9FFF741FC002863D14FF024 S315080031884420617841B9FFF741FC002863D14FF024
S315080031983100FFF759FE5EE040F2BC73C2F2000345 S315080031983100FFF759FE5EE040F2B873C2F2000349
S315080031A8986C04F10202FFF725FC20B94FF03100AC S315080031A8986C04F10202FFF725FC20B94FF03100AC
S315080031B8FFF74AFE4FE040F2BC70C2F200006178A1 S315080031B8FFF74AFE4FE040F2B870C2F200006178A5
S315080031C8826C8B18836446E040F2BC73C2F2000333 S315080031C8826C8B18836446E040F2B873C2F2000337
S315080031D84FF0FF02DA704FF00000187158714FF07F S315080031D84FF0FF02DA704FF00000187158714FF07F
S315080031E840019971D871187258724FF00702A3F8FE S315080031E840019971D871187258724FF00702A3F8FE
S315080031F8442030E040F2BC73C2F20003986C616860 S315080031F8442030E040F2B873C2F20003986C616864
S31508003208FFF7FCFB20B94FF03100FFF71DFE22E05F S31508003208FFF7FCFB20B94FF03100FFF71DFE22E05F
S3150800321840F2BC70C2F200004FF0FF01C1704FF0D7 S3150800321840F2B870C2F200004FF0FF01C1704FF0DB
S315080032280102A0F8442016E0FFF79EF840F2BC70A9 S315080032280102A0F8442016E0FFF79EF840F2B870AD
S31508003238C2F200004FF0FF01C1704FF00102A0F87A S31508003238C2F200004FF0FF01C1704FF00102A0F87A
S31508003248442008E04FF03100FFF7FEFD03E04FF099 S31508003248442008E04FF03100FFF7FEFD03E04FF099
S315080032582000FFF7F9FD40F2BC73C2F2000393F8A9 S315080032582000FFF7F9FD40F2B873C2F2000393F8AD
S315080032684310012903D14FF01000FFF7EDFD40F296 S315080032684310012903D14FF01000FFF7EDFD40F296
S31508003278BC73C2F200034FF0010083F8430003F160 S31508003278B873C2F200034FF0010083F8430003F164
S315080032880300B3F84410FFF7BFFD38BD002A3FF422 S315080032880300B3F84410FFF7BFFD38BD002A3FF422
S31508003298DFAE13F8010B0918C9B2A3427FF4D8AEFA S31508003298DFAE13F8010B0918C9B2A3427FF4D8AEFA
S315080032A8E5E600BF10B4E2B182186FEA0004131904 S315080032A8E5E600BF10B4E2B182186FEA0004131904
@ -852,7 +852,7 @@ S31508003508030010BD4FF0020010BD4FF0000010BDBB
S315080035182DE9F041154603681C78A4F13004092CF6 S315080035182DE9F041154603681C78A4F13004092CF6
S3150800352800F2E5815A783A2A40F0E18103F102036C S3150800352800F2E5815A783A2A40F0E18103F102036C
S3150800353803604FF000030B60002C40F08C8140F6C6 S3150800353803604FF000030B60002C40F08C8140F6C6
S315080035480C24C2F200042468002C00F088810C6060 S315080035480824C2F200042468002C00F088810C6064
S31508003558217889B16078FEF7DFF810F0010F0BD1F2 S31508003558217889B16078FEF7DFF810F0010F0BD1F2
S31508003568002D00F0808100F00401C8B2002814BFBD S31508003568002D00F0808100F00401C8B2002814BFBD
S315080035780A200020BDE8F0814FF000002070607036 S315080035780A200020BDE8F0814FF000002070607036
@ -912,7 +912,7 @@ S315080038C80D00BDE8F0814FF00D00BDE8F0814FF01E
S315080038D80D00BDE8F0814FF00D00BDE8F0814FF00E S315080038D80D00BDE8F0814FF00D00BDE8F0814FF00E
S315080038E80D00BDE8F0814FF00D00BDE8F0814FF0FE S315080038E80D00BDE8F0814FF00D00BDE8F0814FF0FE
S315080038F80000086023E603F10203A3612562EF19B5 S315080038F80000086023E603F10203A3612562EF19B5
S3150800390867625619E6624FF00306F3E6080A0020CE S3150800390867625619E6624FF00306F3E6040A0020D2
S315080039182DE9F0410C4601F109020369002B00F074 S315080039182DE9F0410C4601F109020369002B00F074
S31508003928E28043691E7B1978202900F08A800529D8 S31508003928E28043691E7B1978202900F08A800529D8
S3150800393814BF0A46E52206F0080505F0FF0135B169 S3150800393814BF0A46E52206F0080505F0FF0135B169
@ -1138,8 +1138,8 @@ S315080046E82DE9F04F87B001908B460B782F2B01D018
S315080046F85C2B01D10BF1010B4FF000000199886082 S315080046F85C2B01D10BF1010B4FF000000199886082
S315080047089BF800201F2A0AD808464FF00001FFF731 S315080047089BF800201F2A0AD808464FF00001FFF731
S31508004718AFFB02464FF0000301994B6198E146F654 S31508004718AFFB02464FF0000301994B6198E146F654
S315080047285404C0F60004039446F66006C0F600066C S315080047287804C0F60004039446F68406C0F6000624
S31508004738049646F66803C0F6000305935E461BF81A S31508004738049646F68C03C0F6000305935E461BF8F6
S31508004748010B2F28FAD05C28F8D00199CA69029279 S31508004748010B2F28FAD05C28F8D00199CA69029279
S3150800475830781F2840F256812F2800F045815C28BA S3150800475830781F2840F256812F2800F045815C28BA
S3150800476800F047811746A7F1020735464FF00104BE S3150800476800F047811746A7F1020735464FF00104BE
@ -1296,7 +1296,7 @@ S315080050C800D022B905F10105AF4201D191E0454664
S315080050D820463146FFF720F881460028E5D0A2E0A9 S315080050D820463146FFF720F881460028E5D0A2E0A9
S315080050E8E088C31B204699B2FEF7C2FE814600280F S315080050E8E088C31B204699B2FEF7C2FE814600280F
S315080050F840F09980A069FEF743F901904FF000083F S315080050F840F09980A069FEF743F901904FF000083F
S315080051084FF6FF7546F6E806C0F6000620682169D8 S315080051084FF6FF7546F60C16C0F6000620682169A4
S31508005118FEF78EFD8146002840F08580D4F81C905D S31508005118FEF78EFD8146002840F08580D4F81C905D
S3150800512861695FFA87FB019A4A734FF00F00C872E4 S3150800512861695FFA87FB019A4A734FF00F00C872E4
S3150800513881F80C8081F81A8081F81B800BF1FF33FF S3150800513881F80C8081F81A8081F81B800BF1FF33FF
@ -1318,13 +1318,13 @@ S3150800522881460028CAD0484607B0BDE8F08F05F180
S315080052380105ADB2384603A932462B46FFF722FECA S315080052380105ADB2384603A932462B46FFF722FECA
S315080052482046FFF711F8814600287FF4F1AE05F1EC S315080052482046FFF711F8814600287FF4F1AE05F1EC
S315080052580105ADB2642D7FF4CCAEE6E6A0B940F6FA S315080052580105ADB2642D7FF4CCAEE6E6A0B940F6FA
S315080052680C23C2F20003186810B14FF0000202704E S315080052680823C2F20003186810B14FF00002027052
S3150800527811B14FF000030B7040F60C20C2F2000083 S3150800527811B14FF000030B7040F60820C2F2000087
S3150800528801604FF0000070474FF00B00704700BFF1 S3150800528801604FF0000070474FF00B00704700BFF1
S315080052982DE9F0438FB0019116460546002800F01F S315080052982DE9F0438FB0019116460546002800F01F
S315080052A8A5804FF00003036001A805A902F01E02B5 S315080052A8A5804FF00003036001A805A902F01E02B5
S315080052B8FEF72EF90446002840F0B78006F01F08C6 S315080052B8FEF72EF90446002840F0B78006F01F08C6
S315080052C802A80B9040F60801C2F200010C9105A845 S315080052C802A80B9040F60401C2F200010C9105A849
S315080052D80199FFF705FA0A9F0146002840F08F80D2 S315080052D80199FFF705FA0A9F0146002840F08F80D2
S315080052E8002F40F0868088E059B1042940F0928062 S315080052E8002F40F0868088E059B1042940F0928062
S315080052F805A8FFF767FE48F008080A9F50B1044654 S315080052F805A8FFF767FE48F008080A9F50B1044654
@ -1450,12 +1450,12 @@ S31508005A687F03A3714FF001070CE0A561A368E268FC
S31508005A78934207D9E360A17941F02000A07101E0BB S31508005A78934207D9E360A17941F02000A07101E0BB
S31508005A884FF002073846F8BD30B58FB00EAB43F86D S31508005A884FF002073846F8BD30B58FB00EAB43F86D
S31508005A98340D0D46184605A94FF00002FDF738FDE6 S31508005A98340D0D46184605A94FF00002FDF738FDE6
S31508005AA80446A8B902A80B9040F60801C2F20001FC S31508005AA80446A8B902A80B9040F60401C2F2000100
S31508005AB80C9105A80199FEF713FE044640B90A9AFF S31508005AB80C9105A80199FEF713FE044640B90A9AFF
S31508005AC822B105A82946FDF723FF01E04FF0060491 S31508005AC822B105A82946FDF723FF01E04FF0060491
S31508005AD820460FB030BD00BF30B599B018AB43F8B3 S31508005AD820460FB030BD00BF30B599B018AB43F8B3
S31508005AE85C0D18460FA94FF00102FDF711FD024695 S31508005AE85C0D18460FA94FF00102FDF711FD024695
S31508005AF8002857D103A8159040F60801C2F20001FC S31508005AF8002857D103A8159040F60401C2F2000100
S31508005B0816910FA80199FEF7EBFD0246002849D120 S31508005B0816910FA80199FEF7EBFD0246002849D120
S31508005B18149959B3CC7A14F0010F2AD12CE0012D27 S31508005B18149959B3CC7A14F0010F2AD12CE0012D27
S31508005B2834D906A80FA94FF02402FDF7BBFB089540 S31508005B2834D906A80FA94FF02402FDF7BBFB089540
@ -1481,314 +1481,317 @@ S31508005C5800043146FFF7DAFFB0F1FF3F09D004F137
S31508005C68010415F8010F0028F3D104E04FF00004E9 S31508005C68010415F8010F0028F3D104E04FF00004E9
S31508005C7801E04FF0FF34204670BD00BF7F282DD9BC S31508005C7801E04FF0FF34204670BD00BF7F282DD9BC
S31508005C8811B9C7280BD121E0FF2825D8A0F1800033 S31508005C8811B9C7280BD121E0FF2825D8A0F1800033
S31508005C9846F6D822C0F6000232F8100070474FF0D0 S31508005C9846F6FC22C0F6000232F8100070474FF0AC
S31508005CA8010346F6D822C0F6000232F8021F8142DE S31508005CA8010346F6FC22C0F6000232F8021F8142BA
S31508005CB815D10DE032F8021F814209D003F101031C S31508005CB815D10DE032F8021F814209D003F101031C
S31508005CC89BB232F8021F81420DD101E04FF0000362 S31508005CC89BB232F8021F81420DD101E04FF0000362
S31508005CD803F18000C0B270474FF00000704703F127 S31508005CD803F18000C0B270474FF00000704703F127
S31508005CE801039BB2E6E703F101039BB2802BE1D1DE S31508005CE801039BB2E6E703F101039BB2802BE1D1DE
S31508005CF8EEE700BF61280ED046F6F801C0F60001A7 S31508005CF8EEE700BF61280ED046F61C11C0F6000173
S31508005D084FF0000202F1010231F8023F5BB183420B S31508005D084FF0000202F1010231F8023F5BB183420B
S31508005D18F8D113B970474FF0000246F6D830C0F6E6 S31508005D18F8D113B970474FF0000246F6FC30C0F6C2
S31508005D28000030F81200704730B402464CF6CD44ED S31508005D28000030F81200704730B402464CF6CD44ED
S31508005D38CCF6CC4401F10101A4FB0223DA08F9D117 S31508005D38CCF6CC4401F10101A4FB0223DA08F9D117
S31508005D484FF0000501F8015902464CF6CD45CCF648 S31508005D484FF0000501F8015902464CF6CD45CCF648
S31508005D58CC450846A5FB02434FEAD30303EB830465 S31508005D58CC450846A5FB02434FEAD30303EB830465
S31508005D68A2EB440202F1300201F801291A46002B77 S31508005D68A2EB440202F1300201F801291A46002B77
S31508005D78EFD130BC704700BF38B50546007800F04B S31508005D78EFD130BC704700BF38B50546007800F04B
S31508005D8821FCC0B2A0F13004E4B2162C20D8A0F148 S31508005D8833FCC0B2A0F13004E4B2162C20D8A0F136
S31508005D983A02D1B206291ED9092C84BFA0F13704C4 S31508005D983A02D1B206291ED9092C84BFA0F13704C4
S31508005DA8E4B2687800F00EFCC0B2A0F13003D9B2AC S31508005DA8E4B2687800F020FCC0B2A0F13003D9B29A
S31508005DB8162913D8A0F13A02D3B2062B11D9092904 S31508005DB8162913D8A0F13A02D3B2062B11D9092904
S31508005DC884BFA0F13701C9B201EB0414E0B238BDAB S31508005DC884BFA0F13701C9B201EB0414E0B238BDAB
S31508005DD84FF0000038BD4FF0000038BD4FF0000006 S31508005DD84FF0000038BD4FF0000038BD4FF0000006
S31508005DE838BD4FF0000038BD08B500F00F03092884 S31508005DE838BD4FF0000038BD08B500F00F03092884
S31508005DF802D903F1370008BD03F1300000F0E2FBD1 S31508005DF802D903F1370008BD03F1300000F0F4FBBF
S31508005E08C0B208BD38B505460C464FEA1010FFF76C S31508005E08C0B208BD38B505460C464FEA1010FFF76C
S31508005E18EBFF207005F00F00FFF7E6FF60704FF004 S31508005E18EBFF207005F00F00FFF7E6FF60704FF004
S31508005E280003A370204638BD2DE9F04F85B080469B S31508005E280003A370204638BD08B54FF0000040F6B9
S31508005E381646894601B138B946F6B850C0F6000084 S31508005E384C23C2F20003187040F65821C2F200013A
S31508005E484FF41671FCF752FF98F8000000F0BAFBF9 S31508005E48FFF70CFA38B146F6DC50C0F600004FF0FA
S31508005E58532840F0DA8098F8010000F0ABFB0028D8 S31508005E587C01FCF74BFF08BD40F64C23C2F2000351
S31508005E6800F0D38098F80130312B00F0D180322B1E S31508005E681878D0F1010038BF0020704708B5FCF74C
S31508005E7800F0D180332B40F0C880CFE02046FFF7EA S31508005E78DBFF01280FD040F64C23C2F2000318783E
S31508005E887BFF3918CFB205F1FF3204F1020495B247 S31508005E8860B9FCF72FF901280BD140F64C21C2F26C
S31508005E982046FFF771FF3B18DFB205F1FF3085B2E0 S31508005E980001087008BD4FF0000008BD4FF000006B
S31508005EA804F10204012DE9D82046FFF765FF6FEAD9 S31508005EA808BD4FF0000008BD10B50446007800F09C
S31508005EB80701CFB2874240F0A180BAF1010F32D06C S31508005EB89BFB53280DD1607800F08EFB60B16078A3
S31508005EC8BAF1000F04D0BAF1020F40F09A805CE0EC S31508005EC831280CD032280DD0332814BF03200220DD
S31508005ED80198FFF751FF05460298FFF74DFF4FEA6D S31508005ED810BD4FF0030010BD4FF0030010BD4FF082
S31508005EE80024C9F8004008F10600FFF745FF231803 S31508005EE8000010BD4FF0010010BD00BFF8B504460C
S31508005EF8C9F8003008F10808A5F10305ADB2002E67 S31508005EF800F10200FFF740FF0646054604F10404D0
S31508005F0800F081802FB2002F7DDD4FF00004404657 S31508005F0800F001072046FFF737FF3018C6B205F13B
S31508005F18FFF732FF305508F1020804F10104A4B26C S31508005F18FF318DB204F10204012D21D815E020467F
S31508005F28BC42F4DB6FE00198FFF726FF05460298A6 S31508005F28FFF72AFF3018C6B205F1FF3504F1020457
S31508005F38FFF722FF4FEA0044C9F8004008F10600B7 S31508005F38ADB22046FFF720FF3118CEB205F1FF3281
S31508005F48FFF71AFF04EB0024C9F8004008F1080017 S31508005F4895B204F10204012DE9D82046FFF714FF9B
S31508005F58FFF712FF2018C9F8000008F10A08A5F18A S31508005F586FEA0603DEB2864214BF00200120F8BDA8
S31508005F680405ADB2002E4ED02FB2002F4BDD4FF0F0 S31508005F683FB2002FDBD02046FFF706FF3218D6B21D
S31508005F7800044046FFF700FF305508F1020804F10F S31508005F7805F1FF339DB204F10204012DCFD8E4E7F9
S31508005F880104A4B2BC42F4DB3DE00198FFF7F4FE35 S31508005F882DE9F04104461546884601B138B946F662
S31508005F9805460298FFF7F0FE4FEA0064C9F8004084 S31508005F98DC50C0F6000040F23621FCF7A7FE204682
S31508005FA808F10600FFF7E8FE04EB0044C9F80040CC S31508005FA8FFF782FF0646032800F0B0802046FFF771
S31508005FB808F10800FFF7E0FE04EB0024C9F80040E2 S31508005FB89DFF002800F0AD80012E34D01EB1022EB8
S31508005FC808F10A00FFF7D8FE2218C9F8002008F1D8 S31508005FC840F0AA8065E004F10200FFF7D5FE07460F
S31508005FD80C08A5F10505ADB2AEB12FB2002F12DD3A S31508005FD804F10400FFF7D0FE4FEA0026C8F800606F
S31508005FE84FF000044046FFF7C7FE305508F102088F S31508005FE804F10600FFF7C8FE3118C8F8001004F1D6
S31508005FF804F10104A4B2BC42F4DB04E04FF6FF75D1 S31508005FF80804A7F10307BFB2002D00F08F800FFA37
S3150800600801E04FF0000528B224E04FF00005FAE752 S3150800600887F8B8F1000F40F389804FF0000620465C
S315080060184FF0000A04E04FF0010A01E04FF0020AC7 S31508006018FFF7B2FEA85504F1020406F10106B6B266
S3150800602808F102000190FFF7A7FE044608F10401EB S315080060284645F4DB7AE004F10200FFF7A5FE0746C9
S315080060380291039100F0010B0846FFF79DFE22180E S3150800603804F10400FFF7A0FE4FEA0046C8F800601E
S31508006048D7B204F1FF339DB2039C04F10204012D73 S3150800604804F10600FFF798FE06EB0026C8F800607C
S3150800605803D829E705B0BDE8F08F0FFA8BF00028BA S3150800605804F10800FFF790FE3218C8F8002004F18A
S315080060683FF40CAF2046FFF787FE3F18FFB205F14D S315080060680A04A7F10407BFB2002D57D00FFA87F81C
S31508006078FF35ADB204F10204012D3FF6FFAE13E772 S31508006078B8F1000F52DD4FF000062046FFF77CFE08
S3150800608808B54FF0000040F65023C2F20003187016 S31508006088A85504F1020406F10106B6B24645F4DB42
S3150800609840F65C21C2F20001FFF7E0F838B146F68F S3150800609844E004F10200FFF76FFE074604F1040026
S315080060A8B850C0F600004FF09E01FCF71FFE08BD69 S315080060A8FFF76AFE4FEA0066C8F8006004F10600C2
S315080060B840F65023C2F200031878D0F1010038BF21 S315080060B8FFF762FE06EB0046C8F8006004F1080020
S315080060C80020704708B5FCF7AFFE01280FD040F648 S315080060C8FFF75AFE06EB0026C8F8006004F10A0036
S315080060D85023C2F20003187860B9FCF703F80128C0 S315080060D8FFF752FE3018C8F8000004F10C04A7F1BF
S315080060E80BD140F65021C2F20001087008BD4FF0E6 S315080060E80507BFB2D5B10FFA87F8B8F1000F15DD65
S315080060F8000008BD4FF0000008BD4FF0000008BDBD S315080060F84FF000062046FFF73FFEA85504F10204B4
S3150800610870B540F65023C2F200031878002800F04C S3150800610806F10106B6B24645F4DB07E04FF000078C
S315080061184D82012843D1FCF70FF846F62C60C0F6E5 S3150800611804E04FF6FF7701E04FF0000738B2BDE814
S315080061280000FCF757F846F65060C0F60000FCF782 S31508006128F08100BF70B540F64C23C2F20003187818
S3150800613851F8FBF7FBFF0146C6484FF00102FFF787 S31508006138002800F04D82012843D1FBF7FDFF46F6FB
S31508006148A7F850B146F67860C0F60000FCF742F8A2 S315080061485060C0F60000FCF745F846F67460C0F6DD
S315080061584FF00100FCF72EF870BD46F68060C0F6D1 S315080061580000FCF73FF8FBF7E9FF0146C6484FF091
S315080061680000FCF737F846F68860C0F60000FCF72A S315080061680102FFF795F850B146F69C60C0F60000A4
S3150800617831F846F6AC60C0F60000FCF72BF840F696 S31508006178FCF730F84FF00100FCF71CF870BD46F63E
S315080061885423C2F200034FF000021A605A6040F620 S31508006188A460C0F60000FCF725F846F6AC60C0F631
S315080061985020C2F200004FF00201017070BD0228BB S315080061980000FCF71FF846F6D060C0F60000FCF7CA
S315080061A840F0088140F65C24C2F2000440F6B46068 S315080061A819F840F65023C2F200034FF000021A60AD
S315080061B8C2F200004FF4807104F50D72FFF7F6FC81 S315080061B85A6040F64C20C2F200004FF00201017006
S315080061C894F93A12002915DA46F67860C0F60000FE S315080061C870BD022840F0088140F65824C2F200043F
S315080061D8FCF700F84FF00200FBF7ECFF04F50D702A S315080061D840F6B060C2F200004FF4807104F50D7203
S315080061E8FFF768FB40F65020C2F200004FF00001A6 S315080061E8FFF7E4FC94F93A12002915DA46F69C609A
S315080061F8017070BD18B340F6B466C2F200063046A0 S315080061F8C0F60000FBF7EEFF4FF00200FBF7DAFFE8
S3150800620806F5C0714FF00002FFF70EFE0646B0F11C S3150800620804F50D70FFF756FB40F64C20C2F2000065
S31508006218FF3F14D146F67860C0F60000FBF7DAFFB0 S315080062184FF00001017070BD18B340F6B066C2F2BF
S315080062284FF00300FBF7C6FF8A48FFF743FB40F623 S315080062280006304606F5C0714FF00002FFF7A8FED3
S315080062385023C2F200034FF000021A7070BD32B242 S315080062380646B0F1FF3F14D146F69C60C0F600004A
S31508006248002A2CDD40F65423C2F20003586868B9C0 S31508006248FBF7C8FF4FF00300FBF7B4FF8A48FFF7D0
S3150800625840F65421C2F2000140F6B463C2F20003C4 S3150800625831FB40F64C23C2F200034FF000021A70D5
S31508006268D3F88001086036B24E6018E040F6B4618B S3150800626870BD32B2002A2CDD40F65023C2F2000374
S31508006278C2F20001D1F8802140F65423C2F2000385 S31508006278586868B940F65021C2F2000140F6B06382
S3150800628819688A4204D240F65423C2F200031A60F7 S31508006288C2F20003D3F88001086036B24E6018E0FF
S3150800629800FA86F040F65422C2F20002506040F630 S3150800629840F6B061C2F20001D1F8802140F65023D9
S315080062A85C21C2F20001D1F83C22D1F840329A4268 S315080062A8C2F2000319688A4204D240F65023C2F2A1
S315080062B840F07C8167484FF00001FFF707FBA0B163 S315080062B800031A6000FA86F040F65022C2F200027D
S315080062C846F67860C0F60000FBF784FF4FF0040036 S315080062C8506040F65821C2F20001D1F83C22D1F8B4
S315080062D8FBF770FF5F48FFF7EDFA40F65020C2F269 S315080062D840329A4240F07C8167484FF00001FFF748
S315080062E800004FF00001017070BD46F68060C0F6E8 S315080062E8F5FAA0B146F69C60C0F60000FBF772FF07
S315080062F80000FBF76FFF46F6DC60C0F60000FBF708 S315080062F84FF00400FBF75EFF5F48FFF7DBFA40F64E
S3150800630869FF40F65424C2F2000440F61025C2F28A S315080063084C20C2F200004FF00001017070BD46F63D
S31508006318000560682946FFF707FD2846FBF75AFF78 S31508006318A460C0F60000FBF75DFF46F60070C0F6FD
S3150800632846F6E860C0F60000FBF754FFE078294611 S315080063280000FBF757FF40F65024C2F2000440F677
S31508006338FFF768FDA07805F10201FFF763FD6078AD S315080063380C25C2F2000560682946FFF7F5FC2846D1
S3150800634805F10401FFF75EFD207805F10601FFF760 S31508006348FBF748FF46F60C70C0F60000FBF742FF5D
S3150800635859FD2846FBF73EFF46F68C70C0F6000046 S31508006358E0782946FFF756FDA07805F10201FFF710
S31508006368FBF738FF20686168FCF748FBA0B946F6D2 S3150800636851FD607805F10401FFF74CFD207805F129
S315080063787860C0F60000FBF72DFF4FF00500FBF725 S315080063780601FFF747FD2846FBF72CFF46F6B070DF
S3150800638819FF3448FFF796FA40F65023C2F200037D S31508006388C0F60000FBF726FF20686168FCF736FBB5
S315080063984FF000021A7070BD46F68060C0F600001D S31508006398A0B946F69C60C0F60000FBF71BFF4FF055
S315080063A8FBF718FF40F65020C2F200004FF0030131 S315080063A80500FBF707FF3448FFF784FA40F64C2345
S315080063B8017070BD032840F0F98040F65C24C2F2EB S315080063B8C2F200034FF000021A7070BD46F6A460D8
S315080063C8000440F6B460C2F200004FF4807104F588 S315080063C8C0F60000FBF706FF40F64C20C2F20000B4
S315080063D80D72FFF7EBFB94F93A12002915DA46F61F S315080063D84FF00301017070BD032840F0F98040F6BC
S315080063E80470C0F60000FBF7F5FE4FF00200FBF755 S315080063E85824C2F2000440F6B060C2F200004FF426
S315080063F8E1FE04F50D70FFF75DFA40F65023C2F288 S315080063F8807104F50D72FFF7D9FB94F93A12002952
S3150800640800034FF00000187070BD28B340F6B46258 S3150800640815DA46F62870C0F60000FBF7E3FE4FF0EB
S31508006418C2F20002104602F5C07102F58072FFF753 S315080064180200FBF7CFFE04F50D70FFF74BFA40F6BE
S3150800642803FD0546B0F1FF3F16D146F62870C0F6BB S315080064284C23C2F200034FF00000187070BD28B361
S315080064380000FBF7CFFE4FF00300FBF7BBFE05484D S3150800643840F6B062C2F20002104602F5C07102F5D3
S31508006448FFF738FA40F65021C2F200014FF0000271 S315080064488072FFF79DFD0546B0F1FF3F16D146F667
S315080064580A7070BD900C00202BB2002B5EDD46F644 S315080064584C70C0F60000FBF7BDFE4FF00300FBF7D3
S315080064684C70C0F60000FBF7B5FE2EB240F61024B5 S31508006468A9FE0548FFF726FA40F64C21C2F20001B4
S31508006478C2F2000430462146FFF756FC2046FBF7D1 S315080064784FF000020A7070BD8C0C00202BB2002B5E
S31508006488A9FE46F65C70C0F60000FBF7A3FE40F6C8 S315080064885EDD46F67070C0F60000FBF7A3FE2EB276
S31508006498B465C2F2000595F883012146FFF7B2FCF8 S3150800649840F60C24C2F2000430462146FFF744FCB5
S315080064A895F8820104F10201FFF7ACFC95F8810121 S315080064A82046FBF797FE46F68070C0F60000FBF715
S315080064B804F10401FFF7A6FC95F8800104F106012A S315080064B891FE40F6B065C2F2000595F883012146BB
S315080064C8FFF7A0FC2046FBF785FE46F68C70C0F65B S315080064C8FFF7A0FC95F8820104F10201FFF79AFC90
S315080064D80000FBF77FFED5F88001314605F5807286 S315080064D895F8810104F10401FFF794FC95F8800109
S315080064E8FCF788FAA0B946F67860C0F60000FBF70C S315080064E804F10601FFF78EFC2046FBF773FE46F615
S315080064F871FE4FF00600FBF75DFE2D48FFF7DAF947 S315080064F8B070C0F60000FBF76DFED5F8800131468E
S3150800650840F65023C2F200034FF00000187070BD21 S3150800650805F58072FCF776FAA0B946F69C60C0F6DF
S3150800651846F68060C0F60000FBF75CFE40F65C2095 S315080065180000FBF75FFE4FF00600FBF74BFE2D4821
S31508006528C2F20000D0F83C12D0F8402291423DD180 S31508006528FFF7C8F940F64C23C2F200034FF0000003
S3150800653846F67470C0F60000FBF74CFEFCF766FAE0 S31508006538187070BD46F6A460C0F60000FBF74AFE60
S31508006548A0B946F67860C0F60000FBF743FE4FF0A0 S3150800654840F65820C2F20000D0F83C12D0F8402293
S315080065580700FBF72FFE1648FFF7ACF940F650215F S3150800655891423DD146F69870C0F60000FBF73AFE20
S31508006568C2F200014FF000020A7070BD46F680605C S31508006568FCF754FAA0B946F69C60C0F60000FBF79B
S31508006578C0F60000FBF72EFE46F69070C0F600003F S3150800657831FE4FF00700FBF71DFE1648FFF79AF99C
S31508006588FBF728FE0A48FFF795F946F6A870C0F6FD S3150800658840F64C21C2F200014FF000020A7070BDB5
S315080065980000FBF71FFE40F65023C2F200034FF037 S3150800659846F6A460C0F60000FBF71CFE46F6B47083
S315080065A800001870FBF7E4FDFBF798FE70BD00BF06 S315080065A8C0F60000FBF716FE0A48FFF783F946F619
S315080065B8900C0020A0F1300009288CBF002001208B S315080065B8CC70C0F60000FBF70DFE40F64C23C2F27D
S315080065C8704700BFA0F16103D9B2192998BF2038CE S315080065C800034FF000001870FBF7D2FDFBF786FEB4
S315080065D8704700BF844640EA010313F0030F40F0F2 S315080065D870BD00BF8C0C0020A0F1300009288CBFC4
S315080065E81080242AC0F00D802DE9F00FB1E8F80FC5 S315080065E800200120704700BFA0F16103D9B219291C
S315080065F8A0E8F80FA2F12402242ABFF4F7AFBDE8F1 S315080065F898BF2038704700BF844640EA010313F065
S31508006608F00F002A00F0078011F8013B00F8013B5B S31508006608030F40F01080242AC0F00D802DE9F00F02
S31508006618013A7FF4F9AF6046704700BF38B50446BB S31508006618B1E8F80FA0E8F80FA2F12402242ABFF47B
S315080066280D4600F019F841F23803C2F200031D605E S31508006628F7AFBDE8F00F002A00F0078011F8013B24
S3150800663844F0800441F23C00C2F2000004600246BD S3150800663800F8013B013A7FF4F9AF6046704700BF9E
S3150800664811680029FCD100F009F841F23803C2F2B2 S3150800664838B504460D4600F019F841F23403C2F28B
S315080066580003186838BD00BF704700BF704700BF01 S3150800665800031D6044F0800441F23800C2F20000CD
S315080066682F64656D6F70726F675F6F6C696D65789B S315080066680460024611680029FCD100F009F841F2D5
S315080066785F73746D3332653430372E737265630011 S315080066783403C2F20003186838BD00BF704700BF6C
S315080066882F626F6F746C6F672E7478740000000041 S30908006688704700BF8A
S31508006698433A2F576F726B2F736F667477617265FB S3150800668C2F64656D6F70726F675F6F6C696D657877
S315080066A82F4F70656E424C542F5461726765742F6C S3150800669C5F73746D3332653430372E7372656300ED
S315080066B844656D6F2F41524D434D345F53544D33E6 S315080066AC2F626F6F746C6F672E747874000000001D
S315080066C8325F4F6C696D65785F53544D3332453484 S315080066BC433A2F576F726B2F736F667477617265D7
S315080066D830375F43726F7373776F726B732F426FBE S315080066CC2F4F70656E424C542F5461726765742F48
S315080066E86F742F6964652F2E2E2F2E2E2F2E2E2F80 S315080066DC44656D6F2F41524D434D345F53544D33C2
S315080066F82E2E2F536F757263652F41524D434D34B5 S315080066EC325F4F6C696D65785F53544D3332453460
S315080067085F53544D33322F43726F7373776F726BBF S315080066FC30375F43726F7373776F726B732F426F9A
S31508006718732F766563746F72732E63000000080022 S3150800670C6F742F6964652F2E2E2F2E2E2F2E2E2F5B
S3150800672810001800200028003000380040004800F3 S3150800671C2E2E2F536F757263652F41524D434D3490
S31508006738500058008000880090009800A000A80023 S3150800672C5F53544D33322F43726F7373776F726B9B
S31508006748B000B800C000C800D000D8000080000813 S3150800673C732F766563746F72732E630000000800FE
S31508006758004000000200000000C0000800400000D9 S3150800674C10001800200028003000380040004800CF
S315080067680300000000000108000001000400000002 S3150800675C500058008000880090009800A000A800FF
S3150800677800000208000002000500000000000408E6 S3150800676CB000B800C000C800D000D80000800008EF
S3150800678800000200060000000000060800000200DB S3150800677C004000000200000000C0000800400000B5
S3150800679807000000000008080000020008000000C2 S3150800678C03000000000001080000010004000000DE
S315080067A800000A08000002000900000000000C08A2 S3150800679C00000208000002000500000000000408C2
S315080067B8000002000A00000000000E08000002009F S315080067AC00000200060000000000060800000200B7
S315080067C80B000000433A2F576F726B2F736F66746E S315080067BC070000000000080800000200080000009E
S315080067D8776172652F4F70656E424C542F546172FB S315080067CC00000A08000002000900000000000C087E
S315080067E86765742F44656D6F2F41524D434D345F6D S315080067DC000002000A00000000000E08000002007B
S315080067F853544D33325F4F6C696D65785F53544D0A S315080067EC0B000000433A2F576F726B2F736F66744A
S315080068083332453430375F43726F7373776F726B01 S315080067FC776172652F4F70656E424C542F546172D7
S31508006818732F426F6F742F6964652F2E2E2F2E2EB5 S3150800680C6765742F44656D6F2F41524D434D345F48
S315080068282F2E2E2F2E2E2F536F757263652F4152DA S3150800681C53544D33325F4F6C696D65785F53544DE5
S315080068384D434D345F53544D33322F756172742E60 S3150800682C3332453430375F43726F7373776F726BDD
S31508006848630000004F70656E424C5400222A3A3C99 S3150800683C732F426F6F742F6964652F2E2E2F2E2E91
S315080068583E3F7C7F000000002B2C3B3D5B5D000023 S3150800684C2F2E2E2F2E2E2F536F757263652F4152B6
S31508006868809A90418E418F804545454949498E8F82 S3150800685C4D434D345F53544D33322F756172742E3C
S315080068789092924F994F555559999A9B9C9D9E9FD0 S3150800686C630000004F70656E424C5400222A3A3C75
S3150800688841494F55A5A5A6A7A8A9AAABAC21AEAF5D S3150800687C3E3F7C7F000000002B2C3B3D5B5D0000FF
S31508006898B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF6A S3150800688C809A90418E418F804545454949498E8F5E
S315080068A8C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF5A S3150800689C9092924F994F555559999A9B9C9D9E9FAC
S315080068B8D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF4A S315080068AC41494F55A5A5A6A7A8A9AAABAC21AEAF39
S315080068C8E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF3A S315080068BCB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF46
S315080068D8F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF2A S315080068CCC0C1C2C3C4C5C6C7C8C9CACBCCCDCECF36
S315080068E801030507090E10121416181C1E000000CD S315080068DCD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF26
S315080068F8610062006300640065006600670068005E S315080068ECE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF16
S3150800690869006A006B006C006D006E006F0070000D S315080068FCF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF06
S3150800691871007200730074007500760077007800BD S3150800690C01030507090E10121416181C1E000000A8
S3150800692879007A00A100A200A300A500AC00AF0078 S3150800691C6100620063006400650066006700680039
S31508006938E000E100E200E300E400E500E600E70025 S3150800692C69006A006B006C006D006E006F007000E9
S31508006948E800E900EA00EB00EC00ED00EE00EF00D5 S3150800693C7100720073007400750076007700780099
S31508006958F000F100F200F300F400F500F600F80084 S3150800694C79007A00A100A200A300A500AC00AF0054
S31508006968F900FA00FB00FC00FD00FE00FF0001012B S3150800695CE000E100E200E300E400E500E600E70001
S3150800697803010501070109010B010D010F011101A9 S3150800696CE800E900EA00EB00EC00ED00EE00EF00B1
S3150800698813011501170119011B011D011F01210119 S3150800697CF000F100F200F300F400F500F600F80060
S3150800699823012501270129012B012D012F01310189 S3150800698CF900FA00FB00FC00FD00FE00FF00010107
S315080069A83301350137013A013C013E0140014201F4 S3150800699C03010501070109010B010D010F01110185
S315080069B84401460148014B014D014F01510153015C S315080069AC13011501170119011B011D011F012101F5
S315080069C85501570159015B015D015F0161016301C9 S315080069BC23012501270129012B012D012F01310165
S315080069D86501670169016B016D016F017101730139 S315080069CC3301350137013A013C013E0140014201D0
S315080069E8750177017A017C017E019201B103B20330 S315080069DC4401460148014B014D014F015101530138
S315080069F8B303B403B503B603B703B803B903BA03B5 S315080069EC5501570159015B015D015F0161016301A5
S31508006A08BB03BC03BD03BE03BF03C003C103C30363 S315080069FC6501670169016B016D016F017101730115
S31508006A18C403C503C603C703C803C903CA033004A6 S31508006A0C750177017A017C017E019201B103B2030B
S31508006A28310432043304340435043604370438048C S31508006A1CB303B403B503B603B703B803B903BA0390
S31508006A3839043A043B043C043D043E043F0440043C S31508006A2CBB03BC03BD03BE03BF03C003C103C3033F
S31508006A4841044204430444044504460447044804EC S31508006A3CC403C503C603C703C803C903CA03300482
S31508006A5849044A044B044C044D044E044F0451049B S31508006A4C3104320433043404350436043704380468
S31508006A685204530454045504560457045804590444 S31508006A5C39043A043B043C043D043E043F04400418
S31508006A785A045B045C045E045F0470217121722168 S31508006A6C41044204430444044504460447044804C8
S31508006A8873217421752176217721782179217A2134 S31508006A7C49044A044B044C044D044E044F04510477
S31508006A987B217C217D217E217F2141FF42FF43FF07 S31508006A8C5204530454045504560457045804590420
S31508006AA844FF45FF46FF47FF48FF49FF4AFF4BFF9C S31508006A9C5A045B045C045E045F0470217121722144
S31508006AB84CFF4DFF4EFF4FFF50FF51FF52FF53FF4C S31508006AAC73217421752176217721782179217A2110
S31508006AC854FF55FF56FF57FF58FF59FF5AFF000056 S31508006ABC7B217C217D217E217F2141FF42FF43FFE3
S31508006AD8C700FC00E900E200E400E000E500E70082 S31508006ACC44FF45FF46FF47FF48FF49FF4AFF4BFF78
S31508006AE8EA00EB00E800EF00EE00EC00C400C50081 S31508006ADC4CFF4DFF4EFF4FFF50FF51FF52FF53FF28
S31508006AF8C900E600C600F400F600F200FB00F9003B S31508006AEC54FF55FF56FF57FF58FF59FF5AFF000032
S31508006B08FF00D600DC00A200A300A500A72092017A S31508006AFCC700FC00E900E200E400E000E500E7005E
S31508006B18E100ED00F300FA00F100D100AA00BA007E S31508006B0CEA00EB00E800EF00EE00EC00C400C5005C
S31508006B28BF001023AC00BD00BC00A100AB00BB0031 S31508006B1CC900E600C600F400F600F200FB00F90016
S31508006B389125922593250225242561256225562522 S31508006B2CFF00D600DC00A200A300A500A720920156
S31508006B4855256325512557255D255C255B25102583 S31508006B3CE100ED00F300FA00F100D100AA00BA005A
S31508006B58142534252C251C2500253C255E255F256E S31508006B4CBF001023AC00BD00BC00A100AB00BB000D
S31508006B685A25542569256625602550256C256725E7 S31508006B5C91259225932502252425612562255625FE
S31508006B7868256425652559255825522553256B25E5 S31508006B6C55256325512557255D255C255B2510255F
S31508006B886A2518250C25882584258C259025802591 S31508006B7C142534252C251C2500253C255E255F254A
S31508006B98B103DF009303C003A303C303B500C4030B S31508006B8C5A25542569256625602550256C256725C3
S31508006BA8A6039803A903B4031E22C603B50329221C S31508006B9C68256425652559255825522553256B25C1
S31508006BB86122B1006522642220232123F700482296 S31508006BAC6A2518250C25882584258C25902580256D
S31508006BC8B0001922B7001A227F20B200A025A0001B S31508006BBCB103DF009303C003A303C303B500C403E7
S31508006BD8410042004300440045004600470048007B S31508006BCCA6039803A903B4031E22C603B5032922F8
S31508006BE849004A004B004C004D004E004F0050002B S31508006BDC6122B1006522642220232123F700482272
S31508006BF851005200530054005500560057005800DB S31508006BECB0001922B7001A227F20B200A025A000F7
S31508006C0859005A002100E0FFE1FFE5FFE2FFE3FF34 S31508006BFC4100420043004400450046004700480057
S31508006C18C000C100C200C300C400C500C600C70042 S31508006C0C49004A004B004C004D004E004F00500006
S31508006C28C800C900CA00CB00CC00CD00CE00CF00F2 S31508006C1C51005200530054005500560057005800B6
S31508006C38D000D100D200D300D400D500D600D800A1 S31508006C2C59005A002100E0FFE1FFE5FFE2FFE3FF10
S31508006C48D900DA00DB00DC00DD00DE00780100018F S31508006C3CC000C100C200C300C400C500C600C7001E
S31508006C5802010401060108010A010C010E011001CE S31508006C4CC800C900CA00CB00CC00CD00CE00CF00CE
S31508006C6812011401160118011A011C011E0120013E S31508006C5CD000D100D200D300D400D500D600D8007D
S31508006C7822012401260128012A012C012E013001AE S31508006C6CD900DA00DB00DC00DD00DE00780100016B
S31508006C8832013401360139013B013D013F01410119 S31508006C7C02010401060108010A010C010E011001AA
S31508006C984301450147014A014C014E015001520181 S31508006C8C12011401160118011A011C011E0120011A
S31508006CA85401560158015A015C015E0160016201EE S31508006C9C22012401260128012A012C012E0130018A
S31508006CB86401660168016A016C016E01700172015E S31508006CAC32013401360139013B013D013F014101F5
S31508006CC87401760179017B017D0191019103920393 S31508006CBC4301450147014A014C014E01500152015D
S31508006CD893039403950396039703980399039A03D2 S31508006CCC5401560158015A015C015E0160016201CA
S31508006CE89B039C039D039E039F03A003A103A30381 S31508006CDC6401660168016A016C016E01700172013A
S31508006CF8A403A503A603A703A803A903AA031004C4 S31508006CEC7401760179017B017D019101910392036F
S31508006D0811041204130414041504160417041804A9 S31508006CFC93039403950396039703980399039A03AE
S31508006D1819041A041B041C041D041E041F04200459 S31508006D0C9B039C039D039E039F03A003A103A3035C
S31508006D282104220423042404250426042704280409 S31508006D1CA403A503A603A703A803A903AA0310049F
S31508006D3829042A042B042C042D042E042F040104E8 S31508006D2C1104120413041404150416041704180485
S31508006D4802040304040405040604070408040904E1 S31508006D3C19041A041B041C041D041E041F04200435
S31508006D580A040B040C040E040F0460216121622145 S31508006D4C21042204230424042504260427042804E5
S31508006D6863216421652166216721682169216A21D1 S31508006D5C29042A042B042C042D042E042F040104C4
S31508006D786B216C216D216E216F2121FF22FF23FFD4 S31508006D6C02040304040405040604070408040904BD
S31508006D8824FF25FF26FF27FF28FF29FF2AFF2BFFB9 S31508006D7C0A040B040C040E040F0460216121622121
S31508006D982CFF2DFF2EFF2FFF30FF31FF32FF33FF69 S31508006D8C63216421652166216721682169216A21AD
S31508006DA834FF35FF36FF37FF38FF39FF3AFF000053 S31508006D9C6B216C216D216E216F2121FF22FF23FFB0
S31508006DB8433A2F576F726B2F736F667477617265D4 S31508006DAC24FF25FF26FF27FF28FF29FF2AFF2BFF95
S31508006DC82F4F70656E424C542F5461726765742F45 S31508006DBC2CFF2DFF2EFF2FFF30FF31FF32FF33FF45
S31508006DD844656D6F2F41524D434D345F53544D33BF S31508006DCC34FF35FF36FF37FF38FF39FF3AFF00002F
S31508006DE8325F4F6C696D65785F53544D333245345D S31508006DDC433A2F576F726B2F736F667477617265B0
S31508006DF830375F43726F7373776F726B732F426F97 S31508006DEC2F4F70656E424C542F5461726765742F21
S31508006E086F742F6964652F2E2E2F2E2E2F2E2E2F58 S31508006DFC44656D6F2F41524D434D345F53544D339B
S31508006E182E2E2F536F757263652F66696C652E6300 S31508006E0C325F4F6C696D65785F53544D3332453438
S31508006E28000000004669726D7761726520757064A6 S31508006E1C30375F43726F7373776F726B732F426F72
S31508006E386174652072657175657374206465746517 S31508006E2C6F742F6964652F2E2E2F2E2E2F2E2E2F34
S31508006E48637465640A0D00004F70656E696E672085 S31508006E3C2E2E2F536F757263652F66696C652E63DC
S31508006E586669726D776172652066696C6520666F0A S31508006E4C000000004669726D776172652075706482
S31508006E68722072656164696E672E2E2E0000000016 S31508006E5C61746520726571756573742064657465F3
S31508006E784552524F520A0D004F4B0A0D00000000AA S31508006E6C637465640A0D00004F70656E696E672061
S31508006E885374617274696E67207468652070726FCE S31508006E7C6669726D776172652066696C6520666FE6
S31508006E986772616D6D696E672073657175656E6376 S31508006E8C722072656164696E672E2E2E00000000F2
S31508006EA8650A0D0050617273696E67206669726DAE S31508006E9C4552524F520A0D004F4B0A0D0000000086
S31508006EB8776172652066696C6520746F206F6274E5 S31508006EAC5374617274696E67207468652070726FAA
S31508006EC861696E2065726173652073697A652E2E0D S31508006EBC6772616D6D696E672073657175656E6352
S31508006ED82E00000045726173696E67200000000085 S31508006ECC650A0D0050617273696E67206669726D8A
S31508006EE82062797465732066726F6D206D656D6FA3 S31508006EDC776172652066696C6520746F206F6274C1
S31508006EF87279206174203078000000005265616458 S31508006EEC61696E2065726173652073697A652E2EE9
S31508006F08696E67206C696E652066726F6D206669A2 S31508006EFC2E00000045726173696E67200000000061
S31508006F186C652E2E2E4552524F520A0D000000005F S31508006F0C2062797465732066726F6D206D656D6F7E
S31508006F28496E76616C696420636865636B73756D11 S31508006F1C7279206174203078000000005265616433
S31508006F3820666F756E642E2E2E4552524F520A0DD4 S31508006F2C696E67206C696E652066726F6D2066697E
S31508006F480000000050726F6772616D6D696E672088 S31508006F3C6C652E2E2E4552524F520A0D000000003B
S31508006F580000000020627974657320746F206D65DF S31508006F4C496E76616C696420636865636B73756DED
S31508006F686D6F7279206174203078000057726974E1 S31508006F5C20666F756E642E2E2E4552524F520A0DB0
S31508006F78696E672070726F6772616D2063686563F2 S31508006F6C0000000050726F6772616D6D696E672064
S31508006F886B73756D2E2E2E00436C6F73696E6720B2 S31508006F7C0000000020627974657320746F206D65BB
S31508006F986669726D776172652066696C650A0D00A7 S31508006F8C6D6F7279206174203078000057726974BD
S31508006FA84669726D776172652075706461746520CB S31508006F9C696E672070726F6772616D2063686563CE
S31508006FB87375636365737366756C6C7920636F6D37 S31508006FAC6B73756D2E2E2E00436C6F73696E67208E
S31108006FC8706C657465640A0D000000001A S31508006FBC6669726D776172652066696C650A0D0083
S31508006FD40100000001000000000000000102030493 S31508006FCC4669726D776172652075706461746520A7
S30D08006FE401020304060708096F S31508006FDC7375636365737366756C6C7920636F6D13
S31108006FEC706C657465640A0D00000000F6
S31508006FF8010000000100000000000000010203046F
S30D0800700801020304060708094A
S70508000217D9 S70508000217D9

View File

@ -61,6 +61,33 @@
/**************************************************************************************** /****************************************************************************************
* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N * C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N
****************************************************************************************/ ****************************************************************************************/
/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE
* configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed
* in bits/second. Two CAN messages are reserved for communication with the host. The
* message identifier for sending data from the target to the host is configured with
* BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with
* BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data
* transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and
* BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more
* than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the
* CAN controller channel.
*
*/
/** \brief Enable/disable CAN transport layer. */
#define BOOT_COM_CAN_ENABLE (0)
/** \brief Configure the desired CAN baudrate. */
#define BOOT_COM_CAN_BAUDRATE (500000)
/** \brief Configure CAN message ID target->host. */
#define BOOT_COM_CAN_TX_MSG_ID (0x7E1)
/** \brief Configure number of bytes in the target->host CAN message. */
#define BOOT_COM_CAN_TX_MAX_DATA (8)
/** \brief Configure CAN message ID host->target. */
#define BOOT_COM_CAN_RX_MSG_ID (0x667)
/** \brief Configure number of bytes in the host->target CAN message. */
#define BOOT_COM_CAN_RX_MAX_DATA (8)
/** \brief Select the desired CAN peripheral as a zero based index. */
#define BOOT_COM_CAN_CHANNEL_INDEX (1)
/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE /* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE
* configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed * configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed
* in bits/second. The maximum amount of data bytes in a message for data transmission * in bits/second. The maximum amount of data bytes in a message for data transmission

View File

@ -102,6 +102,8 @@
<file file_name="../../../../Source/ARMCM4_STM32/types.h"/> <file file_name="../../../../Source/ARMCM4_STM32/types.h"/>
<file file_name="../../../../Source/ARMCM4_STM32/uart.c"/> <file file_name="../../../../Source/ARMCM4_STM32/uart.c"/>
<file file_name="../../../../Source/ARMCM4_STM32/uart.h"/> <file file_name="../../../../Source/ARMCM4_STM32/uart.h"/>
<file file_name="../../../../Source/ARMCM4_STM32/can.c"/>
<file file_name="../../../../Source/ARMCM4_STM32/can.h"/>
</folder> </folder>
<file file_name="../../../../Source/assert.c"/> <file file_name="../../../../Source/assert.c"/>
<file file_name="../../../../Source/assert.h"/> <file file_name="../../../../Source/assert.h"/>

View File

@ -63,7 +63,8 @@
<Watches active="0" update="Never" /> <Watches active="0" update="Never" />
</Watch4> </Watch4>
<Files> <Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\main.c" y="54" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\main.c" left="18" selected="1" name="unnamed" top="35" /> <SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\main.c" y="54" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\main.c" left="18" selected="0" name="unnamed" top="50" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\blt_conf.h" y="99" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot\blt_conf.h" left="0" selected="1" name="unnamed" top="72" />
</Files> </Files>
<ARMCrossStudioWindow activeProject="openbtl_olimex_stm32e407" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Boot" fileDialogDefaultFilter="" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" /> <ARMCrossStudioWindow activeProject="openbtl_olimex_stm32e407" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Source\ARMCM4_STM32" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session> </session>

View File

@ -79,6 +79,8 @@ static void Init(void)
#elif (BOOT_FILE_SYS_ENABLE > 0) #elif (BOOT_FILE_SYS_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure; USART_InitTypeDef USART_InitStructure;
#elif (BOOT_COM_CAN_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
#endif #endif
/* disable all interrupts to prevent possible jump back to the user program */ /* disable all interrupts to prevent possible jump back to the user program */
@ -134,6 +136,24 @@ static void Init(void)
/* enable UART */ /* enable UART */
USART_Cmd(USART6, ENABLE); USART_Cmd(USART6, ENABLE);
#endif #endif
#if (BOOT_COM_CAN_ENABLE > 0)
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
#endif
} /*** end of Init ***/ } /*** end of Init ***/

View File

@ -182,4 +182,184 @@ static unsigned char UartReceiveByte(unsigned char *data)
#endif /* BOOT_COM_UART_ENABLE > 0 */ #endif /* BOOT_COM_UART_ENABLE > 0 */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E
****************************************************************************************/
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
unsigned char tseg1; /**< CAN time segment 1 */
unsigned char tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return 1 if the CAN bustiming register values were found, 0 otherwise.
**
****************************************************************************************/
static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned short *prescaler,
unsigned char *tseg1, unsigned char *tseg2)
{
unsigned char cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return 1;
}
}
}
/* could not find a good bus timing configuration */
return 0;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN communication interface.
** \return none.
**
****************************************************************************************/
void BootComInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
unsigned short prescaler;
unsigned char tseg1, tseg2;
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
/* CAN register init */
CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);
/* obtain the bittiming configuration for this baudrate */
CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
/* CAN controller init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
/* CAN Baudrate init */
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = tseg1 - 1;
CAN_InitStructure.CAN_BS2 = tseg2 - 1;
CAN_InitStructure.CAN_Prescaler = prescaler;
CAN_Init(CAN2, &CAN_InitStructure);
/* CAN filter init - receive all messages */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
} /*** end of BootComInit ***/
/************************************************************************************//**
** \brief Receives the CONNECT request from the host, which indicates that the
** bootloader should be activated and, if so, activates it.
** \return none.
**
****************************************************************************************/
void BootComCheckActivationRequest(void)
{
CanRxMsg RxMessage;
/* check if a new message was received */
if (CAN_MessagePending(CAN2, CAN_FIFO0) > 0)
{
/* receive the message */
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);
if (RxMessage.StdId == BOOT_COM_CAN_RX_MSG_ID)
{
/* check if this was an XCP CONNECT command */
if ((RxMessage.Data[0] == 0xff) && (RxMessage.Data[1] == 0x00))
{
/* connection request received so start the bootloader */
BootActivate();
}
}
}
} /*** end of BootComCheckActivationRequest ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of boot.c *************************************/ /*********************************** end of boot.c *************************************/

View File

@ -50,9 +50,9 @@
</TraceWindow> </TraceWindow>
<Watch1> <Watch1>
<Watches active="1" update="Never" > <Watches active="1" update="Never" >
<Watchpoint linenumber="124" radix="-1" name="free_running_counter_now" expression="free_running_counter_now" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="152" radix="-1" name="free_running_counter_accumulative" expression="free_running_counter_accumulative" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="121" radix="-1" name="free_running_counter_last" expression="free_running_counter_last" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" /> <Watchpoint linenumber="121" radix="-1" name="free_running_counter_last" expression="free_running_counter_last" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="152" radix="-1" name="free_running_counter_accumulative" expression="free_running_counter_accumulative" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
<Watchpoint linenumber="124" radix="-1" name="free_running_counter_now" expression="free_running_counter_now" filename="d:/usr/feaser/software/openblt/target/source/armcm3_stm32/timer.c" />
</Watches> </Watches>
</Watch1> </Watch1>
<Watch2> <Watch2>
@ -65,8 +65,8 @@
<Watches active="0" update="Never" /> <Watches active="0" update="Never" />
</Watch4> </Watch4>
<Files> <Files>
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\main.c" y="52" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\main.c" left="0" selected="0" name="unnamed" top="48" /> <SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\main.c" y="68" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\main.c" left="0" selected="0" name="unnamed" top="39" />
<SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\led.c" y="40" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\led.c" left="0" selected="1" name="unnamed" top="40" /> <SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="0" debugPath="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\boot.c" y="21" path="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\boot.c" left="0" selected="1" name="unnamed" top="21" />
</Files> </Files>
<ARMCrossStudioWindow activeProject="demoprog_olimex_stm32e407" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\lib\stdperiphlib" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" /> <ARMCrossStudioWindow activeProject="demoprog_olimex_stm32e407" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Work\software\OpenBLT\Target\Demo\ARMCM4_STM32_Olimex_STM32E407_Crossworks\Prog\lib\stdperiphlib" fileDialogDefaultFilter="*.c" autoConnectCapabilities="266111" debugSearchPath="" buildConfiguration="THUMB Debug" />
</session> </session>

View File

@ -7,38 +7,40 @@ start address 0x08000000
Program Header: Program Header:
LOAD off 0x00008000 vaddr 0x08000000 paddr 0x08000000 align 2**15 LOAD off 0x00008000 vaddr 0x08000000 paddr 0x08000000 align 2**15
filesz 0x00005d40 memsz 0x00005d40 flags r-x filesz 0x00005d6c memsz 0x00005d6c flags r-x
LOAD off 0x00010000 vaddr 0x20000000 paddr 0x08005d40 align 2**15 LOAD off 0x00010000 vaddr 0x20000000 paddr 0x08005d6c align 2**15
filesz 0x0000001c memsz 0x0000183c flags rw- filesz 0x0000001c memsz 0x0000001c flags rw-
LOAD off 0x00010020 vaddr 0x20000020 paddr 0x08005d90 align 2**15
filesz 0x00000000 memsz 0x0000181c flags rw-
private flags = 5000002: [Version5 EABI] [has entry point] private flags = 5000002: [Version5 EABI] [has entry point]
Sections: Sections:
Idx Name Size VMA LMA File off Algn Idx Name Size VMA LMA File off Algn
0 .text 00005d40 08000000 08000000 00008000 2**2 0 .text 00005d6c 08000000 08000000 00008000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000001c 20000000 08005d40 00010000 2**2 1 .data 0000001c 20000000 08005d6c 00010000 2**2
CONTENTS, ALLOC, LOAD, DATA CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000181c 20000020 08005d60 0001001c 2**3 2 .bss 0000181c 20000020 08005d90 00010020 2**3
ALLOC ALLOC
3 .debug_info 0000e4c2 00000000 00000000 0001001c 2**0 3 .debug_info 0000e4fb 00000000 00000000 0001001c 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
4 .debug_abbrev 000027f8 00000000 00000000 0001e4de 2**0 4 .debug_abbrev 000027b8 00000000 00000000 0001e517 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
5 .debug_loc 0000ac20 00000000 00000000 00020cd6 2**0 5 .debug_loc 0000ad42 00000000 00000000 00020ccf 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
6 .debug_aranges 00000be8 00000000 00000000 0002b8f6 2**0 6 .debug_aranges 00000bf8 00000000 00000000 0002ba11 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
7 .debug_ranges 00000cb0 00000000 00000000 0002c4de 2**0 7 .debug_ranges 00000c58 00000000 00000000 0002c609 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
8 .debug_line 00004696 00000000 00000000 0002d18e 2**0 8 .debug_line 000046cc 00000000 00000000 0002d261 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
9 .debug_str 0000380f 00000000 00000000 00031824 2**0 9 .debug_str 0000381b 00000000 00000000 0003192d 2**0
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
10 .comment 00000030 00000000 00000000 00035033 2**0 10 .comment 00000030 00000000 00000000 00035148 2**0
CONTENTS, READONLY CONTENTS, READONLY
11 .ARM.attributes 00000033 00000000 00000000 00035063 2**0 11 .ARM.attributes 00000033 00000000 00000000 00035178 2**0
CONTENTS, READONLY CONTENTS, READONLY
12 .debug_frame 00001f1c 00000000 00000000 00035098 2**2 12 .debug_frame 00001f40 00000000 00000000 000351ac 2**2
CONTENTS, READONLY, DEBUGGING CONTENTS, READONLY, DEBUGGING
SYMBOL TABLE: SYMBOL TABLE:
08000000 l d .text 00000000 .text 08000000 l d .text 00000000 .text
@ -57,9 +59,9 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000 vectors.c 00000000 l df *ABS* 00000000 vectors.c
00000000 l df *ABS* 00000000 cstart.c 00000000 l df *ABS* 00000000 cstart.c
080001ca l F .text 00000000 zero_loop2 080001ca l F .text 00000000 zero_loop2
08005248 l F .text 00000000 zero_loop 08005274 l F .text 00000000 zero_loop
00000000 l df *ABS* 00000000 hooks.c 00000000 l df *ABS* 00000000 hooks.c
080053e8 l O .text 00000020 firmwareFilename 08005414 l O .text 00000020 firmwareFilename
20000020 l O .bss 00000228 logfile 20000020 l O .bss 00000228 logfile
00000000 l df *ABS* 00000000 main.c 00000000 l df *ABS* 00000000 main.c
00000000 l df *ABS* 00000000 mmc.c 00000000 l df *ABS* 00000000 mmc.c
@ -111,21 +113,21 @@ SYMBOL TABLE:
080032b4 l F .text 00000258 dir_register 080032b4 l F .text 00000258 dir_register
20000318 l O .bss 00000200 LfnBuf 20000318 l O .bss 00000200 LfnBuf
20000518 l O .bss 00000002 Fsid 20000518 l O .bss 00000002 Fsid
0800542c l O .text 00000080 ExCvt 08005458 l O .text 00000080 ExCvt
080054ac l O .text 0000000d LfnOfs 080054d8 l O .text 0000000d LfnOfs
2000051c l O .bss 00000004 FatFs 2000051c l O .bss 00000004 FatFs
00000000 l df *ABS* 00000000 unicode.c 00000000 l df *ABS* 00000000 unicode.c
080054bc l O .text 000001e0 tbl_lower.4261 080054e8 l O .text 000001e0 tbl_lower.4261
0800569c l O .text 00000100 Tbl 080056c8 l O .text 00000100 Tbl
0800579c l O .text 000001e0 tbl_upper.4262 080057c8 l O .text 000001e0 tbl_upper.4262
00000000 l df *ABS* 00000000 boot.c 00000000 l df *ABS* 00000000 boot.c
00000000 l df *ABS* 00000000 com.c 00000000 l df *ABS* 00000000 com.c
20000520 l O .bss 00000001 comEntryStateConnect 20000520 l O .bss 00000001 comEntryStateConnect
20000524 l O .bss 00000040 xcpCtoReqPacket.4367 20000524 l O .bss 00000040 xcpCtoReqPacket.4386
00000000 l df *ABS* 00000000 xcp.c 00000000 l df *ABS* 00000000 xcp.c
08004038 l F .text 00000010 XcpProtectResources 08004038 l F .text 00000010 XcpProtectResources
08004048 l F .text 00000018 XcpSetCtoError 08004048 l F .text 00000018 XcpSetCtoError
0800597c l O .text 00000008 xcpStationId 080059a8 l O .text 00000008 xcpStationId
20000564 l O .bss 0000004c xcpInfo 20000564 l O .bss 0000004c xcpInfo
00000000 l df *ABS* 00000000 backdoor.c 00000000 l df *ABS* 00000000 backdoor.c
200005b0 l O .bss 00000001 backdoorOpen 200005b0 l O .bss 00000001 backdoorOpen
@ -136,7 +138,6 @@ SYMBOL TABLE:
08004480 l F .text 00000024 FileLibByteToHexString 08004480 l F .text 00000024 FileLibByteToHexString
080044a4 l F .text 00000048 FileLibLongToIntString 080044a4 l F .text 00000048 FileLibLongToIntString
080044ec l F .text 00000064 FileLibHexStringToByte 080044ec l F .text 00000064 FileLibHexStringToByte
08004550 l F .text 0000020c SrecParseLine
200005b8 l O .bss 00000040 loggingStr 200005b8 l O .bss 00000040 loggingStr
200005f8 l O .bss 00000001 firmwareUpdateState 200005f8 l O .bss 00000001 firmwareUpdateState
200005fc l O .bss 00000008 eraseInfo 200005fc l O .bss 00000008 eraseInfo
@ -147,21 +148,21 @@ SYMBOL TABLE:
20000be4 l O .bss 00000004 assert_failure_line 20000be4 l O .bss 00000004 assert_failure_line
00000000 l df *ABS* 00000000 cpu.c 00000000 l df *ABS* 00000000 cpu.c
00000000 l df *ABS* 00000000 flash.c 00000000 l df *ABS* 00000000 flash.c
08004c08 l F .text 00000044 FlashGetSector 08004c34 l F .text 00000044 FlashGetSector
08004c4c l F .text 0000007c FlashWriteBlock 08004c78 l F .text 0000007c FlashWriteBlock
08004cc8 l F .text 00000030 FlashInitBlock 08004cf4 l F .text 00000030 FlashInitBlock
08004cf8 l F .text 00000044 FlashSwitchBlock 08004d24 l F .text 00000044 FlashSwitchBlock
08004d3c l F .text 00000092 FlashAddToBlock 08004d68 l F .text 00000092 FlashAddToBlock
08005b44 l O .text 00000030 flashSectorNumToMask 08005b70 l O .text 00000030 flashSectorNumToMask
08005b74 l O .text 00000078 flashLayout 08005ba0 l O .text 00000078 flashLayout
20000be8 l O .bss 00000204 bootBlockInfo 20000be8 l O .bss 00000204 bootBlockInfo
20000dec l O .bss 00000204 blockInfo 20000dec l O .bss 00000204 blockInfo
00000000 l df *ABS* 00000000 uart.c 00000000 l df *ABS* 00000000 uart.c
08004fc8 l F .text 0000002c UartReceiveByte 08004ff4 l F .text 0000002c UartReceiveByte
08004ff4 l F .text 0000003c UartTransmitByte 08005020 l F .text 0000003c UartTransmitByte
20000ff0 l O .bss 00000001 xcpCtoRxLength.7754 20000ff0 l O .bss 00000041 xcpCtoReqPacket.7772
20000ff1 l O .bss 00000001 xcpCtoRxInProgress.7755 20001034 l O .bss 00000001 xcpCtoRxLength.7773
20000ff4 l O .bss 00000041 xcpCtoReqPacket.7753 20001035 l O .bss 00000001 xcpCtoRxInProgress.7774
00000000 l df *ABS* 00000000 nvm.c 00000000 l df *ABS* 00000000 nvm.c
00000000 l df *ABS* 00000000 timer.c 00000000 l df *ABS* 00000000 timer.c
20001038 l O .bss 00000004 millisecond_counter 20001038 l O .bss 00000004 millisecond_counter
@ -170,14 +171,14 @@ SYMBOL TABLE:
00000000 l df *ABS* 00000000 00000000 l df *ABS* 00000000
00000800 l *ABS* 00000000 __STACKSIZE__ 00000800 l *ABS* 00000000 __STACKSIZE__
08003fc0 g F .text 00000034 ComInit 08003fc0 g F .text 00000034 ComInit
08004de8 g F .text 00000054 FlashWrite 08004e14 g F .text 00000054 FlashWrite
08003e40 g F .text 0000005e f_gets 08003e40 g F .text 0000005e f_gets
080016fc g F .text 00000020 FLASH_Unlock 080016fc g F .text 00000020 FLASH_Unlock
08004b9c g F .text 00000018 AssertFailure 08004bc8 g F .text 00000018 AssertFailure
0800260c g F .text 0000010a get_fat 0800260c g F .text 0000010a get_fat
08005210 g F .text 0000005c reset_handler 0800523c g F .text 0000005c reset_handler
08001910 g F .text 00000038 GPIO_PinAFConfig 08001910 g F .text 00000038 GPIO_PinAFConfig
080051cc g F .text 00000020 TimerUpdate 080051f8 g F .text 00000020 TimerUpdate
0800408c g F .text 00000010 XcpPacketTransmitted 0800408c g F .text 00000010 XcpPacketTransmitted
08003ff4 g F .text 00000018 ComTask 08003ff4 g F .text 00000018 ComTask
08001b70 g F .text 0000000c SDIO_ClearFlag 08001b70 g F .text 0000000c SDIO_ClearFlag
@ -186,48 +187,50 @@ SYMBOL TABLE:
08004020 g F .text 00000010 ComSetConnectEntryState 08004020 g F .text 00000010 ComSetConnectEntryState
08001aa8 g F .text 0000000c SDIO_SetPowerState 08001aa8 g F .text 0000000c SDIO_SetPowerState
08003f8c g F .text 0000001c BootInit 08003f8c g F .text 0000001c BootInit
08004618 g F .text 00000042 FileSrecVerifyChecksum
0800442c g F .text 00000020 BackDoorInit 0800442c g F .text 00000020 BackDoorInit
08001ca8 g F .text 0000000c USART_GetFlagStatus 08001ca8 g F .text 0000000c USART_GetFlagStatus
08004450 g F .text 00000002 CopService 08004450 g F .text 00000002 CopService
08005d40 g .text 00000000 _etext 08005d6c g .text 00000000 _etext
080012e0 g F .text 000001b8 SD_WriteBlock 080012e0 g F .text 000001b8 SD_WriteBlock
08003f5c g F .text 00000030 ff_wtoupper 08003f5c g F .text 00000030 ff_wtoupper
08005274 g F .text 00000174 memcpy 080052a0 g F .text 00000174 memcpy
080047d0 g F .text 000003cc FileTask 080047fc g F .text 000003cc FileTask
08005190 g F .text 00000010 TimerReset 080051bc g F .text 00000010 TimerReset
08001534 g F .text 00000034 disk_initialize 08001534 g F .text 00000034 disk_initialize
08000c1c g F .text 000002e0 SD_GetCardInfo 08000c1c g F .text 000002e0 SD_GetCardInfo
08001b5c g F .text 00000014 SDIO_GetFlagStatus 08001b5c g F .text 00000014 SDIO_GetFlagStatus
08001c9c g F .text 0000000c USART_ReceiveData 08001c9c g F .text 0000000c USART_ReceiveData
08003fa8 g F .text 00000018 BootTask 08003fa8 g F .text 00000018 BootTask
080014e8 g F .text 0000002e SD_GetState 080014e8 g F .text 0000002e SD_GetState
08004ee0 g F .text 00000050 FlashWriteChecksum 08004f0c g F .text 00000050 FlashWriteChecksum
08000efc g F .text 00000084 SD_EnableWideBusOperation 08000efc g F .text 00000084 SD_EnableWideBusOperation
08001a18 g F .text 0000001c RCC_APB2PeriphClockCmd 08001a18 g F .text 0000001c RCC_APB2PeriphClockCmd
08001af0 g F .text 0000000c SDIO_GetCommandResponse 08001af0 g F .text 0000000c SDIO_GetCommandResponse
08004010 g F .text 0000000e ComTransmitPacket 08004010 g F .text 0000000e ComTransmitPacket
08001860 g F .text 000000a2 GPIO_Init 08001860 g F .text 000000a2 GPIO_Init
08001568 g F .text 00000028 disk_status 08001568 g F .text 00000028 disk_status
0800465c g F .text 000001a0 FileSrecParseLine
08001c70 g F .text 00000020 USART_Cmd 08001c70 g F .text 00000020 USART_Cmd
08001680 g F .text 00000074 disk_ioctl 08001680 g F .text 00000074 disk_ioctl
0800479c g F .text 00000034 FileHandleFirmwareUpdateRequest 08004590 g F .text 00000034 FileHandleFirmwareUpdateRequest
08003204 g F .text 000000b0 gen_numname 08003204 g F .text 000000b0 gen_numname
08000280 g F .text 00000038 FileFirmwareUpdateCompletedHook 08000280 g F .text 00000038 FileFirmwareUpdateCompletedHook
0800407c g F .text 00000010 XcpIsConnected 0800407c g F .text 00000010 XcpIsConnected
08003d70 g F .text 000000d0 f_unlink 08003d70 g F .text 000000d0 f_unlink
0800515c g F .text 00000008 NvmInit 08005188 g F .text 00000008 NvmInit
08004dd0 g F .text 00000018 FlashInit 08004dfc g F .text 00000018 FlashInit
0800171c g F .text 00000010 FLASH_Lock 0800171c g F .text 00000010 FLASH_Lock
2000103c g .bss 00000000 _ebss 2000103c g .bss 00000000 _ebss
08003ea0 g F .text 00000038 f_putc 08003ea0 g F .text 00000038 f_putc
08003ed8 g F .text 00000036 f_puts 08003ed8 g F .text 00000036 f_puts
080051fc g F .text 00000014 UnusedISR 08005228 g F .text 00000014 UnusedISR
08001a9c g F .text 0000000c SDIO_ClockCmd 08001a9c g F .text 0000000c SDIO_ClockCmd
0800400c g F .text 00000002 ComFree 0800400c g F .text 00000002 ComFree
08001b18 g F .text 0000002c SDIO_DataConfig 08001b18 g F .text 0000002c SDIO_DataConfig
08005030 g F .text 00000044 UartInit 0800505c g F .text 00000044 UartInit
08001948 g F .text 000000b4 RCC_GetClocksFreq 08001948 g F .text 000000b4 RCC_GetClocksFreq
0800516c g F .text 00000008 NvmErase 08005198 g F .text 00000008 NvmErase
08001b7c g F .text 000000f4 USART_Init 08001b7c g F .text 000000f4 USART_Init
20000020 g .bss 00000000 _bss 20000020 g .bss 00000000 _bss
08003b50 g F .text 00000016 f_close 08003b50 g F .text 00000016 f_close
@ -236,46 +239,47 @@ SYMBOL TABLE:
0800172c g F .text 0000000c FLASH_ClearFlag 0800172c g F .text 0000000c FLASH_ClearFlag
08001780 g F .text 00000034 FLASH_WaitForLastOperation 08001780 g F .text 00000034 FLASH_WaitForLastOperation
080036d8 g F .text 000001c4 f_read 080036d8 g F .text 000001c4 f_read
08004f88 g F .text 00000040 FlashDone 08004fb4 g F .text 00000040 FlashDone
08000fb0 g F .text 00000174 SD_Init 08000fb0 g F .text 00000174 SD_Init
08000188 g F .text 00000068 EntryFromProg 08000188 g F .text 00000068 EntryFromProg
08000f80 g F .text 00000030 SD_SelectDeselect 08000f80 g F .text 00000030 SD_SelectDeselect
08001ac4 g F .text 0000002c SDIO_SendCommand 08001ac4 g F .text 0000002c SDIO_SendCommand
080016f4 g F .text 00000008 get_fattime 080016f4 g F .text 00000008 get_fattime
08004060 g F .text 0000001c XcpInit 08004060 g F .text 0000001c XcpInit
0800475c g F .text 0000002c FileInit 08004550 g F .text 0000002c FileInit
08001b44 g F .text 0000000c SDIO_ReadData 08001b44 g F .text 0000000c SDIO_ReadData
08004e3c g F .text 000000a4 FlashErase 08004e68 g F .text 000000a4 FlashErase
080002b8 g F .text 00000018 FileFirmwareUpdateErrorHook 080002b8 g F .text 00000018 FileFirmwareUpdateErrorHook
08000324 g F .text 0000008c main 08000324 g F .text 0000008c main
080017f0 g F .text 00000070 FLASH_EraseSector 080017f0 g F .text 00000070 FLASH_EraseSector
08003a9c g F .text 000000b4 f_sync 08003a9c g F .text 000000b4 f_sync
08001498 g F .text 00000050 SD_SendStatus 08001498 g F .text 00000050 SD_SendStatus
0800517c g F .text 00000014 NvmDone 080045c4 g F .text 00000054 FileSrecGetLineType
080051a8 g F .text 00000014 NvmDone
0800350c g F .text 0000002c f_mount 0800350c g F .text 0000002c f_mount
08005074 g F .text 00000064 UartTransmitPacket 080050a0 g F .text 00000064 UartTransmitPacket
08005174 g F .text 00000008 NvmVerifyChecksum 080051a0 g F .text 00000008 NvmVerifyChecksum
08004bdc g F .text 00000024 CpuMemCopy 08004c08 g F .text 00000024 CpuMemCopy
08001afc g F .text 0000001c SDIO_GetResponse 08001afc g F .text 0000001c SDIO_GetResponse
08001cb4 g F .text 000000f8 SystemInit 08001cb4 g F .text 000000f8 SystemInit
080027c4 g F .text 0000012e put_fat 080027c4 g F .text 0000012e put_fat
08003b68 g F .text 000001bc f_lseek 08003b68 g F .text 000001bc f_lseek
080050d8 g F .text 00000084 UartReceivePacket 08005104 g F .text 00000084 UartReceivePacket
0800024c g F .text 00000008 FileGetFirmwareFilenameHook 0800024c g F .text 00000008 FileGetFirmwareFilenameHook
08001124 g F .text 000001bc SD_ReadBlock 08001124 g F .text 000001bc SD_ReadBlock
20000000 g .data 00000000 _data 20000000 g .data 00000000 _data
08003d24 g F .text 0000004c f_stat 08003d24 g F .text 0000004c f_stat
0800444c g F .text 00000002 CopInit 0800444c g F .text 00000002 CopInit
08004c00 g F .text 00000008 CpuReset 08004c2c g F .text 00000008 CpuReset
080007d0 g F .text 0000002c SD_Detect 080007d0 g F .text 0000002c SD_Detect
08005164 g F .text 00000008 NvmWrite 08005190 g F .text 00000008 NvmWrite
08004bb4 g F .text 00000028 CpuStartUserProgram 08004be0 g F .text 00000028 CpuStartUserProgram
080025ec g F .text 0000001e clust2sect 080025ec g F .text 0000001e clust2sect
2000183c g .bss 00000000 _estack 2000183c g .bss 00000000 _estack
08001c90 g F .text 0000000c USART_SendData 08001c90 g F .text 0000000c USART_SendData
08004f30 g F .text 00000058 FlashVerifyChecksum 08004f5c g F .text 00000058 FlashVerifyChecksum
2000001c g .data 00000000 _edata 2000001c g .data 00000000 _edata
08004788 g F .text 00000014 FileIsIdle 0800457c g F .text 00000014 FileIsIdle
0800389c g F .text 00000200 f_write 0800389c g F .text 00000200 f_write
08000000 g O .text 00000188 _vectab 08000000 g O .text 00000188 _vectab
08003538 g F .text 000001a0 f_open 08003538 g F .text 000001a0 f_open
@ -283,7 +287,7 @@ SYMBOL TABLE:
080002d0 g F .text 00000054 FileFirmwareUpdateLogHook 080002d0 g F .text 00000054 FileFirmwareUpdateLogHook
20000018 g O .data 00000004 __ctype_ptr__ 20000018 g O .data 00000004 __ctype_ptr__
08004030 g F .text 00000008 ComIsConnected 08004030 g F .text 00000008 ComIsConnected
08005c3c g O .text 00000101 _ctype_ 08005c68 g O .text 00000101 _ctype_
08001a6c g F .text 00000030 SDIO_Init 08001a6c g F .text 00000030 SDIO_Init
08000204 g F .text 00000048 FileIsFirmwareUpdateRequestedHook 08000204 g F .text 00000048 FileIsFirmwareUpdateRequestedHook
080007fc g F .text 00000270 SD_PowerON 080007fc g F .text 00000270 SD_PowerON
@ -293,11 +297,11 @@ SYMBOL TABLE:
2000103c g .bss 00000000 _stack 2000103c g .bss 00000000 _stack
08001a34 g F .text 0000001c RCC_APB2PeriphResetCmd 08001a34 g F .text 0000001c RCC_APB2PeriphResetCmd
08003f10 g F .text 0000004c ff_convert 08003f10 g F .text 0000004c ff_convert
080051ec g F .text 00000010 TimerGet 08005218 g F .text 00000010 TimerGet
08001ab4 g F .text 00000010 SDIO_GetPowerState 08001ab4 g F .text 00000010 SDIO_GetPowerState
08000a6c g F .text 000001b0 SD_InitializeCards 08000a6c g F .text 000001b0 SD_InitializeCards
08001904 g F .text 0000000c GPIO_ReadInputDataBit 08001904 g F .text 0000000c GPIO_ReadInputDataBit
080051a0 g F .text 0000002c TimerInit 080051cc g F .text 0000002c TimerInit
08001b50 g F .text 0000000c SDIO_WriteData 08001b50 g F .text 0000000c SDIO_WriteData
08000254 g F .text 0000002c FileFirmwareUpdateStartedHook 08000254 g F .text 0000002c FileFirmwareUpdateStartedHook
08001a50 g F .text 0000001c SDIO_DeInit 08001a50 g F .text 0000001c SDIO_DeInit

View File

@ -1,48 +1,48 @@
S024000062696E2F6F70656E62746C5F6F6C696D65785F73746D3332653430372E737265639F S024000062696E2F6F70656E62746C5F6F6C696D65785F73746D3332653430372E737265639F
S315080000003C18002011520008FD510008FD51000857 S315080000003C1800203D5200082952000829520008D1
S31508000010FD510008FD510008FD510008FD5100087A S3150800001029520008295200082952000829520008C6
S31508000020FD510008FD510008FD510008FD5100086A S3150800002029520008295200082952000829520008B6
S31508000030FD510008FD510008FD510008FD5100085A S3150800003029520008295200082952000829520008A6
S31508000040FD510008FD510008FD510008FD5100084A S315080000402952000829520008295200082952000896
S31508000050FD510008FD510008FD510008FD5100083A S315080000502952000829520008295200082952000886
S31508000060FD510008FD510008FD510008FD5100082A S315080000602952000829520008295200082952000876
S31508000070FD510008FD510008FD510008FD5100081A S315080000702952000829520008295200082952000866
S31508000080FD510008FD510008FD510008FD5100080A S315080000802952000829520008295200082952000856
S31508000090FD510008FD510008FD510008FD510008FA S315080000902952000829520008295200082952000846
S315080000A0FD510008FD510008FD510008FD510008EA S315080000A02952000829520008295200082952000836
S315080000B0FD510008FD510008FD510008FD510008DA S315080000B02952000829520008295200082952000826
S315080000C0FD510008FD510008FD510008FD510008CA S315080000C02952000829520008295200082952000816
S315080000D0FD510008FD510008FD510008FD510008BA S315080000D02952000829520008295200082952000806
S315080000E0FD510008FD510008FD510008FD510008AA S315080000E029520008295200082952000829520008F6
S315080000F0FD510008FD510008FD510008FD5100089A S315080000F029520008295200082952000829520008E6
S31508000100FD510008FD510008FD510008FD51000889 S3150800010029520008295200082952000829520008D5
S31508000110FD510008FD510008FD510008FD51000879 S3150800011029520008295200082952000829520008C5
S31508000120FD510008FD510008FD510008FD51000869 S3150800012029520008295200082952000829520008B5
S31508000130FD510008FD510008FD510008FD51000859 S3150800013029520008295200082952000829520008A5
S31508000140FD510008FD510008FD510008FD51000849 S315080001402952000829520008295200082952000895
S31508000150FD510008FD510008FD510008FD51000839 S315080001502952000829520008295200082952000885
S31508000160FD510008FD510008FD510008FD51000829 S315080001602952000829520008295200082952000875
S31508000170FD510008FD510008FD510008FD51000819 S315080001702952000829520008295200082952000865
S31508000180FD510008FD51000810B572B61848194906 S31508000180295200082952000810B572B618481949AC
S31508000190016019498D46124B124A9A4211D202F150 S31508000190016019498D46124B124A9A4211D202F150
S315080001A00403114CE41A24F0030404F104044FF088 S315080001A00403114CE41A24F0030404F104044FF088
S315080001B0000310460D495A581A5003F10403A34286 S315080001B0000310460D495A581A5003F10403A34286
S315080001C0F9D10E480E494FF000028842B8BF40F8F0 S315080001C0F9D10E480E494FF000028842B8BF40F8F0
S315080001D0042BFFF6FAAF03F023FF00F0A3F810BDD7 S315080001D0042BFFF6FAAF03F023FF00F0A3F810BDD7
S315080001E01C000020000000201F000020405D0008C1 S315080001E01C000020000000201F0000206C5D000895
S315080001F008ED00E0000000083C1800202000002060 S315080001F008ED00E0000000083C1800202000002060
S315080002003C10002000B589B04FF00003009301931D S315080002003C10002000B589B04FF00003009301931D
S315080002100293039304930593069307930A48694642 S315080002100293039304930593069307930A48694642
S3150800022003F080FD40B9009B4BB19DF8080080F0B3 S3150800022003F080FD40B9009B4BB19DF8080080F0B3
S315080002301000C0F3001004E04FF0000001E04FF09A S315080002301000C0F3001004E04FF0000001E04FF09A
S31508000240000009B000BD00BFE85300080048704729 S31508000240000009B000BD00BF1454000800487047FC
S31508000250E853000808B508484FF0000380F8243230 S315080002501454000808B508484FF0000380F8243203
S3150800026006494FF00A0203F067F920B94FF0010278 S3150800026006494FF00A0203F067F920B94FF0010278
S31508000270014B83F8242208BD2000002008540008FA S31508000270014B83F8242208BD2000002034540008CE
S3150800028038B50A4B93F82432012B02D1074803F0FC S3150800028038B50A4B93F82432012B02D1074803F0FC
S315080002905FFC074D4FF040042846214601F004FD57 S315080002905FFC074D4FF040042846214601F004FD57
S315080002A00028F9D0034803F063FD38BD200000207C S315080002A00028F9D0034803F063FD38BD200000207C
S315080002B000140140E853000808B5044B93F82432AB S315080002B0001401401454000808B5044B93F824327E
S315080002C0012B02D1014803F043FC08BD20000020A1 S315080002C0012B02D1014803F043FC08BD20000020A1
S315080002D070B50646114B93F82432012B0BD10F4902 S315080002D070B50646114B93F82432012B0BD10F4902
S315080002E003F0FAFD002806DA0C484FF0000380F800 S315080002E003F0FAFD002806DA0C484FF0000380F800
@ -347,13 +347,13 @@ S31508001580FE021A70014B187808BD00BF040000203F
S315080015902DE9F043ADF5037D88461746C8B120E02E S315080015902DE9F043ADF5037D88461746C8B120E02E
S315080015A04FF000094FF40075E619009502A84FEAB6 S315080015A04FF000094FF40075E619009502A84FEAB6
S315080015B046224B46FFF7B6FDB0B9FFF7ADFF012847 S315080015B046224B46FFF7B6FDB0B9FFF7ADFF012847
S315080015C0FBD008EB442002A92A4603F053FE8CB947 S315080015C0FBD008EB442002A92A4603F069FE8CB931
S315080015D00DE003F1FF34E4B2002BE1D14FF0010036 S315080015D00DE003F1FF34E4B2002BE1D14FF0010036
S315080015E00CE04FF0010009E04FF0010006E04FF073 S315080015E00CE04FF0010009E04FF0010006E04FF073
S315080015F0000003E004F1FF34E4B2D5E70DF5037DFE S315080015F0000003E004F1FF34E4B2D5E70DF5037DFE
S31508001600BDE8F0832DE9F043ADF5037D0F4690461E S31508001600BDE8F0832DE9F043ADF5037D0F4690461E
S31508001610E0B123E04FF400754FF0000902A807EB8C S31508001610E0B123E04FF400754FF0000902A807EB8C
S3150800162044212A4603F026FE04EB0806009502A884 S3150800162044212A4603F03CFE04EB0806009502A86E
S315080016304FEA46224B46FFF753FE08B1052810D15C S315080016304FEA46224B46FFF753FE08B1052810D15C
S31508001640FFF76AFF0128FBD08CB90DE003F1FF34E0 S31508001640FFF76AFF0128FBD08CB90DE003F1FF34E0
S31508001650E4B2002BDED14FF001000CE04FF00100A0 S31508001650E4B2002BDED14FF001000CE04FF00100A0
@ -714,7 +714,7 @@ S31508002C70D04620465946FFF7A1FE074600283FF4EE
S31508002C805BAF10E04FF004070DE006F1FF365FFA80 S31508002C805BAF10E04FF004070DE006F1FF365FFA80
S31508002C9086F8DDF80890ECE7049C00E0049CDDF873 S31508002C9086F8DDF80890ECE7049C00E0049CDDF873
S31508002CA00890D046E5E7384607B0BDE8F08F00BF84 S31508002CA00890D046E5E7384607B0BDE8F08F00BF84
S31508002CB0AC5400082DE9F04F85B0824688460B785B S31508002CB0D85400082DE9F04F85B0824688460B782F
S31508002CC02F2B01D05C2B01D108F101084FF000032E S31508002CC02F2B01D05C2B01D108F101084FF000032E
S31508002CD0CAF8083098F800301F2B0AD850464FF02B S31508002CD0CAF8083098F800301F2B0AD850464FF02B
S31508002CE00001FFF719FD02464FF00003CAF8143039 S31508002CE00001FFF719FD02464FF00003CAF8143039
@ -764,8 +764,8 @@ S31508002F90EEE64FF00004D846A8444FF00407E7E6EB
S31508002FA009F1FF3936F819302E2B3FF417AF019B7C S31508002FA009F1FF3936F819302E2B3FF417AF019B7C
S31508002FB012E7019A0B2A7FF445AF39E74FF006026C S31508002FB012E7019A0B2A7FF445AF39E74FF006026C
S31508002FC007E0019B0B2B7FF43DAF31E747F0020783 S31508002FC007E0019B0B2B7FF43DAF31E747F0020783
S31508002FD05BE7104605B0BDE8F08F00BF185400083F S31508002FD05BE7104605B0BDE8F08F00BF4454000813
S31508002FE02C540008245400082DE9F0410446C588ED S31508002FE058540008505400082DE9F0410446C58895
S31508002FF0018C4FF6FF73994208BF2946FFF78CFBF1 S31508002FF0018C4FF6FF73994208BF2946FFF78CFBF1
S315080030000346E0B94FF0E5074FF001064FF0000818 S315080030000346E0B94FF0E5074FF001064FF0000818
S3150800301020682169FFF762FA034668B96269177082 S3150800301020682169FFF762FA034668B96269177082
@ -791,7 +791,7 @@ S31508003140464602E0464600E0464620463946FFF730
S3150800315035FC054618B92169002986D175B14FF0A5 S3150800315035FC054618B92169002986D175B14FF0A5
S31508003160000323610AE003F1FF33DEB2F246ECE71F S31508003160000323610AE003F1FF33DEB2F246ECE71F
S31508003170F2464646E9E74FF00405F0E7284603B06D S31508003170F2464646E9E74FF00405F0E7284603B06D
S31508003180BDE8F08FAC5400082DE9F04104460E4620 S31508003180BDE8F08FD85400082DE9F04104460E46F4
S31508003190012926D98369994226D24FF000074FF0B4 S31508003190012926D98369994226D24FF000074FF0B4
S315080031A0010820463146FFF731FA0546F8B10128ED S315080031A0010820463146FFF731FA0546F8B10128ED
S315080031B020D0B0F1FF3F20D0204631463A46FFF7EF S315080031B020D0B0F1FF3F20D0204631463A46FFF7EF
@ -847,7 +847,7 @@ S315080034C01BE007F1FF371FFA87F8B8F1000F0DD098
S315080034D06EE706EB020E1EF801EC01F80E708E443C S315080034D06EE706EB020E1EF801EC01F80E708E443C
S315080034E08EF80170B2E70C2A9AD9B6E720682169E6 S315080034E08EF80170B2E70C2A9AD9B6E720682169E6
S315080034F0FEF7F4FF82460028C8D0504607B0BDE85C S315080034F0FEF7F4FF82460028C8D0504607B0BDE85C
S31508003500F08F00BF4FECC44EAC54000870B9094B9D S31508003500F08F00BF4FECC44ED854000870B9094B71
S315080035101B6813B14FF000021A7011B14FF0000387 S315080035101B6813B14FF000021A7011B14FF0000387
S315080035200B70044B19604FF0000070474FF00B000A S315080035200B70044B19604FF0000070474FF00B000A
S31508003530704700BF1C0500202DE9F0438FB00191AC S31508003530704700BF1C0500202DE9F0438FB00191AC
@ -1012,19 +1012,19 @@ S31508003F107F2820D911B9C72808D114E0FF2818D856
S31508003F20A0F180000C4B33F8100070470A4A4FF096 S31508003F20A0F180000C4B33F8100070470A4A4FF096
S31508003F30010332F8021F814207D003F101039BB245 S31508003F30010332F8021F814207D003F101039BB245
S31508003F40802BF6D101E04FF0000303F18000C0B2E8 S31508003F40802BF6D101E04FF0000303F18000C0B2E8
S31508003F5070474FF0000070479C56000861280BD048 S31508003F5070474FF000007047C856000861280BD01C
S31508003F6008494FF0000202F1010231F8023F43B15D S31508003F6008494FF0000202F1010231F8023F43B15D
S31508003F708342F8D113B970474FF00002024B33F869 S31508003F708342F8D113B970474FF00002024B33F869
S31508003F8012007047BC5400089C57000808B500F09A S31508003F8012007047E8540008C857000808B500F042
S31508003F905DFA01F005F901F0E1F800F0DFFB00F049 S31508003F905DFA01F01BF901F0F7F800F0D9FA00F024
S31508003FA00FF800F043FA08BD08B500F051FA01F021 S31508003FA00FF800F043FA08BD08B500F051FA01F021
S31508003FB00DF900F00DFC00F01DF800F015FA08BD2B S31508003FB023F900F023FC00F01DF800F015FA08BDFF
S31508003FC000B583B04FF0FF038DF804304FF00003BF S31508003FC000B583B04FF0FF038DF804304FF00003BF
S31508003FD08DF8053000F044F801F02AF8044B1B78F8 S31508003FD08DF8053000F044F801F040F8044B1B78E2
S31508003FE0012B02D101A800F059F803B000BD00BFAB S31508003FE0012B02D101A800F059F803B000BD00BFAB
S31508003FF02005002008B5044801F06EF8012802D112 S31508003FF02005002008B5044801F084F8012802D1FC
S31508004000014800F04BF808BD24050020704700BFA2 S31508004000014800F04BF808BD24050020704700BFA2
S3150800401008B5C9B201F02EF800F038F808BD00BF9F S3150800401008B5C9B201F044F800F038F808BD00BF89
S315080040204FF00102014B1A70704700BF20050020AF S315080040204FF00102014B1A70704700BF20050020AF
S3150800403008B500F023F808BD4FF00002014B5A708E S3150800403008B500F023F808BD4FF00002014B5A708E
S31508004040704700BF64050020044B4FF0FE02DA708B S31508004040704700BF64050020044B4FF0FE02DA708B
@ -1033,7 +1033,7 @@ S31508004060054B4FF000021A709A6483F84320A3F8B0
S3150800407044209A705A70704764050020024B1878DD S3150800407044209A705A70704764050020024B1878DD
S31508004080003018BF01207047640500204FF0000279 S31508004080003018BF01207047640500204FF0000279
S31508004090014B83F8432070476405002038B5044671 S31508004090014B83F8432070476405002038B5044671
S315080040A00378FF2B22D100F06FFB20B94FF01000E8 S315080040A00378FF2B22D100F069FA20B94FF01000EF
S315080040B0FFF7CAFF81E1FFF7BFFFAF4B4FF00102E1 S315080040B0FFF7CAFF81E1FFF7BFFFAF4B4FF00102E1
S315080040C01A704FF0FF01D9704FF0100119714FF0B7 S315080040C01A704FF0FF01D9704FF0100119714FF0B7
S315080040D0000159714FF040009871D87119725A72DF S315080040D0000159714FF040009871D87119725A72DF
@ -1047,11 +1047,11 @@ S3150800414057015701570157015701570157015701A1
S3150800415057015701570157017900510036006E0083 S3150800415057015701570157017900510036006E0083
S315080041605701570157019B005701AF00B400C5001E S315080041605701570157019B005701AF00B400C5001E
S3150800417042783F2A04D94FF02200FFF765FF1CE179 S3150800417042783F2A04D94FF02200FFF765FF1CE179
S315080041807D4D05F10400A96C00F028FD4FF0FF03F2 S315080041807D4D05F10400A96C00F03EFD4FF0FF03DC
S31508004190EB706278AB6CD318AB64637803F10103F8 S31508004190EB706278AB6CD318AB64637803F10103F8
S315080041A0A5F8443009E143783F2B04D94FF02200A3 S315080041A0A5F8443009E143783F2B04D94FF02200A3
S315080041B0FFF74AFF01E141686F4DA96405F1040064 S315080041B0FFF74AFF01E141686F4DA96405F1040064
S315080041C0627800F00BFD4FF0FF03EB706278AB6C82 S315080041C0627800F021FD4FF0FF03EB706278AB6C6C
S315080041D0D318AB64637803F10103A5F84430ECE027 S315080041D0D318AB64637803F10103A5F84430ECE027
S315080041E0654B4FF0FF02DA7042689A644FF001029D S315080041E0654B4FF0FF02DA7042689A644FF001029D
S315080041F0A3F84420E1E0604B4FF0FF02DA709B6CB5 S315080041F0A3F84420E1E0604B4FF0FF02DA709B6CB5
@ -1066,31 +1066,31 @@ S31508004270FF02DA704FF000021A71597859719A7173
S31508004280DA711A724FF00602A3F8442095E03A4C08 S31508004280DA711A724FF00602A3F8442095E03A4C08
S315080042904FF000032370FFF7CFFE4FF0FF03E370E4 S315080042904FF000032370FFF7CFFE4FF0FF03E370E4
S315080042A04FF00103A4F8443087E0334B986C4FF085 S315080042A04FF00103A4F8443087E0334B986C4FF085
S315080042B03F0104F1010200F055FF20B94FF031002B S315080042B03F0104F1010200F06BFF20B94FF0310015
S315080042C0FFF7C2FE79E02C4B4FF0FF02DA709A6CCA S315080042C0FFF7C2FE79E02C4B4FF0FF02DA709A6CCA
S315080042D002F13F029A644FF00102A3F844206CE011 S315080042D002F13F029A644FF00102A3F844206CE011
S315080042E043783E2B04D94FF02200FFF7ADFE64E079 S315080042E043783E2B04D94FF02200FFF7ADFE64E079
S315080042F0214B4FF0FF02DA704FF00102A3F8442079 S315080042F0214B4FF0FF02DA704FF00102A3F8442079
S31508004300417841B900F03AFF002856D14FF0310004 S31508004300417841B900F050FF002856D14FF03100EE
S31508004310FFF79AFE51E0184B986C04F1020200F080 S31508004310FFF79AFE51E0184B986C04F1020200F080
S3150800432021FF20B94FF03100FFF78EFE45E0124B12 S3150800432037FF20B94FF03100FFF78EFE45E0124BFC
S3150800433061789A6C8A189A643FE00F4B4FF0FF0237 S3150800433061789A6C8A189A643FE00F4B4FF0FF0237
S31508004340DA704FF000021A715A714FF040019971F4 S31508004340DA704FF000021A715A714FF040019971F4
S31508004350DA711A725A724FF00702A3F844202CE059 S31508004350DA711A725A724FF00702A3F844202CE059
S31508004360054B986C616800F001FF48B94FF03100C1 S31508004360054B986C616800F017FF48B94FF03100AB
S31508004370FFF76AFE21E000BF640500207C590008AB S31508004370FFF76AFE21E000BF64050020A85900087F
S31508004380184B4FF0FF02DA704FF00102A3F84420F1 S31508004380184B4FF0FF02DA704FF00102A3F84420F1
S3150800439013E000F035FC134B4FF0FF02DA704FF0D4 S3150800439013E000F04BFC134B4FF0FF02DA704FF0BE
S315080043A00102A3F8442008E04FF03100FFF74CFE65 S315080043A00102A3F8442008E04FF03100FFF74CFE65
S315080043B003E04FF02000FFF747FE0A4B93F843301F S315080043B003E04FF02000FFF747FE0A4B93F843301F
S315080043C0012B03D14FF01000FFF73EFE054B4FF0CF S315080043C0012B03D14FF01000FFF73EFE054B4FF0CF
S315080043D0010283F8432003F10300B3F84410FFF702 S315080043D0010283F8432003F10300B3F84410FFF702
S315080043E017FE38BD6405002008B5FFF721FE012831 S315080043E017FE38BD6405002008B5FFF721FE012831
S315080043F017D000F0C9F9A0B10A4B1B78012B10D1D0 S315080043F017D000F0C3F8A0B10A4B1B78012B10D1D7
S3150800440000F0F4FE084B1B6803F13203984208D308 S3150800440000F00AFF084B1B6803F13203984208D3F1
S315080044104FF00002034B1A7000F0C0F908B900F01B S315080044104FF00002034B1A7000F0BAF808B900F022
S31508004420C9FB08BDB0050020B405002008B54FF04B S31508004420DFFB08BDB0050020B405002008B54FF035
S315080044300102044B1A7000F0D9FE034B1860FFF70F S315080044300102044B1A7000F0EFFE034B1860FFF7F9
S31508004440D3FF08BDB0050020B4050020704700BFA3 S31508004440D3FF08BDB0050020B4050020704700BFA3
S31508004450704700BF00F00F03092802D903F137009F S31508004450704700BF00F00F03092802D903F137009F
S31508004460704703F13000054B1B681B185B7803F097 S31508004460704703F13000054B1B681B185B7803F097
@ -1108,389 +1108,392 @@ S31508004510D2B2162A12D8A1F13A04E4B2062C10D95E
S31508004520092A84BFA1F13702D2B202EB001000F0CB S31508004520092A84BFA1F13702D2B202EB001000F0CB
S31508004530FF0003F10103022BDFD104E04FF0000076 S31508004530FF0003F10103022BDFD104E04FF0000076
S3150800454001E04FF0000070BC704700BF1800002063 S3150800454001E04FF0000070BC704700BF1800002063
S315080045502DE9F04F83B080461746894601B120B948 S3150800455008B54FF00000064B18700649FEF7D6FF5F
S315080045607C484FF4167100F019FB98F800307A4A27 S3150800456020B105484FF07C0100F02EFB08BD00BFC6
S315080045701268D118497801F00301022908BF203BC7 S31508004570F805002004060020B0590008034B1878F7
S31508004580532B40F0C38098F80130D218527802F0C5 S31508004580D0F1010038BF0020704700BFF8050020B1
S315080045900402D2B2002A00F0BC80312B00F0C3809E S3150800459008B5FFF74DFD012809D0094B1B784BB923
S315080045A0322B00F0C380332B00F0C3804FF0000598 S315080045A0FBF730FE012808D1054B187008BD4FF0FF
S315080045B0B7E02046FFF79AFF3018C6B205F1FF3577 S315080045B0000008BD4FF0000008BD4FF0000008BD20
S315080045C0ADB204F10204012DF3D82046FFF78EFFA1 S315080045C0F80500200378134A1268D118497801F0D3
S315080045D06FEA0606F6B2864240F09E80BAF1010FEF S315080045D00301022908BF203B532B0FD1407812183C
S315080045E02FD0BAF1000F04D0BAF1020F40F097802D S315080045E0537803F00403DBB25BB131280CD03228D0
S315080045F056E05846FFF77AFF4FEA0024C9F800400C S315080045F00DD0332814BF0320022070474FF0030064
S3150800460008F10600FFF772FF2018C9F8000008F144 S3150800460070474FF0030070474FF0000070474FF0B7
S315080046100808019BA3F10305ADB2002F00F08180C5 S31508004610010070471800002070B5044600F102003A
S315080046202EB2002E7DDD4FF000044046FFF75EFFF8 S31508004620FFF764FF0646054604F104042046FFF733
S31508004630385508F1020804F10104A4B2B442F4DBC7 S315080046305DFF3018C6B205F1FF35ADB204F10204CC
S315080046406FE05846FFF752FF4FEA0044C9F80040AA S31508004640012DF3D82046FFF751FF6FEA0606F6B2AA
S3150800465008F10600FFF74AFF04EB0024C9F80040FA S31508004650864214BF0020012070BD00BF2DE9F0413D
S3150800466008F10800FFF742FF2018C9F8000008F112 S3150800466004461546884601B120B9634840F236210A
S315080046700A08019BA3F10405ADB2002F51D02EB252 S3150800467000F0AAFA2046FFF7A5FF0646032800F031
S31508004680002E4EDD4FF000044046FFF72FFF385549 S31508004680B0802046FFF7C8FF002800F0AD80012E55
S3150800469008F1020804F10104A4B2A642F4DC40E0E1 S3150800469034D01EB1022E40F0AA8065E004F1020073
S315080046A05846FFF723FF4FEA0064C9F8004008F1AF S315080046A0FFF724FF074604F10400FFF71FFF4FEA50
S315080046B00600FFF71BFF04EB0044C9F8004008F1A9 S315080046B00026C8F8006004F10600FFF717FF301857
S315080046C00800FFF713FF04EB0024C9F8004008F1BF S315080046C0C8F8000004F10806A7F10307BFB2002DD9
S315080046D00A00FFF70BFF2018C9F8000008F10C08BC S315080046D000F08F800FFA87F8B8F1000F40F3898051
S315080046E0019BA3F10505ADB2DFB12EB2002E18DD90 S315080046E04FF000043046FFF701FF285506F1020691
S315080046F04FF000044046FFF7F9FE385508F1020866 S315080046F004F10104A4B24445F4DB7AE004F10200B3
S3150800470004F10104A4B2B442F4DB0AE04FF0000558 S31508004700FFF7F4FE074604F10400FFF7EFFE4FEA51
S3150800471007E04FF0000504E04FF6FF7501E04FF0A3 S315080047100046C8F8006004F10600FFF7E7FE06EB5E
S31508004720000528B212E04FF0000A04E04FF0010A33 S315080047200026C8F8006004F10800FFF7DFFE30181D
S3150800473001E04FF0020A08F10200FFF7D7FE06462D S31508004730C8F8000004F10A06A7F10407BFB2002D65
S31508004740019008F1040B05465C4632E703B0BDE864 S3150800474057D00FFA87F8B8F1000F52DD4FF0000482
S31508004750F08F00BF845900081800002008B54FF0F4 S315080047503046FFF7CBFE285506F1020604F10104A0
S315080047600000064B18700649FEF7D0FE20B1054832 S31508004760A4B24445F4DB44E004F10200FFF7BEFEC0
S315080047704FF09E0100F012FA08BD00BFF8050020B0 S31508004770074604F10400FFF7B9FE4FEA0066C8F8D9
S315080047800406002084590008034B1878D0F101006C S31508004780006004F10600FFF7B1FE06EB0046C8F824
S3150800479038BF0020704700BFF805002008B5FFF7AE S31508004790006004F10800FFF7A9FE06EB0026C8F83A
S315080047A047FC012809D0094B1B784BB9FBF72AFDB2 S315080047A0006004F10A00FFF7A1FE3018C8F80000FF
S315080047B0012808D1054B187008BD4FF0000008BD48 S315080047B004F10C06A7F10507BFB2D5B10FFA87F8C1
S315080047C04FF0000008BD4FF0000008BDF8050020B6 S315080047C0B8F1000F15DD4FF000043046FFF78EFEF6
S315080047D070B5964B1B78002B00F0C481012B2BD1AA S315080047D0285506F1020604F10104A4B24445F4DBA7
S315080047E0FBF738FD9248FBF773FD9248FBF770FD1F S315080047E007E04FF0000704E04FF6FF7701E04FF0CF
S315080047F0FBF72CFD014690484FF00102FEF79CFEA0 S315080047F0000738B2BDE8F081B059000870B5964B8D
S3150800480038B18E48FBF764FD4FF00100FBF754FD05 S315080048001B78002B00F0C481012B2BD1FBF722FD6E
S3150800481070BD8B48FBF75CFD8A48FBF759FD8A4853 S315080048109248FBF75DFD9248FBF75AFDFBF716FD3C
S31508004820FBF756FD894B4FF000021A605A604FF0AD S31508004820014690484FF00102FEF786FE38B18E48E1
S3150800483002027E4B1A7070BD022B40F0BB80844D7D S31508004830FBF74EFD4FF00100FBF73EFD70BD8B48C0
S3150800484084484FF4807105F50D72FFF7F9FA95F96A S31508004840FBF746FD8A48FBF743FD8A48FBF740FD20
S315080048503A32002B0FDA7948FBF73AFD4FF002009F S31508004850894B4FF000021A605A604FF002027E4BF5
S31508004860FBF72AFD05F50D70FFF772F94FF0000208 S315080048601A7070BD022B40F0BB80844D84484FF40B
S315080048706E4B1A7070BDD0B17649084601F5C07105 S31508004870807105F50D72FFF7E3FA95F93A32002BC8
S315080048804FF00002FFF764FE0446B0F1FF3F0ED179 S315080048800FDA7948FBF724FD4FF00200FBF714FD19
S315080048906A48FBF71DFD4FF00300FBF70DFD664860 S3150800489005F50D70FFF75CF94FF000026E4B1A70C4
S315080048A0FFF756F94FF00002604B1A7070BD23B23D S315080048A070BDD0B17649084601F5C0714FF00002D7
S315080048B0002B17DD654B5B683BB9644B654AD2F83C S315080048B0FFF7D4FE0446B0F1FF3F0ED16A48FBF776
S315080048C080211A6024B25C600CE0624AD2F880212A S315080048C007FD4FF00300FBF7F7FC6648FFF740F9D2
S315080048D05E4909688A423CBF5C490A6003FA84F368 S315080048D04FF00002604B1A7070BD23B2002B17DD33
S315080048E05A4A53605A4BD3F83C22D3F840329A427C S315080048E0654B5B683BB9644B654AD2F880211A6010
S315080048F040F0388150484FF00001FFF735F970B1A4 S315080048F024B25C600CE0624AD2F880215E490968FD
S315080049004E48FBF7E5FC4FF00400FBF7D5FC4A4898 S315080049008A423CBF5C490A6003FA84F35A4A5360F8
S31508004910FFF71EF94FF00002444B1A7070BD484865 S315080049105A4BD3F83C22D3F840329A4240F03881B9
S31508004920FBF7D6FC4C48FBF7D3FC484D4B4C686864 S3150800492050484FF00001FFF71FF970B14E48FBF7EA
S315080049302146FFF7B7FD2046FBF7CAFC4848FBF7B8 S31508004930CFFC4FF00400FBF7BFFC4A48FFF708F925
S31508004940C7FC2E684FEA16602146FFF799FDC6F3A5 S315080049404FF00002444B1A7070BD4848FBF7C0FC94
S31508004950074004F10201FFF793FDC6F3072004F1AF S315080049504C48FBF7BDFC484D4B4C68682146FFF7B1
S315080049600401FFF78DFDF0B204F10601FFF788FD9B S31508004960A1FD2046FBF7B4FC4848FBF7B1FC2E68CE
S315080049702046FBF7ADFC3B48FBF7AAFC28686968AC S315080049704FEA16602146FFF783FDC6F3074004F1A8
S3150800498000F0F4FB70B92D48FBF7A2FC4FF00500C8 S315080049800201FFF77DFDC6F3072004F10401FFF7D6
S31508004990FBF792FC2848FFF7DBF84FF00002234BA1 S3150800499077FDF0B204F10601FFF772FD2046FBF73A
S315080049A01A7070BD2648FBF793FC4FF003021F4BA5 S315080049A097FC3B48FBF794FC2868696800F0F4FB21
S315080049B01A7070BD032B40F0D580254D25484FF45D S315080049B070B92D48FBF78CFC4FF00500FBF77CFC23
S315080049C0807105F50D72FFF73BFA95F93A32002B1F S315080049C02848FFF7C5F84FF00002234B1A7070BD50
S315080049D00FDA2548FBF77CFC4FF00200FBF76CFC6E S315080049D02648FBF77DFC4FF003021F4B1A7070BD8B
S315080049E005F50D70FFF7B4F84FF000020F4B1A707B S315080049E0032B40F0D580254D25484FF4807105F5F9
S315080049F070BD00283CD0174A104602F5C07102F572 S315080049F00D72FFF725FA95F93A32002B0FDA25489A
S31508004A008072FFF7A5FD0446B0F1FF3F30D1174885 S31508004A00FBF766FC4FF00200FBF756FC05F50D7048
S31508004A10FBF75EFC4FF00300FBF74EFC0648FFF77A S31508004A10FFF79EF84FF000020F4B1A7070BD002882
S31508004A2097F84FF00002014B1A7070BDF805002088 S31508004A203CD0174A104602F5C07102F58072FFF7AE
S31508004A309C590008C059000838080020E8590008A1 S31508004A3015FE0446B0F1FF3F30D11748FBF748FC96
S31508004A40F0590008F85900081C5A0008FC0500200F S31508004A404FF00300FBF738FC0648FFF781F84FF0F4
S31508004A50040600205C0A00204C5A0008B80500200D S31508004A500002014B1A7070BDF8050020C8590008FD
S31508004A60585A0008FC5A0008745A0008985A000850 S31508004A60EC59000838080020145A00081C5A000897
S31508004A7023B2002B46DD3C48FBF72AFC24B23B4D0B S31508004A70245A0008485A0008FC05002004060020AD
S31508004A8020462946FFF70EFD2846FBF721FC384845 S31508004A805C0A0020785A0008B8050020845A0008F5
S31508004A90FBF71EFC374E96F883012946FFF7F0FC14 S31508004A90285B0008A05A0008C45A000823B2002B55
S31508004AA096F8820105F10201FFF7EAFC96F8810102 S31508004AA046DD3C48FBF714FC24B23B4D204629461C
S31508004AB005F10401FFF7E4FC96F8800105F106010B S31508004AB0FFF7F8FC2846FBF70BFC3848FBF708FC21
S31508004AC0FFF7DEFC2846FBF703FC2B48FBF700FC48 S31508004AC0374E96F883012946FFF7DAFC96F88201F5
S31508004AD0D6F88001214606F5807200F043FB70B9CE S31508004AD005F10201FFF7D4FC96F8810105F10401FE
S31508004AE02648FBF7F5FB4FF00600FBF7E5FB2448E5 S31508004AE0FFF7CEFC96F8800105F10601FFF7C8FC32
S31508004AF0FFF72EF84FF00002224B1A7070BD2248BD S31508004AF02846FBF7EDFB2B48FBF7EAFBD6F88001C7
S31508004B00FBF7E6FB214BD3F83C22D3F840329A4216 S31508004B00214606F5807200F043FB70B92648FBF78C
S31508004B1028D11F48FBF7DCFB00F030FB70B91748BB S31508004B10DFFB4FF00600FBF7CFFB2448FFF718F83A
S31508004B20FBF7D6FB4FF00700FBF7C6FB1448FFF769 S31508004B204FF00002224B1A7070BD2248FBF7D0FBEB
S31508004B300FF84FF00002134B1A7070BD1248FBF7BE S31508004B30214BD3F83C22D3F840329A4228D11F4859
S31508004B40C7FB1448FBF7C4FB0D48FFF701F81248EA S31508004B40FBF7C6FB00F030FB70B91748FBF7C0FB54
S31508004B50FBF7BEFB4FF000020A4B1A70FBF790FBFF S31508004B504FF00700FBF7B0FB1448FEF7F9FF4FF0DC
S31508004B6000F028F870BD00BFBC5A0008B805002040 S31508004B600002134B1A7070BD1248FBF7B1FB1448CC
S31508004B70CC5A00085C0A0020FC5A0008E8590008CC S31508004B70FBF7AEFB0D48FEF7EBFF1248FBF7A8FB69
S31508004B8038080020F8050020F0590008040600201F S31508004B804FF000020A4B1A70FBF77AFB00F028F880
S31508004B90E45A0008005B0008185B000808B5034BD8 S31508004B9070BD00BFE85A0008B8050020F85A00089A
S31508004BA01860034B1960FFF753FCFCE7E00B002085 S31508004BA05C0A0020285B0008145A00083808002010
S31508004BB0E40B002008B500F0DDFA50B1FFF726FA3D S31508004BB0F80500201C5A000804060020105B0008AF
S31508004BC000F0E6FA4FF40042024B1A60024B1B68EB S31508004BC02C5B0008445B000808B5034B1860034BD0
S31508004BD0984708BD08ED00E00480000870B5044653 S31508004BD01960FFF73DFCFCE7E00B0020E40B002022
S31508004BE002F1FF36B6B252B100F101039E190D1A51 S31508004BE008B500F0DDFA50B1FFF710FA00F0E6FA62
S31508004BF0635D04F8013BFFF72BFCB442F8D170BDA6 S31508004BF04FF40042024B1A60024B1B68984708BDE7
S31508004C0008B500F005FB08BDF8B507464FF00004E7 S31508004C0008ED00E00480000870B5044602F1FF369E
S31508004C1025460D4EFFF71CFCA359BB420BD831198C S31508004C10B6B252B100F101039E190D1A635D04F88C
S31508004C2049685B189F4206D205EB4502064B03EB23 S31508004C20013BFFF715FCB442F8D170BD08B500F09A
S31508004C308202107AF8BD05F1010504F10C04782CFE S31508004C3005FB08BDF8B507464FF0000425460D4E9E
S31508004C40E8D14FF0FF00F8BD745B00082DE9F0418C S31508004C40FFF706FCA359BB420BD8311949685B1814
S31508004C5007460068FFF7D8FFFF2830D0FCF74EFD5F S31508004C509F4206D205EB4502064B03EB8202107A09
S31508004C604FF0F300FCF762FDFCF766FD012818BF5C S31508004C60F8BD05F1010504F10C04782CE8D14FF0E4
S31508004C70002404D1FCF752FD4FF0000421E03E6801 S31508004C70FF00F8BDA05B00082DE9F0410746006873
S31508004C8004EB06083B195D68FFF7E2FB4046294638 S31508004C80FFF7D8FFFF2830D0FCF738FD4FF0F300C8
S31508004C90FCF790FD08280AD1A359AB420AD104F1C2 S31508004C90FCF74CFDFCF750FD012818BF002404D191
S31508004CA00404B4F5007FEAD14FF0010404E04FF0A4 S31508004CA0FCF73CFD4FF0000421E03E6804EB0608E3
S31508004CB0000401E04FF00004FCF730FD01E04FF07E S31508004CB03B195D68FFF7CCFB40462946FCF77AFDB1
S31508004CC000042046BDE8F08108B54FEAC1534FEA13 S31508004CC008280AD1A359AB420AD104F10404B4F561
S31508004CD0D3535BB903688B420BD040F8041B4FF4DF S31508004CD0007FEAD14FF0010404E04FF0000401E040
S31508004CE00072FFF77BFF4FF0010008BD4FF0000090 S31508004CE04FF00004FCF71AFD01E04FF000042046DF
S31508004CF008BD4FF0010008BD38B504460D460C4BFB S31508004CF0BDE8F08108B54FEAC1534FEAD3535BB913
S31508004D00984206D00B4B994205D0FFF79FFF18B97A S31508004D0003688B420BD040F8041B4FF40072FFF780
S31508004D100AE0094C00E0064C20462946FFF7D4FF76 S31508004D107BFF4FF0010008BD4FF0000008BD4FF0C3
S31508004D20002808BF002401E04FF00004204638BDE3 S31508004D20010008BD38B504460D460C4B984206D01E
S31508004D30E80B002000800008EC0D00202DE9F84360 S31508004D300B4B994205D0FFF79FFF18B90AE0094CBB
S31508004D4006460C4617461D464FEA51294FEA492999 S31508004D4000E0064C20462946FFF7D4FF002808BF96
S31508004D500368B3F1FF3F03D14946FFF7B5FF50B3E8 S31508004D50002401E04FF00004204638BDE80B00208F
S31508004D6033684B4505D030464946FFF7C5FF06462A S31508004D6000800008EC0D00202DE9F84306460C46A5
S31508004D7028B33368E41A341904F1040440F2FF181E S31508004D7017461D464FEA51294FEA49290368B3F1F8
S31508004D8009F50079FFF764FB06F10403E31A4345C6 S31508004D80FF3F03D14946FFF7B5FF50B333684B459C
S31508004D9007D930464946FFF7AFFF064698B100F1F6 S31508004D9005D030464946FFF7C5FF064628B33368AF
S31508004DA0040417F8013B04F8013B013DEAD14FF032 S31508004DA0E41A341904F1040440F2FF1809F50079ED
S31508004DB00100BDE8F8834FF00000BDE8F8834FF026 S31508004DB0FFF74EFB06F10403E31A434507D93046CD
S31508004DC00000BDE8F8834FF00000BDE8F88300BF97 S31508004DC04946FFF7AFFF064698B100F1040417F805
S31508004DD04FF0FF33024A1360024A1360704700BF60 S31508004DD0013B04F8013B013DEAD14FF00100BDE873
S31508004DE0EC0D0020E80B002070B504460D4616466B S31508004DE0F8834FF00000BDE8F8834FF00000BDE8F7
S31508004DF0FFF70AFFFF2814D004F1FF304019FFF728 S31508004DF0F8834FF00000BDE8F88300BF4FF0FF339B
S31508004E0003FFFF2810D04FEA5422094BB3EB422F79 S31508004E00024A1360024A1360704700BFEC0D002087
S31508004E100CBF08480848214632462B46FFF78EFF46 S31508004E10E80B002070B504460D461646FFF70AFF54
S31508004E2070BD4FF0000070BD4FF0000070BD00BFB0 S31508004E20FF2814D004F1FF304019FFF703FFFF28CD
S31508004E3000800008E80B0020EC0D0020F8B50646B7 S31508004E3010D04FEA5422094BB3EB422F0CBF084857
S31508004E400D46FFF7E1FE044606F1FF304019FFF76D S31508004E400848214632462B46FFF78EFF70BD4FF0C5
S31508004E50DBFE0546FF2C3AD0FF283BD084422DD8EE S31508004E50000070BD4FF0000070BD00BF0080000864
S31508004E60012C2ED90B282FD8FCF748FC4FF0F3005D S31508004E60E80B0020EC0D0020F8B506460D46FFF7C6
S31508004E70FCF75CFCFCF760FC012804D1FCF74EFC4F S31508004E70E1FE044606F1FF304019FFF7DBFE054662
S31508004E804FF00000F8BD154F4FF00206FFF7E0FAA5 S31508004E80FF2C3AD0FF283BD084422DD8012C2ED9AE
S31508004E9037F814003146FCF7ABFC082804D0FCF7B9 S31508004E900B282FD8FCF732FC4FF0F300FCF746FC42
S31508004EA03DFC4FF00000F8BD04F10104E4B2A54250 S31508004EA0FCF74AFC012804D1FCF738FC4FF0000057
S31508004EB0ECD2FCF733FC4FF00100F8BD4FF00000D0 S31508004EB0F8BD154F4FF00206FFF7CAFA37F8140087
S31508004EC0F8BD4FF00000F8BD4FF00000F8BD4FF0F8 S31508004EC03146FCF795FC082804D0FCF727FC4FF080
S31508004ED00000F8BD4FF00000F8BD00BF445B0008B5 S31508004ED00000F8BD04F10104E4B2A542ECD2FCF7E7
S31508004EE000B583B0104B1B68B3F1FF3F18D00E4BCB S31508004EE01DFC4FF00100F8BD4FF00000F8BD4FF073
S31508004EF099685A688918DA6889181A6989185A6976 S31508004EF00000F8BD4FF00000F8BD4FF00000F8BD07
S31508004F0089189A698A18D9695318C3F1000302AA3D S31508004F004FF00000F8BD00BF705B000800B583B025
S31508004F1042F8043D05484FF00401FFF765FF01E03C S31508004F10104B1B68B3F1FF3F18D00E4B99685A68BF
S31508004F204FF0010003B000BDE80B0020888100089F S31508004F208918DA6889181A6989185A6989189A6964
S31508004F300E4B1868A3F104031B68C0180C4B1B68BA S31508004F308A18D9695318C3F1000302AA42F8043D36
S31508004F40C0180C4B1B68C0180B4B1B68C0180B4BC2 S31508004F4005484FF00401FFF765FF01E04FF0010047
S31508004F501B68C0180A4B1B68C0180A4B1B68C01888 S31508004F5003B000BDE80B0020888100080E4B1868D6
S31508004F60D0F1010038BF0020704700BF0480000858 S31508004F60A3F104031B68C0180C4B1B68C0180C4B34
S31508004F70088000080C8000081080000814800008CB S31508004F701B68C0180B4B1B68C0180B4B1B68C01866
S31508004F80188000088881000808B50D4B1B68B3F126 S31508004F800A4B1B68C0180A4B1B68C018D0F10100F1
S31508004F90FF3F03D00A48FFF759FE58B1094B1B6873 S31508004F9038BF0020704700BF04800008088000085A
S31508004FA0B3F1FF3F09D00748FFF750FE003018BF9E S31508004FA00C8000081080000814800008188000088B
S31508004FB0012008BD4FF0000008BD4FF0010008BDF4 S31508004FB08881000808B50D4B1B68B3F1FF3F03D085
S31508004FC0E80B0020EC0D002010B5044608484FF009 S31508004FC00A48FFF759FE58B1094B1B68B3F1FF3F72
S31508004FD02001FCF769FE012806D10548FCF75EFEAC S31508004FD009D00748FFF750FE003018BF012008BD6A
S31508004FE020704FF0010010BD4FF0000010BD00BF4B S31508004FE04FF0000008BD4FF0010008BDE80B002097
S31508004FF00014014038B504460C484FF08001FCF710 S31508004FF0EC0D002010B5044608484FF02001FCF7D8
S3150800500053FE78B109482146FCF742FE074D4FF09A S3150800500053FE012806D10548FCF748FE20704FF0EC
S31508005010800428462146FCF747FE0028F9D04FF0C1 S31508005010010010BD4FF0000010BD00BF0014014094
S31508005020010038BD4FF0000038BD00BF0014014034 S3150800502038B504460C484FF08001FCF73DFE78B1D0
S3150800503010B584B04FF4614300934FF00003ADF808 S3150800503009482146FCF72CFE074D4FF08004284608
S315080050400430ADF80630ADF80830ADF80C304FF046 S315080050402146FCF731FE0028F9D04FF0010038BDA3
S315080050500C03ADF80A30064C20466946FCF78EFD6F S315080050504FF0000038BD00BF0014014010B584B001
S3150800506020464FF00101FCF703FE04B010BD00BF57 S315080050604FF4614300934FF00003ADF80430ADF8F8
S31508005070001401402DE9F04106460C46402904D9A2 S315080050700630ADF80830ADF80C304FF00C03ADF83B
S3150800508014484FF07601FFF789FD2046FFF7B2FF77 S315080050800A30064C20466946FCF778FD20464FF064
S31508005090012804D00F484FF07901FFF77FFD254618 S315080050900101FCF7EDFD04B010BD00BF001401408E
S315080050A0ACB14FF00004DFF82C804FF08107FFF712 S315080050A02DE9F04106460C46402904D914484FF02C
S315080050B0CFF9305DFFF79EFF012803D040463946F9 S315080050B07601FFF789FD2046FFF7B2FF012804D0E5
S315080050C0FFF76CFD04F10104A3B2AB42EFD3BDE8D0 S315080050C00F484FF07901FFF77FFD2546ACB14FF049
S315080050D0F08100BFEC5B000810B504461B4B1B783B S315080050D00004DFF82C804FF08107FFF7B9F9305D3F
S315080050E06BB91B48FFF770FF012825D14FF0010265 S315080050E0FFF79EFF012803D040463946FFF76CFDBF
S315080050F0164B1A704FF00000164B187010BD154B62 S315080050F004F10104A3B2AB42EFD3BDE8F08100BFCF
S315080051001878154BC018FFF75FFF012817D1114B08 S31508005100185C000810B504461B4B1B786BB91B4886
S315080051101A7802F10102D2B21A700D4B1B7893422B S31508005110FFF770FF012825D14FF00102164B1A70D0
S3150800512010D120460C49FFF759FD4FF00002074BF6 S315080051204FF00000164B187010BD154B1878154B2C
S315080051301A704FF0010010BD4FF0000010BD4FF07F S31508005130C018FFF75FFF012817D1114B1A7802F143
S31508005140000010BD4FF0000010BD00BFF10F002099 S315080051400102D2B21A700D4B1B78934210D1204639
S31508005150F40F0020F00F0020F50F002008B5FFF728 S315080051500C49FFF759FD4FF00002074B1A704FF044
S3150800516037FE08BD08B5FFF73FFE08BD08B5FFF7CF S31508005160010010BD4FF0000010BD4FF0000010BD4B
S3150800517065FE08BD08B5FFF7DBFE08BD08B5FFF7F5 S315080051704FF0000010BD00BF35100020F00F0020D2
S31508005180AFFE10B1FFF700FF08BD4FF0000008BDE5 S3150800518034100020F10F002008B5FFF737FE08BDE0
S315080051904FF00002014B1A60704700BF10E000E0B4 S3150800519008B5FFF73FFE08BD08B5FFF765FE08BD71
S315080051A008B5FFF7F5FF064B064A5A604FF00002AE S315080051A008B5FFF7DBFE08BD08B5FFF7AFFE10B17F
S315080051B09A604FF005011960034B1A6008BD00BFDD S315080051B0FFF700FF08BD4FF0000008BD4FF00002E2
S315080051C010E000E03F90020038100020054B1B68F5 S315080051C0014B1A60704700BF10E000E008B5FFF712
S315080051D013F4803F04D0044B1A6802F101021A60E6 S315080051D0F5FF064B064A5A604FF000029A604FF0F8
S315080051E0704700BF10E000E03810002008B5FFF750 S315080051E005011960034B1A6008BD00BF10E000E016
S315080051F0EDFF014B186808BD3810002008B50348B4 S315080051F03F90020038100020054B1B6813F4803FCF
S315080052004FF03601FFF7CAFC08BD00BF105C000866 S3150800520004D0044B1A6802F101021A60704700BF05
S3150800521010B572B6114B124A9A4211D202F1040322 S3150800521010E000E03810002008B5FFF7EDFF014B5D
S31508005220104CE41A24F0030404F104044FF00003BC S31508005220186808BD3810002008B503484FF0360145
S3150800523010460D495A581A5003F10403A342F9D1EE S31508005230FFF7CAFC08BD00BF3C5C000810B572B693
S315080052400A480B494FF000028842B8BF40F8042BC1 S31508005240114B124A9A4211D202F10403104CE41A85
S31508005250FFF6FAAFFBF766F810BD00BF1C0000208A S3150800525024F0030404F104044FF0000310460D493A
S31508005260000000201F000020405D000820000020EC S315080052605A581A5003F10403A342F9D10A480B49C4
S315080052703C100020032A2DE9F00F09D82AB1002393 S315080052704FF000028842B8BF40F8042BFFF6FAAF99
S31508005280CC5CC45401339342FAD1BDE8F00F7047A1 S31508005280FBF750F810BD00BF1C00002000000020EE
S31508005290830702440ED0441C4D1C15F8017C04F00B S315080052901F0000206C5D0008200000203C10002044
S315080052A00306234601342946013504F8027C002EFC S315080052A0032A2DE9F00F09D82AB10023CC5CC4548F
S315080052B0F3D100E0034611F003046DD0D71A0D1B95 S315080052B001339342FAD1BDE8F00F704783070244E1
S315080052C0032F2E6819DDC4F1040C4FEAC4081C1D0F S315080052C00ED0441C4D1C15F8017C04F00306234639
S315080052D04FEACC0C55F8047FC4EB02092346043187 S315080052D001342946013504F8027C002EF3D100E09A
S315080052E00434B9F1030F26FA08FA07FA0CFB3E460E S315080052E0034611F003046DD0D71A0D1B032F2E6841
S315080052F04BEA0A0744F8087CECDC9A42C5D9013324 S315080052F019DDC4F1040C4FEAC4081C1D4FEACC0C96
S315080053000131013211F8014C01330131934203F89E S3150800530055F8047FC4EB0209234604310434B9F185
S31508005310024CF7D1B9E70C684033403143F8404CAA S31508005310030F26FA08FA07FA0CFB3E464BEA0A0779
S3150800532051F83C4C43F83C4C51F8384C43F8384C4F S3150800532044F8087CECDC9A42C5D9013301310132D4
S3150800533051F8344C43F8344C51F8304C43F8304C5F S3150800533011F8014C01330131934203F8024CF7D1BD
S3150800534051F82C4C43F82C4C51F8284C43F8284C6F S31508005340B9E70C684033403143F8404C51F83C4CBF
S3150800535051F8244C43F8244C51F8204C43F8204C7F S3150800535043F83C4C51F8384C43F8384C51F8344C27
S3150800536051F81C4C43F81C4C51F8184C43F8184C8F S3150800536043F8344C51F8304C43F8304C51F82C4C37
S3150800537051F8144C43F8144C51F8104C43F8104C9F S3150800537043F82C4C51F8284C43F8284C51F8244C47
S3150800538051F80C4C43F80C4C51F8084C43F8084CAF S3150800538043F8244C51F8204C43F8204C51F81C4C57
S3150800539051F8044C43F8044CD41A3F2CBBDC11E0FA S3150800539043F81C4C51F8184C43F8184C51F8144C67
S315080053A00C681033103143F8104C51F80C4C43F884 S315080053A043F8144C51F8104C43F8104C51F80C4C77
S315080053B00C4C51F8084C43F8084C51F8044C43F887 S315080053B043F80C4C51F8084C43F8084C51F8044C87
S315080053C0044CD41A0F2CEBDC032C96DD1C1D0D1D8A S315080053C043F8044CD41A3F2CBBDC11E00C681033AC
S315080053D055F8047C161B2346294604340435032E47 S315080053D0103143F8104C51F80C4C43F80C4C51F86A
S315080053E044F8087CF4DC88E72F64656D6F70726F8B S315080053E0084C43F8084C51F8044C43F8044CD41ABA
S315080053F0675F6F6C696D65785F73746D333265349A S315080053F00F2CEBDC032C96DD1C1D0D1D55F8047CCB
S3150800540030372E73726563002F626F6F746C6F6727 S31508005400161B2346294604340435032E44F8087C23
S315080054102E74787400000000222A3A3C3E3F7C7FB6 S31508005410F4DC88E72F64656D6F70726F675F6F6C79
S31508005420000000002B2C3B3D5B5D0000809A9041FC S31508005420696D65785F73746D3332653430372E7302
S315080054308E418F804545454949498E8F9092924FB6 S31508005430726563002F626F6F746C6F672E74787471
S31508005440994F555559999A9B9C9D9E9F41494F55F1 S3150800544000000000222A3A3C3E3F7C7F0000000014
S31508005450A5A5A6A7A8A9AAABAC21AEAFB0B1B2B311 S315080054502B2C3B3D5B5D0000809A90418E418F80EE
S31508005460B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C376 S315080054604545454949498E8F9092924F994F5555D2
S31508005470C4C5C6C7C8C9CACBCCCDCECFD0D1D2D366 S3150800547059999A9B9C9D9E9F41494F55A5A5A6A7BC
S31508005480D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E356 S31508005480A8A9AAABAC21AEAFB0B1B2B3B4B5B6B7A2
S31508005490E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F346 S31508005490B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C706
S315080054A0F4F5F6F7F8F9FAFBFCFDFEFF010305072C S315080054A0C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7F6
S315080054B0090E10121416181C1E0000006100620066 S315080054B0D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E6
S315080054C063006400650066006700680069006A009A S315080054C0E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7D6
S315080054D06B006C006D006E006F007000710072004A S315080054D0F8F9FAFBFCFDFEFF01030507090E101299
S315080054E073007400750076007700780079007A00FA S315080054E01416181C1E0000006100620063006400A8
S315080054F0A100A200A300A500AC00AF00E000E100F7 S315080054F0650066006700680069006A006B006C005A
S31508005500E200E300E400E500E600E700E800E90061 S315080055006D006E006F007000710072007300740009
S31508005510EA00EB00EC00ED00EE00EF00F000F10011 S31508005510750076007700780079007A00A100A2006D
S31508005520F200F300F400F500F600F800F900FA00BE S31508005520A300A500AC00AF00E000E100E200E30044
S31508005530FB00FC00FD00FE00FF0001010301050160 S31508005530E400E500E600E700E800E900EA00EB0021
S31508005540070109010B010D010F01110113011501D5 S31508005540EC00ED00EE00EF00F000F100F200F300D1
S31508005550170119011B011D011F0121012301250145 S31508005550F400F500F600F800F900FA00FB00FC007C
S31508005560270129012B012D012F01310133013501B5 S31508005560FD00FE00FF000101030105010701090115
S3150800557037013A013C013E0140014201440146011E S315080055700B010D010F011101130115011701190185
S3150800558048014B014D014F01510153015501570186 S315080055801B011D011F0121012301250127012901F5
S3150800559059015B015D015F016101630165016701F5 S315080055902B012D012F0131013301350137013A0164
S315080055A069016B016D016F01710173017501770165 S315080055A03C013E01400142014401460148014B01CC
S315080055B07A017C017E019201B103B203B303B403FD S315080055B04D014F01510153015501570159015B0135
S315080055C0B503B603B703B803B903BA03BB03BC03F1 S315080055C05D015F01610163016501670169016B01A5
S315080055D0BD03BE03BF03C003C103C303C403C5039E S315080055D06D016F0171017301750177017A017C0113
S315080055E0C603C703C803C903CA0330043104320417 S315080055E07E019201B103B203B303B403B503B60354
S315080055F033043404350436043704380439043A04C9 S315080055F0B703B803B903BA03BB03BC03BD03BE03B1
S315080056003B043C043D043E043F0440044104420478 S31508005600BF03C003C103C303C403C503C603C7035B
S3150800561043044404450446044704480449044A0428 S31508005610C803C903CA03300431043204330434040A
S315080056204B044C044D044E044F04510452045304D5 S31508005620350436043704380439043A043B043C0488
S315080056305404550456045704580459045A045B0480 S315080056303D043E043F044004410442044304440438
S315080056405C045E045F047021712172217321742148 S31508005640450446044704480449044A044B044C04E8
S31508005650752176217721782179217A217B217C2170 S315080056504D044E044F045104520453045404550493
S315080056607D217E217F2141FF42FF43FF44FF45FF05 S3150800566056045704580459045A045B045C045E043F
S3150800567046FF47FF48FF49FF4AFF4BFF4CFF4DFFD8 S315080056705F047021712172217321742175217621AD
S315080056804EFF4FFF50FF51FF52FF53FF54FF55FF88 S315080056807721782179217A217B217C217D217E2130
S3150800569056FF57FF58FF59FF5AFF0000C700FC0086 S315080056907F2141FF42FF43FF44FF45FF46FF47FF87
S315080056A0E900E200E400E000E500E700EA00EB00BC S315080056A048FF49FF4AFF4BFF4CFF4DFF4EFF4FFF98
S315080056B0E800EF00EE00EC00C400C500C900E600F3 S315080056B050FF51FF52FF53FF54FF55FF56FF57FF48
S315080056C0C600F400F600F200FB00F900FF00D60061 S315080056C058FF59FF5AFF0000C700FC00E900E20036
S315080056D0DC00A200A300A500A7209201E100ED00CE S315080056D0E400E000E500E700EA00EB00E800EF0080
S315080056E0F300FA00F100D100AA00BA00BF001023A7 S315080056E0EE00EC00C400C500C900E600C600F400E0
S315080056F0AC00BD00BC00A100AB00BB009125922503 S315080056F0F600F200FB00F900FF00D600DC00A2006D
S3150800570093250225242561256225562555256325D9 S31508005700A300A500A7209201E100ED00F300FA002E
S31508005710512557255D255C255B251025142534253F S31508005710F100D100AA00BA00BF001023AC00BD00FA
S315080057202C251C2500253C255E255F255A25542554 S31508005720BC00A100AB00BB0091259225932502255C
S3150800573069256625602550256C2567256825642515 S315080057302425612562255625552563255125572596
S31508005740652559255825522553256B256A2518257B S315080057405D255C255B251025142534252C251C256F
S315080057500C25882584258C2590258025B103DF0016 S3150800575000253C255E255F255A255425692566259D
S315080057609303C003A303C303B500C403A6039803A6 S31508005760602550256C2567256825642565255925F6
S31508005770A903B4031E22C603B50329226122B10078 S315080057705825522553256B256A2518250C25882575
S315080057806522642220232123F7004822B00019222B S3150800578084258C2590258025B103DF009303C0036B
S31508005790B7001A227F20B200A025A00041004200CF S31508005790A303C303B500C403A6039803A903B4036C
S315080057A043004400450046004700480049004A00B7 S315080057A01E22C603B50329226122B100652264229E
S315080057B04B004C004D004E004F0050005100520067 S315080057B020232123F7004822B0001922B7001A2215
S315080057C053005400550056005700580059005A0017 S315080057C07F20B200A025A00041004200430044000B
S315080057D02100E0FFE1FFE5FFE2FFE3FFC000C100B3 S315080057D0450046004700480049004A004B004C0077
S315080057E0C200C300C400C500C600C700C800C9007F S315080057E04D004E004F005000510052005300540027
S315080057F0CA00CB00CC00CD00CE00CF00D000D1002F S315080057F0550056005700580059005A002100E0FF8E
S31508005800D200D300D400D500D600D800D900DA00DB S31508005800E1FFE5FFE2FFE3FFC000C100C200C300FD
S31508005810DB00DC00DD00DE00780100010201040186 S31508005810C400C500C600C700C800C900CA00CB003E
S31508005820060108010A010C010E01100112011401FA S31508005820CC00CD00CE00CF00D000D100D200D300EE
S31508005830160118011A011C011E012001220124016A S31508005830D400D500D600D800D900DA00DB00DC0099
S31508005840260128012A012C012E01300132013401DA S31508005840DD00DE00780100010201040106010801FD
S31508005850360139013B013D013F0141014301450143 S315080058500A010C010E0110011201140116011801AA
S3150800586047014A014C014E015001520154015601AB S315080058601A011C011E01200122012401260128011A
S3150800587058015A015C015E0160016201640166011A S315080058702A012C012E013001320134013601390189
S3150800588068016A016C016E0170017201740176018A S315080058803B013D013F0141014301450147014A01F1
S3150800589079017B017D01910191039203930394039E S315080058904C014E01500152015401560158015A015A
S315080058A0950396039703980399039A039B039C030E S315080058A05C015E01600162016401660168016A01CA
S315080058B09D039E039F03A003A103A303A403A503BB S315080058B06C016E01700172017401760179017B0138
S315080058C0A603A703A803A903AA0310041104120434 S315080058C07D01910191039203930394039503960333
S315080058D013041404150416041704180419041A04E6 S315080058D09703980399039A039B039C039D039E03CE
S315080058E01B041C041D041E041F0420042104220496 S315080058E09F03A003A103A303A403A503A603A70379
S315080058F023042404250426042704280429042A0446 S315080058F0A803A903AA031004110412041304140428
S315080059002B042C042D042E042F0401040204030482 S31508005900150416041704180419041A041B041C04A5
S315080059100404050406040704080409040A040B041D S315080059101D041E041F042004210422042304240455
S315080059200C040E040F0460216121622163216421A5 S31508005920250426042704280429042A042B042C0405
S31508005930652166216721682169216A216B216C210D S315080059302D042E042F0401040204030404040504A0
S315080059406D216E216F2121FF22FF23FF24FF25FFF2 S3150800594006040704080409040A040B040C040E04DC
S3150800595026FF27FF28FF29FF2AFF2BFF2CFF2DFFF5 S315080059500F0460216121622163216421652166218A
S315080059602EFF2FFF30FF31FF32FF33FF34FF35FFA5 S315080059606721682169216A216B216C216D216E21CD
S3150800597036FF37FF38FF39FF3AFF00004F70656E74 S315080059706F2121FF22FF23FF24FF25FF26FF27FF94
S31508005980424C54002E2E2F2E2E2F2E2E2F536F754F S3150800598028FF29FF2AFF2BFF2CFF2DFF2EFF2FFFB5
S315080059907263652F66696C652E6300004669726DD1 S3150800599030FF31FF32FF33FF34FF35FF36FF37FF65
S315080059A077617265207570646174652072657175BA S315080059A038FF39FF3AFF00004F70656E424C5400CD
S315080059B06573742064657465637465640A0D000014 S315080059B02E2E2F2E2E2F2E2E2F536F757263652F98
S315080059C04F70656E696E67206669726D776172657C S315080059C066696C652E6300004669726D776172655B
S315080059D02066696C6520666F722072656164696EFF S315080059D020757064617465207265717565737420CD
S315080059E0672E2E2E000000004552524F520A0D0017 S315080059E064657465637465640A0D00004F70656EBE
S315080059F04F4B0A0D000000005374617274696E679C S315080059F0696E67206669726D776172652066696C83
S31508005A00207468652070726F6772616D6D696E6764 S31508005A006520666F722072656164696E672E2E2E38
S31508005A102073657175656E63650A0D005061727352 S31508005A10000000004552524F520A0D004F4B0A0D26
S31508005A20696E67206669726D776172652066696C52 S31508005A20000000005374617274696E6720746865BB
S31508005A306520746F206F627461696E206572617388 S31508005A302070726F6772616D6D696E67207365712C
S31508005A40652073697A652E2E2E00000045726173F3 S31508005A4075656E63650A0D0050617273696E67202D
S31508005A50696E67200000000020627974657320660D S31508005A506669726D776172652066696C6520746F18
S31508005A60726F6D206D656D6F727920617420307864 S31508005A60206F627461696E2065726173652073695F
S31508005A700000000052656164696E67206C696E6596 S31508005A707A652E2E2E00000045726173696E6720C6
S31508005A802066726F6D2066696C652E2E2E45525201 S31508005A80000000002062797465732066726F6D20CD
S31508005A904F520A0D00000000496E76616C69642059 S31508005A906D656D6F727920617420307800000000A2
S31508005AA0636865636B73756D20666F756E642E2EFD S31508005AA052656164696E67206C696E652066726FFF
S31508005AB02E4552524F520A0D0000000050726F6771 S31508005AB06D2066696C652E2E2E4552524F520A0D80
S31508005AC072616D6D696E672000000000206279744E S31508005AC000000000496E76616C696420636865634E
S31508005AD0657320746F206D656D6F7279206174200F S31508005AD06B73756D20666F756E642E2E2E45525249
S31508005AE03078000057726974696E672070726F6744 S31508005AE04F520A0D0000000050726F6772616D6DAB
S31508005AF072616D20636865636B73756D2E2E2E005B S31508005AF0696E67200000000020627974657320745F
S31508005B00436C6F73696E67206669726D776172653B S31508005B006F206D656D6F72792061742030780000A2
S31508005B102066696C650A0D004669726D7761726563 S31508005B1057726974696E672070726F6772616D205B
S31508005B202075706461746520737563636573736645 S31508005B20636865636B73756D2E2E2E00436C6F73F9
S31508005B30756C6C7920636F6D706C657465640A0D9D S31508005B30696E67206669726D776172652066696C41
S31508005B4000000000000008001000180020002800CF S31508005B40650A0D004669726D776172652075706425
S31508005B503000380040004800500058008000880097 S31508005B50617465207375636365737366756C6C79B8
S31508005B6090009800A000A800B000B800C000C800C7 S31508005B6020636F6D706C657465640A0D0000000033
S31508005B70D000D800008000080040000002000000A5 S31508005B700000080010001800200028003000380037
S31508005B8000C00008004000000300000000000108F3 S31508005B8040004800500058008000880090009800A7
S31508005B9000000100040000000000020800000200E6 S31508005B90A000A800B000B800C000C800D000D80017
S31508005BA005000000000004080000020006000000CE S31508005BA000800008004000000200000000C0000855
S31508005BB000000608000002000700000000000808B0 S31508005BB0004000000300000000000108000001008A
S31508005BC0000002000800000000000A0800000200A9 S31508005BC004000000000002080000020005000000B2
S31508005BD00900000000000C08000002000A0000008E S31508005BD00000040800000200060000000000060895
S31508005BE000000E08000002000B0000002E2E2F2ECB S31508005BE0000002000700000000000808000002008C
S31508005BF02E2F2E2E2F536F757263652F41524D43EC S31508005BF00800000000000A08000002000900000072
S31508005C004D345F53544D33322F756172742E6300D1 S31508005C0000000C08000002000A00000000000E0850
S31508005C102E2E2F2E2E2F2E2E2F536F757263652F35 S31508005C10000002000B0000002E2E2F2E2E2F2E2EF7
S31508005C2041524D434D345F53544D33322F4743430E S31508005C202F536F757263652F41524D434D345F5341
S31508005C302F766563746F72732E6300000020202030 S31508005C30544D33322F756172742E63002E2E2F2E1B
S31508005C40202020202020282828282820202020201E S31508005C402E2F2E2E2F536F757263652F41524D439B
S31508005C5020202020202020202020202020881010EE S31508005C504D345F53544D33322F4743432F76656394
S31508005C60101010101010101010101010100404044A S31508005C60746F72732E6300000020202020202020ED
S31508005C700404040404040410101010101010414108 S31508005C7020202828282828202020202020202020EE
S31508005C8041414141010101010101010101010101F6 S31508005C8020202020202020202088101010101010FE
S31508005C90010101010101010110101010101042420A S31508005C90101010101010101010040404040404044A
S31508005CA042424242020202020202020202020202C6 S31508005CA004040410101010101010414141414141E4
S31508005CB00202020202020202101010102000000066 S31508005CB001010101010101010101010101010101C6
S31508005CC000000000000000000000000000000000C6 S31508005CC001010101101010101010424242424242D6
S31508005CD000000000000000000000000000000000B6 S31508005CD00202020202020202020202020202020296
S31508005CE000000000000000000000000000000000A6 S31508005CE0020202021010101020000000000000003E
S31508005CF00000000000000000000000000000000096 S31508005CF00000000000000000000000000000000096
S31508005D000000000000000000000000000000000085 S31508005D000000000000000000000000000000000085
S31508005D100000000000000000000000000000000075 S31508005D100000000000000000000000000000000075
S31508005D200000000000000000000000000000000065 S31508005D200000000000000000000000000000000065
S31508005D300000000000000000000000000000000055 S31508005D300000000000000000000000000000000055
S31508005D400100000001000000000000000102030439 S31508005D400000000000000000000000000000000045
S31108005D5001020304060708093C5C000871 S31508005D500000000000000000000000000000000035
S31108005D6000000000000000000000000029
S31508005D6C010000000100000000000000010203040D
S31108005D7C0102030406070809685C000819
S70508000000F2 S70508000000F2

View File

@ -61,6 +61,33 @@
/**************************************************************************************** /****************************************************************************************
* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N * C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N
****************************************************************************************/ ****************************************************************************************/
/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE
* configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed
* in bits/second. Two CAN messages are reserved for communication with the host. The
* message identifier for sending data from the target to the host is configured with
* BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with
* BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data
* transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and
* BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more
* than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the
* CAN controller channel.
*
*/
/** \brief Enable/disable CAN transport layer. */
#define BOOT_COM_CAN_ENABLE (0)
/** \brief Configure the desired CAN baudrate. */
#define BOOT_COM_CAN_BAUDRATE (500000)
/** \brief Configure CAN message ID target->host. */
#define BOOT_COM_CAN_TX_MSG_ID (0x7E1)
/** \brief Configure number of bytes in the target->host CAN message. */
#define BOOT_COM_CAN_TX_MAX_DATA (8)
/** \brief Configure CAN message ID host->target. */
#define BOOT_COM_CAN_RX_MSG_ID (0x667)
/** \brief Configure number of bytes in the host->target CAN message. */
#define BOOT_COM_CAN_RX_MAX_DATA (8)
/** \brief Select the desired CAN peripheral as a zero based index. */
#define BOOT_COM_CAN_CHANNEL_INDEX (1)
/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE /* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE
* configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed * configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed
* in bits/second. The maximum amount of data bytes in a message for data transmission * in bits/second. The maximum amount of data bytes in a message for data transmission

View File

@ -229,6 +229,16 @@ continue
<File Name="../../../../Source/ARMCM4_STM32/GCC/cstart.c"/> <File Name="../../../../Source/ARMCM4_STM32/GCC/cstart.c"/>
<File Name="../../../../Source/ARMCM4_STM32/GCC/vectors.c"/> <File Name="../../../../Source/ARMCM4_STM32/GCC/vectors.c"/>
</VirtualDirectory> </VirtualDirectory>
<VirtualDirectory Name="Crossworks">
<File Name="../../../../Source/ARMCM4_STM32/Crossworks/cstart.s"/>
<File Name="../../../../Source/ARMCM4_STM32/Crossworks/vectors.c"/>
</VirtualDirectory>
<VirtualDirectory Name="IAR">
<File Name="../../../../Source/ARMCM4_STM32/IAR/cstart.s"/>
<File Name="../../../../Source/ARMCM4_STM32/IAR/vectors.c"/>
</VirtualDirectory>
<File Name="../../../../Source/ARMCM4_STM32/can.c"/>
<File Name="../../../../Source/ARMCM4_STM32/can.h"/>
</VirtualDirectory> </VirtualDirectory>
</VirtualDirectory> </VirtualDirectory>
</CodeLite_Project> </CodeLite_Project>

View File

@ -79,6 +79,8 @@ static void Init(void)
#elif (BOOT_FILE_SYS_ENABLE > 0) #elif (BOOT_FILE_SYS_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure; USART_InitTypeDef USART_InitStructure;
#elif (BOOT_COM_CAN_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
#endif #endif
/* disable all interrupts to prevent possible jump back to the user program */ /* disable all interrupts to prevent possible jump back to the user program */
@ -134,6 +136,24 @@ static void Init(void)
/* enable UART */ /* enable UART */
USART_Cmd(USART6, ENABLE); USART_Cmd(USART6, ENABLE);
#endif #endif
#if (BOOT_COM_CAN_ENABLE > 0)
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
#endif
} /*** end of Init ***/ } /*** end of Init ***/

View File

@ -126,6 +126,8 @@ main.c \
../../../Source/assert.h \ ../../../Source/assert.h \
../../../Source/plausibility.h \ ../../../Source/plausibility.h \
../../../Source/ARMCM4_STM32/types.h \ ../../../Source/ARMCM4_STM32/types.h \
../../../Source/ARMCM4_STM32/can.c \
../../../Source/ARMCM4_STM32/can.h \
../../../Source/ARMCM4_STM32/cpu.c \ ../../../Source/ARMCM4_STM32/cpu.c \
../../../Source/ARMCM4_STM32/cpu.h \ ../../../Source/ARMCM4_STM32/cpu.h \
../../../Source/ARMCM4_STM32/flash.c \ ../../../Source/ARMCM4_STM32/flash.c \

View File

@ -182,4 +182,184 @@ static unsigned char UartReceiveByte(unsigned char *data)
#endif /* BOOT_COM_UART_ENABLE > 0 */ #endif /* BOOT_COM_UART_ENABLE > 0 */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E
****************************************************************************************/
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
unsigned char tseg1; /**< CAN time segment 1 */
unsigned char tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return 1 if the CAN bustiming register values were found, 0 otherwise.
**
****************************************************************************************/
static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned short *prescaler,
unsigned char *tseg1, unsigned char *tseg2)
{
unsigned char cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return 1;
}
}
}
/* could not find a good bus timing configuration */
return 0;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN communication interface.
** \return none.
**
****************************************************************************************/
void BootComInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
unsigned short prescaler;
unsigned char tseg1, tseg2;
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
/* CAN register init */
CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);
/* obtain the bittiming configuration for this baudrate */
CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
/* CAN controller init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
/* CAN Baudrate init */
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = tseg1 - 1;
CAN_InitStructure.CAN_BS2 = tseg2 - 1;
CAN_InitStructure.CAN_Prescaler = prescaler;
CAN_Init(CAN2, &CAN_InitStructure);
/* CAN filter init - receive all messages */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
} /*** end of BootComInit ***/
/************************************************************************************//**
** \brief Receives the CONNECT request from the host, which indicates that the
** bootloader should be activated and, if so, activates it.
** \return none.
**
****************************************************************************************/
void BootComCheckActivationRequest(void)
{
CanRxMsg RxMessage;
/* check if a new message was received */
if (CAN_MessagePending(CAN2, CAN_FIFO0) > 0)
{
/* receive the message */
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);
if (RxMessage.StdId == BOOT_COM_CAN_RX_MSG_ID)
{
/* check if this was an XCP CONNECT command */
if ((RxMessage.Data[0] == 0xff) && (RxMessage.Data[1] == 0x00))
{
/* connection request received so start the bootloader */
BootActivate();
}
}
}
} /*** end of BootComCheckActivationRequest ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of boot.c *************************************/ /*********************************** end of boot.c *************************************/

View File

@ -1055,7 +1055,7 @@ S315080041B8022B44BF0B7803707047083A07D3B1E857
S315080041C80810083A40F8043B40F804CBF7D25307DE S315080041C80810083A40F8043B40F804CBF7D25307DE
S315080041D8E4E7FF0010B5DFF8D00600210170DFF824 S315080041D8E4E7FF0010B5DFF8D00600210170DFF824
S315080041E8CC160020FDF7DEFB0400E4B2002C04D050 S315080041E8CC160020FDF7DEFB0400E4B2002C04D050
S315080041F89E21DFF8BC0600F0F7FB10BDDFF8A8061D S315080041F87C21DFF8BC0600F0F7FB10BDDFF8A8063F
S315080042080078002801D1012000E00020704780B519 S315080042080078002801D1012000E00020704780B519
S3150800421800F02EFC012801D1002011E0DFF88806FD S3150800421800F02EFC012801D1002011E0DFF88806FD
S315080042280078002801D000200AE000F025FC0128C3 S315080042280078002801D000200AE000F025FC0128C3
@ -1135,7 +1135,7 @@ S315080046B800F070F90500AE19A41C200000F06AF98C
S315080046C8801906006D1EA41CADB2022DF5DAF6B2E5 S315080046C8801906006D1EA41CADB2022DF5DAF6B2E5
S315080046D8F643200000F05EF9F6B2864201D00020C3 S315080046D8F643200000F05EF9F6B2864201D00020C3
S315080046E800E0012070BD2DE9F84F82460C00150040 S315080046E800E0012070BD2DE9F84F82460C00150040
S315080046F80027002C02D0BAF1000F04D14FF4167126 S315080046F80027002C02D0BAF1000F04D140F2362167
S315080047086B4800F071F95046FFF7AEFF0600F6B29F S315080047086B4800F071F95046FFF7AEFF0600F6B29F
S31508004718032E01D10020C4E05046FFF7C4FF002845 S31508004718032E01D10020C4E05046FFF7C4FF002845
S3150800472802D15FF0FF30BCE0F6B2002E03D0022EAD S3150800472802D15FF0FF30BCE0F6B2002E03D0022EAD

View File

@ -63,6 +63,33 @@
/**************************************************************************************** /****************************************************************************************
* C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N * C O M M U N I C A T I O N I N T E R F A C E C O N F I G U R A T I O N
****************************************************************************************/ ****************************************************************************************/
/* The CAN communication interface is selected by setting the BOOT_COM_CAN_ENABLE
* configurable to 1. Configurable BOOT_COM_CAN_BAUDRATE selects the communication speed
* in bits/second. Two CAN messages are reserved for communication with the host. The
* message identifier for sending data from the target to the host is configured with
* BOOT_COM_CAN_TXMSG_ID. The one for receiving data from the host is configured with
* BOOT_COM_CAN_RXMSG_ID. The maximum amount of data bytes in a message for data
* transmission and reception is set through BOOT_COM_CAN_TX_MAX_DATA and
* BOOT_COM_CAN_RX_MAX_DATA, respectively. It is common for a microcontroller to have more
* than 1 CAN controller on board. The zero-based BOOT_COM_CAN_CHANNEL_INDEX selects the
* CAN controller channel.
*
*/
/** \brief Enable/disable CAN transport layer. */
#define BOOT_COM_CAN_ENABLE (0)
/** \brief Configure the desired CAN baudrate. */
#define BOOT_COM_CAN_BAUDRATE (500000)
/** \brief Configure CAN message ID target->host. */
#define BOOT_COM_CAN_TX_MSG_ID (0x7E1)
/** \brief Configure number of bytes in the target->host CAN message. */
#define BOOT_COM_CAN_TX_MAX_DATA (8)
/** \brief Configure CAN message ID host->target. */
#define BOOT_COM_CAN_RX_MSG_ID (0x667)
/** \brief Configure number of bytes in the host->target CAN message. */
#define BOOT_COM_CAN_RX_MAX_DATA (8)
/** \brief Select the desired CAN peripheral as a zero based index. */
#define BOOT_COM_CAN_CHANNEL_INDEX (1)
/* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE /* The UART communication interface is selected by setting the BOOT_COM_UART_ENABLE
* configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed * configurable to 1. Configurable BOOT_COM_UART_BAUDRATE selects the communication speed
* in bits/second. The maximum amount of data bytes in a message for data transmission * in bits/second. The maximum amount of data bytes in a message for data transmission

View File

@ -83,14 +83,14 @@
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>33</YPos2><SelStart2>2900</SelStart2><SelEnd2>2900</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\flash.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>315</YPos2><SelStart2>19406</SelStart2><SelEnd2>19406</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\config.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>57</YPos2><SelStart2>5405</SelStart2><SelEnd2>5405</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\nvm.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>145</YPos2><SelStart2>6479</SelStart2><SelEnd2>6479</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\lib\fatfs\mmc.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>597</YPos2><SelStart2>27816</SelStart2><SelEnd2>27816</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\fatfs\src\ff.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>3114</YPos2><SelStart2>111111</SelStart2><SelEnd2>111111</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\xcp.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>216</YPos2><SelStart2>11560</SelStart2><SelEnd2>11560</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\boot.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>33</YPos2><SelStart2>2798</SelStart2><SelEnd2>2798</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\backdoor.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>89</YPos2><SelStart2>5799</SelStart2><SelEnd2>5799</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\cpu.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>91</YPos2><SelStart2>5211</SelStart2><SelEnd2>5211</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\timer.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>4186</SelStart2><SelEnd2>4186</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\file.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>108</YPos2><SelStart2>5993</SelStart2><SelEnd2>6018</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\ARMCM4_STM32\uart.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>144</YPos2><SelStart2>7489</SelStart2><SelEnd2>7489</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\..\..\Source\com.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>133</YPos2><SelStart2>7085</SelStart2><SelEnd2>7085</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\hooks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>339</YPos2><SelStart2>16576</SelStart2><SelEnd2>16601</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor> <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>33</YPos2><SelStart2>2963</SelStart2><SelEnd2>2963</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>54</YPos2><SelStart2>3384</SelStart2><SelEnd2>3384</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions> <Positions>
<Top><Row0><Sizes><Toolbar-02afcf20><key>iaridepm.enu1</key></Toolbar-02afcf20></Sizes></Row0><Row1><Sizes><Toolbar-0d0af0b0><key>debuggergui.enu1</key></Toolbar-0d0af0b0></Sizes></Row1></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>741</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>737103</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>741</Bottom><Right>461</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>241146</sizeVertCX><sizeVertCY>737103</sizeVertCY></Rect></Wnd3></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198413</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions> <Top><Row0><Sizes><Toolbar-028deb38><key>iaridepm.enu1</key></Toolbar-028deb38></Sizes></Row0><Row1><Sizes><Toolbar-0a394190><key>debuggergui.enu1</key></Toolbar-0a394190></Sizes></Row1></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>741</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>737103</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>741</Bottom><Right>461</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>241146</sizeVertCX><sizeVertCY>737103</sizeVertCY></Rect></Wnd3></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198413</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop> </Desktop>
</Project> </Project>

View File

@ -9,7 +9,7 @@ TriggerName=main
LimitSize=0 LimitSize=0
ByteLimit=50 ByteLimit=50
[DebugChecksum] [DebugChecksum]
Checksum=-471197012 Checksum=1695986847
[Exceptions] [Exceptions]
StopOnUncaught=_ 0 StopOnUncaught=_ 0
StopOnThrow=_ 0 StopOnThrow=_ 0

View File

@ -12,20 +12,20 @@
<Column0>203</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths> <Column0>338</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace> </Workspace>
<Build> <Build>
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1395</ColumnWidth1><ColumnWidth2>372</ColumnWidth2><ColumnWidth3>93</ColumnWidth3></Build> <PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Find-in-Files</Factory></Window></Windows></PreferedWindows><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1395</ColumnWidth1><ColumnWidth2>372</ColumnWidth2><ColumnWidth3>93</ColumnWidth3></Build>
<TerminalIO/> <TerminalIO/>
<Find-in-Files> <Find-in-Files>
<ColumnWidth0>190</ColumnWidth0><ColumnWidth1>27</ColumnWidth1><ColumnWidth2>326</ColumnWidth2></Find-in-Files> <ColumnWidth0>190</ColumnWidth0><ColumnWidth1>27</ColumnWidth1><ColumnWidth2>326</ColumnWidth2><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows><Window><Factory>Build</Factory></Window></Windows></PreferedWindows></Find-in-Files>
<PROJECT_GUI_CALL_GRAPH><col-names><item>File</item><item>Function</item><item>Line</item></col-names><col-widths><item>200</item><item>700</item><item>100</item></col-widths><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></PROJECT_GUI_CALL_GRAPH></Static> <PROJECT_GUI_CALL_GRAPH><col-names><item>File</item><item>Function</item><item>Line</item></col-names><col-widths><item>200</item><item>700</item><item>100</item></col-widths><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></PROJECT_GUI_CALL_GRAPH></Static>
<Windows> <Windows>
@ -42,36 +42,20 @@
</Tab> </Tab>
</Tabs> </Tabs>
<SelectedTab>0</SelectedTab></Wnd0><Wnd2> <SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-19870-1384</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1></Windows>
<Tabs>
<Tab>
<Identity>TabID-3456-10024</Identity>
<TabName>Build</TabName>
<Factory>Build</Factory>
<Session/>
</Tab>
<Tab>
<Identity>TabID-19098-11164</Identity>
<TabName>Find in Files</TabName>
<Factory>Find-in-Files</Factory>
<Session/>
</Tab>
</Tabs>
<SelectedTab>0</SelectedTab></Wnd2></Windows>
<Editor> <Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>0</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor> <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>33</YPos2><SelStart2>2963</SelStart2><SelEnd2>2963</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\blt_conf.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>54</YPos2><SelStart2>3384</SelStart2><SelEnd2>3384</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions> <Positions>
<Top><Row0><Sizes><Toolbar-00a8cf20><key>iaridepm.enu1</key></Toolbar-00a8cf20></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>778</Bottom><Right>277</Right><x>-2</x><y>-2</y><xscreen>135</xscreen><yscreen>163</yscreen><sizeHorzCX>104328</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>215611</sizeVertCX><sizeVertCY>947752</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>778</Bottom><Right>374</Right><x>-2</x><y>-2</y><xscreen>1297</xscreen><yscreen>163</yscreen><sizeHorzCX>1002318</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>290572</sizeVertCX><sizeVertCY>947752</sizeVertCY></Rect></Wnd2></Sizes></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions> <Top><Row0><Sizes><Toolbar-028deb38><key>iaridepm.enu1</key></Toolbar-028deb38></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>963</Bottom><Right>412</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>215625</sizeVertCX><sizeVertCY>957341</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>963</Bottom><Right>420</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>219792</sizeVertCX><sizeVertCY>957341</sizeVertCY></Rect></Wnd1></Sizes></Row0></Right><Bottom><Row0><Sizes/></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop> </Desktop>
</Workspace> </Workspace>

View File

@ -2079,6 +2079,12 @@
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\IAR\vectors.c</name> <name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\IAR\vectors.c</name>
</file> </file>
</group> </group>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\can.c</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\can.h</name>
</file>
<file> <file>
<name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\cpu.c</name> <name>$PROJ_DIR$\..\..\..\..\Source\ARMCM4_STM32\cpu.c</name>
</file> </file>

View File

@ -79,6 +79,8 @@ static void Init(void)
#elif (BOOT_FILE_SYS_ENABLE > 0) #elif (BOOT_FILE_SYS_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure; USART_InitTypeDef USART_InitStructure;
#elif (BOOT_COM_CAN_ENABLE > 0)
GPIO_InitTypeDef GPIO_InitStructure;
#endif #endif
/* disable all interrupts to prevent possible jump back to the user program */ /* disable all interrupts to prevent possible jump back to the user program */
@ -134,6 +136,24 @@ static void Init(void)
/* enable UART */ /* enable UART */
USART_Cmd(USART6, ENABLE); USART_Cmd(USART6, ENABLE);
#endif #endif
#if (BOOT_COM_CAN_ENABLE > 0)
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
#endif
} /*** end of Init ***/ } /*** end of Init ***/

View File

@ -182,4 +182,184 @@ static unsigned char UartReceiveByte(unsigned char *data)
#endif /* BOOT_COM_UART_ENABLE > 0 */ #endif /* BOOT_COM_UART_ENABLE > 0 */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* C O N T R O L L E R A R E A N E T W O R K I N T E R F A C E
****************************************************************************************/
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
unsigned char tseg1; /**< CAN time segment 1 */
unsigned char tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return 1 if the CAN bustiming register values were found, 0 otherwise.
**
****************************************************************************************/
static unsigned char CanGetSpeedConfig(unsigned short baud, unsigned short *prescaler,
unsigned char *tseg1, unsigned char *tseg2)
{
unsigned char cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return 1;
}
}
}
/* could not find a good bus timing configuration */
return 0;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN communication interface.
** \return none.
**
****************************************************************************************/
void BootComInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
unsigned short prescaler;
unsigned char tseg1, tseg2;
/* enable clocks for CAN2 transmitter and receiver pins */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* select alternate function for the CAN2 pins */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_CAN2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_CAN2);
/* configure CAN2 RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* enable CAN clock. Note that CAN2 shares reception filters with CAN1 so for CAN2
* the CAN1 peripheral also needs to be enabled.
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2 | RCC_APB1Periph_CAN1, ENABLE);
/* CAN register init */
CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);
/* obtain the bittiming configuration for this baudrate */
CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
/* CAN controller init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
/* CAN Baudrate init */
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = tseg1 - 1;
CAN_InitStructure.CAN_BS2 = tseg2 - 1;
CAN_InitStructure.CAN_Prescaler = prescaler;
CAN_Init(CAN2, &CAN_InitStructure);
/* CAN filter init - receive all messages */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
} /*** end of BootComInit ***/
/************************************************************************************//**
** \brief Receives the CONNECT request from the host, which indicates that the
** bootloader should be activated and, if so, activates it.
** \return none.
**
****************************************************************************************/
void BootComCheckActivationRequest(void)
{
CanRxMsg RxMessage;
/* check if a new message was received */
if (CAN_MessagePending(CAN2, CAN_FIFO0) > 0)
{
/* receive the message */
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);
if (RxMessage.StdId == BOOT_COM_CAN_RX_MSG_ID)
{
/* check if this was an XCP CONNECT command */
if ((RxMessage.Data[0] == 0xff) && (RxMessage.Data[1] == 0x00))
{
/* connection request received so start the bootloader */
BootActivate();
}
}
}
} /*** end of BootComCheckActivationRequest ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of boot.c *************************************/ /*********************************** end of boot.c *************************************/

View File

@ -12,12 +12,12 @@
<Column0>181</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths> <Column0>305</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace> </Workspace>
<Build><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1395</ColumnWidth1><ColumnWidth2>372</ColumnWidth2><ColumnWidth3>93</ColumnWidth3></Build><TerminalIO/></Static> <Build><ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1395</ColumnWidth1><ColumnWidth2>372</ColumnWidth2><ColumnWidth3>93</ColumnWidth3></Build><TerminalIO/></Static>
<Windows> <Windows>
<Wnd0> <Wnd2>
<Tabs> <Tabs>
<Tab> <Tab>
<Identity>TabID-29163-19963</Identity> <Identity>TabID-29163-19963</Identity>
@ -29,20 +29,20 @@
</Tab> </Tab>
</Tabs> </Tabs>
<SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-19063-20767</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd1></Windows> <SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-19063-20767</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd3></Windows>
<Editor> <Editor>
<Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>36</YPos2><SelStart2>2627</SelStart2><SelEnd2>2627</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\led.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>30</YPos2><SelStart2>2259</SelStart2><SelEnd2>2259</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\boot.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>27</YPos2><SelStart2>7214</SelStart2><SelEnd2>7214</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor> <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>45</YPos2><SelStart2>2856</SelStart2><SelEnd2>2856</SelEnd2></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<Positions> <Positions>
<Top><Row0><Sizes><Toolbar-0294cf20><key>iaridepm.enu1</key></Toolbar-0294cf20></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>617</Bottom><Right>255</Right><x>-2</x><y>-2</y><xscreen>135</xscreen><yscreen>163</yscreen><sizeHorzCX>104328</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>198609</sizeVertCX><sizeVertCY>752126</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>161</Bottom><Right>1296</Right><x>-2</x><y>-2</y><xscreen>1298</xscreen><yscreen>163</yscreen><sizeHorzCX>1003091</sizeHorzCX><sizeHorzCY>198056</sizeHorzCY><sizeVertCX>104328</sizeVertCX><sizeVertCY>198056</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions> <Top><Row0><Sizes><Toolbar-02b7eb38><key>iaridepm.enu1</key></Toolbar-02b7eb38></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>765</Bottom><Right>379</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>104167</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>198438</sizeVertCX><sizeVertCY>760913</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1922</Right><x>-2</x><y>-2</y><xscreen>1924</xscreen><yscreen>200</yscreen><sizeHorzCX>1002083</sizeHorzCX><sizeHorzCY>198413</sizeHorzCY><sizeVertCX>104167</sizeVertCX><sizeVertCY>198413</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Desktop> </Desktop>
</Workspace> </Workspace>

View File

@ -289,9 +289,6 @@ void CanInit(void)
****************************************************************************************/ ****************************************************************************************/
void CanTransmitPacket(blt_int8u *data, blt_int8u len) void CanTransmitPacket(blt_int8u *data, blt_int8u len)
{ {
blt_int8u byte_count;
blt_int8u mailbox;
/* make sure that transmit mailbox 0 is available */ /* make sure that transmit mailbox 0 is available */
ASSERT_RT((CANx->TSR&CAN_BIT_TME0) == CAN_BIT_TME0); ASSERT_RT((CANx->TSR&CAN_BIT_TME0) == CAN_BIT_TME0);
/* store the 11-bit message identifier */ /* store the 11-bit message identifier */
@ -327,7 +324,6 @@ void CanTransmitPacket(blt_int8u *data, blt_int8u len)
****************************************************************************************/ ****************************************************************************************/
blt_bool CanReceivePacket(blt_int8u *data) blt_bool CanReceivePacket(blt_int8u *data)
{ {
blt_int8u byte_count;
blt_int32u rxMsgId; blt_int32u rxMsgId;
blt_bool result = BLT_FALSE; blt_bool result = BLT_FALSE;

View File

@ -0,0 +1,388 @@
/************************************************************************************//**
* \file Source\ARMCM4_STM32\can.c
* \brief Bootloader CAN communication interface source file.
* \ingroup Target_ARMCM4_STM32
* \internal
*----------------------------------------------------------------------------------------
* C O P Y R I G H T
*----------------------------------------------------------------------------------------
* Copyright (c) 2013 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 <http://www.gnu.org/licenses/>.
*
* 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 <license.html>.
*
* \endinternal
****************************************************************************************/
/****************************************************************************************
* Include files
****************************************************************************************/
#include "boot.h" /* bootloader generic header */
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief CAN transmission mailbox layout. */
typedef struct
{
volatile blt_int32u TIR;
volatile blt_int32u TDTR;
volatile blt_int32u TDLR;
volatile blt_int32u TDHR;
} tCanTxMailBox;
/** \brief CAN reception FIFO mailbox layout. */
typedef struct
{
volatile blt_int32u RIR;
volatile blt_int32u RDTR;
volatile blt_int32u RDLR;
volatile blt_int32u RDHR;
} tCanRxFIFOMailBox;
/** \brief CAN filter register layout. */
typedef struct
{
volatile blt_int32u FR1;
volatile blt_int32u FR2;
} tCanFilter;
/** \brief CAN controller register layout. */
typedef struct
{
volatile blt_int32u MCR;
volatile blt_int32u MSR;
volatile blt_int32u TSR;
volatile blt_int32u RF0R;
volatile blt_int32u RF1R;
volatile blt_int32u IER;
volatile blt_int32u ESR;
volatile blt_int32u BTR;
blt_int32u RESERVED0[88];
tCanTxMailBox sTxMailBox[3];
tCanRxFIFOMailBox sFIFOMailBox[2];
blt_int32u RESERVED1[12];
volatile blt_int32u FMR;
volatile blt_int32u FM1R;
blt_int32u RESERVED2;
volatile blt_int32u FS1R;
blt_int32u RESERVED3;
volatile blt_int32u FFA1R;
blt_int32u RESERVED4;
volatile blt_int32u FA1R;
blt_int32u RESERVED5[8];
tCanFilter sFilterRegister[28];
} tCanRegs;
/****************************************************************************************
* Macro definitions
****************************************************************************************/
/** \brief Reset request bit. */
#define CAN_BIT_RESET ((blt_int32u)0x00008000)
/** \brief Initialization request bit. */
#define CAN_BIT_INRQ ((blt_int32u)0x00000001)
/** \brief Initialization acknowledge bit. */
#define CAN_BIT_INAK ((blt_int32u)0x00000001)
/** \brief Sleep mode request bit. */
#define CAN_BIT_SLEEP ((blt_int32u)0x00000002)
/** \brief Filter 0 selection bit. */
#define CAN_BIT_FILTER0 ((blt_int32u)0x00000001)
/** \brief Filter 14 selection bit. */
#define CAN_BIT_FILTER14 ((blt_int32u)0x00004000)
/** \brief Filter init mode bit. */
#define CAN_BIT_FINIT ((blt_int32u)0x00000001)
/** \brief Transmit mailbox 0 empty bit. */
#define CAN_BIT_TME0 ((blt_int32u)0x04000000)
/** \brief Transmit mailbox request bit. */
#define CAN_BIT_TXRQ ((blt_int32u)0x00000001)
/** \brief Release FIFO 0 mailbox bit. */
#define CAN_BIT_RFOM0 ((blt_int32u)0x00000020)
/****************************************************************************************
* Register definitions
****************************************************************************************/
#if (BOOT_COM_CAN_CHANNEL_INDEX == 0)
/** \brief Macro for accessing CAN1 controller registers. */
#define CANx ((tCanRegs *) (blt_int32u)0x40006400)
#else
/** \brief Macro for accessing CAN2 controller registers. */
#define CANx ((tCanRegs *) (blt_int32u)0x40006800)
#endif
/** \brief Macro for accessing CAN1 controller registers. */
#define CAN1 ((tCanRegs *) (blt_int32u)0x40006400)
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Structure type for grouping CAN bus timing related information. */
typedef struct t_can_bus_timing
{
blt_int8u tseg1; /**< CAN time segment 1 */
blt_int8u tseg2; /**< CAN time segment 2 */
} tCanBusTiming;
/****************************************************************************************
* Local constant declarations
****************************************************************************************/
/** \brief CAN bittiming table for dynamically calculating the bittiming settings.
* \details According to the CAN protocol 1 bit-time can be made up of between 8..25
* time quanta (TQ). The total TQ in a bit is SYNC + TSEG1 + TSEG2 with SYNC
* always being 1. The sample point is (SYNC + TSEG1) / (SYNC + TSEG1 + SEG2) *
* 100%. This array contains possible and valid time quanta configurations with
* a sample point between 68..78%.
*/
static const tCanBusTiming canTiming[] =
{ /* TQ | TSEG1 | TSEG2 | SP */
/* ------------------------- */
{ 5, 2 }, /* 8 | 5 | 2 | 75% */
{ 6, 2 }, /* 9 | 6 | 2 | 78% */
{ 6, 3 }, /* 10 | 6 | 3 | 70% */
{ 7, 3 }, /* 11 | 7 | 3 | 73% */
{ 8, 3 }, /* 12 | 8 | 3 | 75% */
{ 9, 3 }, /* 13 | 9 | 3 | 77% */
{ 9, 4 }, /* 14 | 9 | 4 | 71% */
{ 10, 4 }, /* 15 | 10 | 4 | 73% */
{ 11, 4 }, /* 16 | 11 | 4 | 75% */
{ 12, 4 }, /* 17 | 12 | 4 | 76% */
{ 12, 5 }, /* 18 | 12 | 5 | 72% */
{ 13, 5 }, /* 19 | 13 | 5 | 74% */
{ 14, 5 }, /* 20 | 14 | 5 | 75% */
{ 15, 5 }, /* 21 | 15 | 5 | 76% */
{ 15, 6 }, /* 22 | 15 | 6 | 73% */
{ 16, 6 }, /* 23 | 16 | 6 | 74% */
{ 16, 7 }, /* 24 | 16 | 7 | 71% */
{ 16, 8 } /* 25 | 16 | 8 | 68% */
};
/************************************************************************************//**
** \brief Search algorithm to match the desired baudrate to a possible bus
** timing configuration.
** \param baud The desired baudrate in kbps. Valid values are 10..1000.
** \param prescaler Pointer to where the value for the prescaler will be stored.
** \param tseg1 Pointer to where the value for TSEG2 will be stored.
** \param tseg2 Pointer to where the value for TSEG2 will be stored.
** \return BLT_TRUE if the CAN bustiming register values were found, BLT_FALSE
** otherwise.
**
****************************************************************************************/
static blt_bool CanGetSpeedConfig(blt_int16u baud, blt_int16u *prescaler,
blt_int8u *tseg1, blt_int8u *tseg2)
{
blt_int8u cnt;
/* loop through all possible time quanta configurations to find a match */
for (cnt=0; cnt < sizeof(canTiming)/sizeof(canTiming[0]); cnt++)
{
if (((BOOT_CPU_SYSTEM_SPEED_KHZ/4) % (baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1))) == 0)
{
/* compute the prescaler that goes with this TQ configuration */
*prescaler = (BOOT_CPU_SYSTEM_SPEED_KHZ/4)/(baud*(canTiming[cnt].tseg1+canTiming[cnt].tseg2+1));
/* make sure the prescaler is valid */
if ( (*prescaler > 0) && (*prescaler <= 1024) )
{
/* store the bustiming configuration */
*tseg1 = canTiming[cnt].tseg1;
*tseg2 = canTiming[cnt].tseg2;
/* found a good bus timing configuration */
return BLT_TRUE;
}
}
}
/* could not find a good bus timing configuration */
return BLT_FALSE;
} /*** end of CanGetSpeedConfig ***/
/************************************************************************************//**
** \brief Initializes the CAN controller and synchronizes it to the CAN bus.
** \return none.
**
****************************************************************************************/
void CanInit(void)
{
blt_int16u prescaler;
blt_int8u tseg1, tseg2;
blt_bool result;
/* the current implementation supports CAN1 and 2. throw an assertion error in case a
* different CAN channel is configured.
*/
ASSERT_CT((BOOT_COM_CAN_CHANNEL_INDEX == 0 || BOOT_COM_CAN_CHANNEL_INDEX == 1));
/* obtain bittiming configuration information */
result = CanGetSpeedConfig(BOOT_COM_CAN_BAUDRATE/1000, &prescaler, &tseg1, &tseg2);
ASSERT_RT(result == BLT_TRUE);
/* disable all can interrupt. this driver works in polling mode */
CANx->IER = (blt_int32u)0;
/* set request to reset the can controller */
CANx->MCR |= CAN_BIT_RESET ;
/* wait for acknowledge that the can controller was reset */
while ((CANx->MCR & CAN_BIT_RESET) != 0)
{
/* keep the watchdog happy */
CopService();
}
/* exit from sleep mode, which is the default mode after reset */
CANx->MCR &= ~CAN_BIT_SLEEP;
/* set request to enter initialisation mode */
CANx->MCR |= CAN_BIT_INRQ ;
/* wait for acknowledge that initialization mode was entered */
while ((CANx->MSR & CAN_BIT_INAK) == 0)
{
/* keep the watchdog happy */
CopService();
}
/* configure the bittming */
CANx->BTR = (blt_int32u)((blt_int32u)(tseg1 - 1) << 16) | \
(blt_int32u)((blt_int32u)(tseg2 - 1) << 20) | \
(blt_int32u)(prescaler - 1);
/* set request to leave initialisation mode */
CANx->MCR &= ~CAN_BIT_INRQ;
/* wait for acknowledge that initialization mode was exited */
while ((CANx->MSR & CAN_BIT_INAK) != 0)
{
/* keep the watchdog happy */
CopService();
}
#if (BOOT_COM_CAN_CHANNEL_INDEX == 0)
/* enter initialisation mode for the acceptance filter */
CAN1->FMR |= CAN_BIT_FINIT;
/* deactivate filter 0 */
CAN1->FA1R &= ~CAN_BIT_FILTER0;
/* 32-bit scale for the filter */
CAN1->FS1R |= CAN_BIT_FILTER0;
/* open up the acceptance filter to receive all messages */
CAN1->sFilterRegister[0].FR1 = 0;
CAN1->sFilterRegister[0].FR2 = 0;
/* select id/mask mode for the filter */
CAN1->FM1R &= ~CAN_BIT_FILTER0;
/* FIFO 0 assignation for the filter */
CAN1->FFA1R &= ~CAN_BIT_FILTER0;
/* filter activation */
CAN1->FA1R |= CAN_BIT_FILTER0;
/* leave initialisation mode for the acceptance filter */
CAN1->FMR &= ~CAN_BIT_FINIT;
#else
/* enter initialisation mode for the acceptance filter */
CAN1->FMR |= CAN_BIT_FINIT;
/* deactivate filter 14 */
CAN1->FA1R &= ~CAN_BIT_FILTER14;
/* 32-bit scale for the filter */
CAN1->FS1R |= CAN_BIT_FILTER14;
/* open up the acceptance filter to receive all messages */
CAN1->sFilterRegister[14].FR1 = 0;
CAN1->sFilterRegister[14].FR2 = 0;
/* select id/mask mode for the filter */
CAN1->FM1R &= ~CAN_BIT_FILTER14;
/* FIFO 0 assignation for the filter */
CAN1->FFA1R &= ~CAN_BIT_FILTER14;
/* filter activation */
CAN1->FA1R |= CAN_BIT_FILTER14;
/* leave initialisation mode for the acceptance filter */
CAN1->FMR &= ~CAN_BIT_FINIT;
#endif
} /*** end of CanInit ***/
/************************************************************************************//**
** \brief Transmits a packet formatted for the communication interface.
** \param data Pointer to byte array with data that it to be transmitted.
** \param len Number of bytes that are to be transmitted.
** \return none.
**
****************************************************************************************/
void CanTransmitPacket(blt_int8u *data, blt_int8u len)
{
/* make sure that transmit mailbox 0 is available */
ASSERT_RT((CANx->TSR&CAN_BIT_TME0) == CAN_BIT_TME0);
/* store the 11-bit message identifier */
CANx->sTxMailBox[0].TIR &= CAN_BIT_TXRQ;
CANx->sTxMailBox[0].TIR |= ((blt_int32u)BOOT_COM_CAN_TX_MSG_ID << 21);
/* store the message date length code (DLC) */
CANx->sTxMailBox[0].TDTR = len;
/* store the message data bytes */
CANx->sTxMailBox[0].TDLR = (((blt_int32u)data[3] << 24) | \
((blt_int32u)data[2] << 16) | \
((blt_int32u)data[1] << 8) | \
((blt_int32u)data[0]));
CANx->sTxMailBox[0].TDHR = (((blt_int32u)data[7] << 24) | \
((blt_int32u)data[6] << 16) | \
((blt_int32u)data[5] << 8) | \
((blt_int32u)data[4]));
/* request the start of message transmission */
CANx->sTxMailBox[0].TIR |= CAN_BIT_TXRQ;
/* wait for transmit completion */
while ((CANx->TSR&CAN_BIT_TME0) == 0)
{
/* keep the watchdog happy */
CopService();
}
} /*** end of CanTransmitPacket ***/
/************************************************************************************//**
** \brief Receives a communication interface packet if one is present.
** \param data Pointer to byte array where the data is to be stored.
** \return BLT_TRUE is a packet was received, BLT_FALSE otherwise.
**
****************************************************************************************/
blt_bool CanReceivePacket(blt_int8u *data)
{
blt_int32u rxMsgId;
blt_bool result = BLT_FALSE;
/* check if a new message was received */
if ((CANx->RF0R&(blt_int32u)0x00000003) > 0)
{
/* read out the message identifier */
rxMsgId = (blt_int32u)0x000007FF & (CANx->sFIFOMailBox[0].RIR >> 21);
/* is this the packet identifier */
if (rxMsgId == BOOT_COM_CAN_RX_MSG_ID)
{
result = BLT_TRUE;
/* store the received packet data */
data[0] = (blt_int8u)0xFF & CANx->sFIFOMailBox[0].RDLR;
data[1] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 8);
data[2] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 16);
data[3] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDLR >> 24);
data[4] = (blt_int8u)0xFF & CANx->sFIFOMailBox[0].RDHR;
data[5] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 8);
data[6] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 16);
data[7] = (blt_int8u)0xFF & (CANx->sFIFOMailBox[0].RDHR >> 24);
}
/* release FIFO0 */
CANx->RF0R |= CAN_BIT_RFOM0;
}
return result;
} /*** end of CanReceivePacket ***/
#endif /* BOOT_COM_CAN_ENABLE > 0 */
/*********************************** end of can.c **************************************/

View File

@ -0,0 +1,47 @@
/************************************************************************************//**
* \file Source\ARMCM4_STM32\can.h
* \brief Bootloader CAN communication interface header file.
* \ingroup Target_ARMCM4_STM32
* \internal
*----------------------------------------------------------------------------------------
* C O P Y R I G H T
*----------------------------------------------------------------------------------------
* Copyright (c) 2013 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 <http://www.gnu.org/licenses/>.
*
* 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 <license.html>.
*
* \endinternal
****************************************************************************************/
#ifndef CAN_H
#define CAN_H
#if (BOOT_COM_CAN_ENABLE > 0)
/****************************************************************************************
* Function prototypes
****************************************************************************************/
void CanInit(void);
void CanTransmitPacket(blt_int8u *data, blt_int8u len);
blt_bool CanReceivePacket(blt_int8u *data);
#endif /* BOOT_COM_CAN_ENABLE > 0 */
#endif /* CAN_H */
/*********************************** end of can.h **************************************/

View File

@ -41,7 +41,7 @@
/** \brief Minor version of the bootloader core. */ /** \brief Minor version of the bootloader core. */
#define BOOT_VERSION_CORE_MINOR (96u) #define BOOT_VERSION_CORE_MINOR (96u)
/** \brief Bufgix version of the bootloader core. */ /** \brief Bufgix version of the bootloader core. */
#define BOOT_VERSION_CORE_BUGFIX (0u) #define BOOT_VERSION_CORE_BUGFIX (1u)
/**************************************************************************************** /****************************************************************************************

View File

@ -40,19 +40,6 @@
#if (BOOT_FILE_SYS_ENABLE > 0) #if (BOOT_FILE_SYS_ENABLE > 0)
/****************************************************************************************
* Defines
****************************************************************************************/
/** \brief Maximum number of characters that can be on a line in the firmware file. */
#define MAX_CHARS_PER_LINE (256)
/** \brief Maximum number of data bytes that can be on a line in the firmware file
* (S-record).
*/
#define MAX_DATA_BYTES_PER_LINE (MAX_CHARS_PER_LINE/2)
/** \brief Return code in case an invalid checksum was detected on an S-record line. */
#define ERROR_SREC_INVALID_CHECKSUM (-1)
/**************************************************************************************** /****************************************************************************************
* Type definitions * Type definitions
****************************************************************************************/ ****************************************************************************************/
@ -65,15 +52,6 @@ typedef enum
FIRMWARE_UPDATE_STATE_PROGRAMMING /**< programming state */ FIRMWARE_UPDATE_STATE_PROGRAMMING /**< programming state */
} tFirmwareUpdateState; } tFirmwareUpdateState;
/** \brief Enumeration for the different S-record line types. */
typedef enum
{
LINE_TYPE_S1, /**< 16-bit address line */
LINE_TYPE_S2, /**< 24-bit address line */
LINE_TYPE_S3, /**< 32-bit address line */
LINE_TYPE_UNSUPPORTED /**< unsupported line */
} tSrecLineType;
/** \brief Structure type with information for the memory erase opeartion. */ /** \brief Structure type with information for the memory erase opeartion. */
typedef struct typedef struct
{ {
@ -88,21 +66,9 @@ typedef struct
FIL file; /**< file object for firmware file */ FIL file; /**< file object for firmware file */
} tFatFsObjects; } tFatFsObjects;
/** \brief Structure type for grouping the parsing results of an S-record line. */
typedef struct
{
blt_char line[MAX_CHARS_PER_LINE]; /**< string buffer for the line chars */
blt_int8u data[MAX_DATA_BYTES_PER_LINE]; /**< array for S1, S2 or S3 data bytes*/
blt_addr address; /**< address on S1, S2 or S3 line */
} tSrecLineParseObject;
/**************************************************************************************** /****************************************************************************************
* Function prototypes * Function prototypes
****************************************************************************************/ ****************************************************************************************/
static tSrecLineType SrecGetLineType(const blt_char *line);
static blt_bool SrecVerifyChecksum(const blt_char *line);
static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int8u *data);
#if (BOOT_FILE_LOGGING_ENABLE > 0) #if (BOOT_FILE_LOGGING_ENABLE > 0)
static blt_char FileLibByteNibbleToChar(blt_int8u nibble); static blt_char FileLibByteNibbleToChar(blt_int8u nibble);
static blt_char *FileLibByteToHexString(blt_int8u byte_val, blt_char *destination); static blt_char *FileLibByteToHexString(blt_int8u byte_val, blt_char *destination);
@ -284,7 +250,7 @@ void FileTask(void)
/* parse the S-Record line without copying the data values if the line is not empty */ /* parse the S-Record line without copying the data values if the line is not empty */
if (read_line_ptr != BLT_NULL) if (read_line_ptr != BLT_NULL)
{ {
parse_result = SrecParseLine(lineParseObject.line, &lineParseObject.address, BLT_NULL); parse_result = FileSrecParseLine(lineParseObject.line, &lineParseObject.address, BLT_NULL);
/* check parsing result */ /* check parsing result */
if (parse_result == ERROR_SREC_INVALID_CHECKSUM) if (parse_result == ERROR_SREC_INVALID_CHECKSUM)
{ {
@ -399,7 +365,7 @@ void FileTask(void)
/* parse the S-Record line if the line is not empty */ /* parse the S-Record line if the line is not empty */
if (read_line_ptr != BLT_NULL) if (read_line_ptr != BLT_NULL)
{ {
parse_result = SrecParseLine(lineParseObject.line, &lineParseObject.address, lineParseObject.data); parse_result = FileSrecParseLine(lineParseObject.line, &lineParseObject.address, lineParseObject.data);
/* check parsing result */ /* check parsing result */
if (parse_result == ERROR_SREC_INVALID_CHECKSUM) if (parse_result == ERROR_SREC_INVALID_CHECKSUM)
{ {
@ -505,7 +471,7 @@ void FileTask(void)
** \return the S-Record line type. ** \return the S-Record line type.
** **
****************************************************************************************/ ****************************************************************************************/
static tSrecLineType SrecGetLineType(const blt_char *line) tSrecLineType FileSrecGetLineType(const blt_char *line)
{ {
/* check if the line starts with the 'S' character, followed by a digit */ /* check if the line starts with the 'S' character, followed by a digit */
if ( (toupper(line[0]) != 'S') || (isdigit(line[1]) == 0) ) if ( (toupper(line[0]) != 'S') || (isdigit(line[1]) == 0) )
@ -528,7 +494,7 @@ static tSrecLineType SrecGetLineType(const blt_char *line)
} }
/* still here so not a supported line type found */ /* still here so not a supported line type found */
return LINE_TYPE_UNSUPPORTED; return LINE_TYPE_UNSUPPORTED;
} /*** end of SrecGetLineType ***/ } /*** end of FileSrecGetLineType ***/
/************************************************************************************//** /************************************************************************************//**
@ -538,7 +504,7 @@ static tSrecLineType SrecGetLineType(const blt_char *line)
** \return BLT_TRUE if the checksum is correct, BLT_FALSE otherwise. ** \return BLT_TRUE if the checksum is correct, BLT_FALSE otherwise.
** **
****************************************************************************************/ ****************************************************************************************/
static blt_bool SrecVerifyChecksum(const blt_char *line) blt_bool FileSrecVerifyChecksum(const blt_char *line)
{ {
blt_int16u bytes_on_line; blt_int16u bytes_on_line;
blt_int8u checksum = 0; blt_int8u checksum = 0;
@ -573,7 +539,7 @@ static blt_bool SrecVerifyChecksum(const blt_char *line)
} }
/* still here so the checksum was correct */ /* still here so the checksum was correct */
return BLT_TRUE; return BLT_TRUE;
} /*** end of SrecVerifyChecksum ***/ } /*** end of FileSrecVerifyChecksum ***/
/************************************************************************************//** /************************************************************************************//**
@ -589,7 +555,7 @@ static blt_bool SrecVerifyChecksum(const blt_char *line)
** in case the checksum validation failed. ** in case the checksum validation failed.
** **
****************************************************************************************/ ****************************************************************************************/
static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int8u *data) blt_int16s FileSrecParseLine(const blt_char *line, blt_addr *address, blt_int8u *data)
{ {
tSrecLineType lineType; tSrecLineType lineType;
blt_int16s data_byte_count = 0; blt_int16s data_byte_count = 0;
@ -599,7 +565,7 @@ static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int
/* check pointers and not that data can be a null pointer */ /* check pointers and not that data can be a null pointer */
ASSERT_RT((address != BLT_NULL) && (line != BLT_NULL)); ASSERT_RT((address != BLT_NULL) && (line != BLT_NULL));
/* figure out what type of line we are dealing with */ /* figure out what type of line we are dealing with */
lineType = SrecGetLineType(line); lineType = FileSrecGetLineType(line);
/* make sure it is one that we can parse */ /* make sure it is one that we can parse */
if (lineType == LINE_TYPE_UNSUPPORTED) if (lineType == LINE_TYPE_UNSUPPORTED)
{ {
@ -607,7 +573,7 @@ static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int
return 0; return 0;
} }
/* verify the checksum */ /* verify the checksum */
if (SrecVerifyChecksum(line) == BLT_FALSE) if (FileSrecVerifyChecksum(line) == BLT_FALSE)
{ {
/* error on data line encountered */ /* error on data line encountered */
return ERROR_SREC_INVALID_CHECKSUM; return ERROR_SREC_INVALID_CHECKSUM;
@ -704,7 +670,7 @@ static blt_int16s SrecParseLine(const blt_char *line, blt_addr *address, blt_int
} }
return data_byte_count; return data_byte_count;
} /*** end of SrecParseLine ***/ } /*** end of FileSrecParseLine ***/
#if (BOOT_FILE_LOGGING_ENABLE > 0) #if (BOOT_FILE_LOGGING_ENABLE > 0)

View File

@ -58,14 +58,48 @@
/** \brief Error code because the program's checksum could not be written to memory. */ /** \brief Error code because the program's checksum could not be written to memory. */
#define FILE_ERROR_CANNOT_WRITE_CHECKSUM (7) #define FILE_ERROR_CANNOT_WRITE_CHECKSUM (7)
/** \brief Maximum number of characters that can be on a line in the firmware file. */
#define MAX_CHARS_PER_LINE (256)
/** \brief Maximum number of data bytes that can be on a line in the firmware file
* (S-record).
*/
#define MAX_DATA_BYTES_PER_LINE (MAX_CHARS_PER_LINE/2)
/** \brief Return code in case an invalid checksum was detected on an S-record line. */
#define ERROR_SREC_INVALID_CHECKSUM (-1)
/****************************************************************************************
* Type definitions
****************************************************************************************/
/** \brief Enumeration for the different S-record line types. */
typedef enum
{
LINE_TYPE_S1, /**< 16-bit address line */
LINE_TYPE_S2, /**< 24-bit address line */
LINE_TYPE_S3, /**< 32-bit address line */
LINE_TYPE_UNSUPPORTED /**< unsupported line */
} tSrecLineType;
/** \brief Structure type for grouping the parsing results of an S-record line. */
typedef struct
{
blt_char line[MAX_CHARS_PER_LINE]; /**< string buffer for the line chars */
blt_int8u data[MAX_DATA_BYTES_PER_LINE]; /**< array for S1, S2 or S3 data bytes*/
blt_addr address; /**< address on S1, S2 or S3 line */
} tSrecLineParseObject;
/**************************************************************************************** /****************************************************************************************
* Function prototypes * Function prototypes
****************************************************************************************/ ****************************************************************************************/
void FileInit(void); void FileInit(void);
void FileTask(void); void FileTask(void);
blt_bool FileIsIdle(void); blt_bool FileIsIdle(void);
blt_bool FileHandleFirmwareUpdateRequest(void); blt_bool FileHandleFirmwareUpdateRequest(void);
/* functions for reading data from a Motorola S-record file. */
tSrecLineType FileSrecGetLineType(const blt_char *line);
blt_bool FileSrecVerifyChecksum(const blt_char *line);
blt_int16s FileSrecParseLine(const blt_char *line, blt_addr *address, blt_int8u *data);
#endif /* BOOT_FILE_SYS_ENABLE > 0 */ #endif /* BOOT_FILE_SYS_ENABLE > 0 */