Refs #363. Updated GCC Makefiles for the STM32F2 demo programs.

git-svn-id: https://svn.code.sf.net/p/openblt/code/trunk@349 5dc33758-31d5-4daf-9ae8-b24bf3d40d73
This commit is contained in:
Frank Voorburg 2017-08-21 13:06:09 +00:00
parent 6b48314b85
commit 524b0fa008
11 changed files with 2777 additions and 12985 deletions

View File

@ -1,37 +0,0 @@
MEMORY
{
FLASH (rx) : ORIGIN = 0x08006000, LENGTH = 104K
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 20K
}
SECTIONS
{
__STACKSIZE__ = 256;
.text :
{
KEEP(*(.isr_vector))
*(.text*)
*(.rodata*)
_etext = .;
} > FLASH
.data : AT (ADDR(.text) + SIZEOF(.text))
{
_data = .;
*(vtable)
*(.data*)
_edata = .;
} > SRAM
.bss :
{
_bss = .;
*(.bss*)
*(COMMON)
_ebss = .;
_stack = .;
. = ALIGN(MAX(_stack + __STACKSIZE__ , .), 4);
_estack = .;
} > SRAM
}

View File

@ -0,0 +1,38 @@
// ----------------------------------------------------------------------------
#include <stdlib.h>
// ----------------------------------------------------------------------------
// Forward declaration
void
_exit(int code);
// ----------------------------------------------------------------------------
// We just enter an infinite loop, to be used as landmark when halting
// the debugger.
//
// It can be redefined in the application, if more functionality
// is required.
void
__attribute__((weak))
_exit(int code __attribute__((unused)))
{
// TODO: write on trace
while (1)
;
}
// ----------------------------------------------------------------------------
void
__attribute__((weak,noreturn))
abort(void)
{
_exit(1);
}
// ----------------------------------------------------------------------------

View File

@ -0,0 +1,178 @@
#****************************************************************************************
#| Description: Makefile for GNU ARM Embedded toolchain.
#| File Name: makefile
#|
#|---------------------------------------------------------------------------------------
#| C O P Y R I G H T
#|---------------------------------------------------------------------------------------
#| Copyright (c) 2017 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 have received a copy of the GNU General Public License along with OpenBLT. It
#| should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
#|
#****************************************************************************************
SHELL = sh
#|--------------------------------------------------------------------------------------|
#| Configure project name |
#|--------------------------------------------------------------------------------------|
PROJ_NAME=openblt_stm32f207
#|--------------------------------------------------------------------------------------|
#| Configure tool path |
#|--------------------------------------------------------------------------------------|
TOOL_PATH=/opt/gcc-arm-none-eabi-5_4-2016q3/bin/
#|--------------------------------------------------------------------------------------|
#| Collect project files |
#|--------------------------------------------------------------------------------------|
# Recursive wildcard function implementation. Example usages:
# $(call rwildcard, , *.c *.h)
# --> Returns all *.c and *.h files in the current directory and below
# $(call rwildcard, /lib/, *.c)
# --> Returns all *.c files in the /lib directory and below
rwildcard = $(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)))
# Collect all application files in the current directory and its subdirectories, but
# exclude flash-layout.c as this one is directly included in a source file, when used.
PROJ_FILES = $(filter-out flash_layout.c, $(call rwildcard, , *.c *.h *.S))
# Collect bootloader core files
PROJ_FILES += $(wildcard ../../../Source/*.c)
PROJ_FILES += $(wildcard ../../../Source/*.h)
# Collect bootloader port files
PROJ_FILES += $(wildcard ../../../Source/ARMCM3_STM32F2/*.c)
PROJ_FILES += $(wildcard ../../../Source/ARMCM3_STM32F2/*.h)
# Collect bootloader port compiler specific files
PROJ_FILES += $(wildcard ../../../Source/ARMCM3_STM32F2/GCC/*.c)
PROJ_FILES += $(wildcard ../../../Source/ARMCM3_STM32F2/GCC/*.h)
# Collect FatFS third party library files
PROJ_FILES += $(wildcard ../../../Source/third_party/fatfs/src/*.c)
PROJ_FILES += $(wildcard ../../../Source/third_party/fatfs/src/*.h)
PROJ_FILES += ../../../Source/third_party/fatfs/src/option/unicode.c
#|--------------------------------------------------------------------------------------|
#| Toolchain binaries |
#|--------------------------------------------------------------------------------------|
RM = rm
CC = $(TOOL_PATH)arm-none-eabi-gcc
LN = $(TOOL_PATH)arm-none-eabi-gcc
OC = $(TOOL_PATH)arm-none-eabi-objcopy
OD = $(TOOL_PATH)arm-none-eabi-objdump
AS = $(TOOL_PATH)arm-none-eabi-gcc
SZ = $(TOOL_PATH)arm-none-eabi-size
#|--------------------------------------------------------------------------------------|
#| Filter project files
#|--------------------------------------------------------------------------------------|
PROJ_ASRCS = $(filter %.S,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
PROJ_CSRCS = $(filter %.c,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
PROJ_CHDRS = $(filter %.h,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
#|--------------------------------------------------------------------------------------|
#| Set important path variables |
#|--------------------------------------------------------------------------------------|
VPATH = $(foreach path,$(sort $(foreach file,$(PROJ_FILES),$(dir $(file)))) $(subst \,/,$(OBJ_PATH)),$(path) :)
OBJ_PATH = obj
BIN_PATH = bin
INC_PATH = $(patsubst %/,%,$(patsubst %,-I%,$(sort $(foreach file,$(filter %.h,$(PROJ_FILES)),$(dir $(file))))))
LIB_PATH =
#|--------------------------------------------------------------------------------------|
#| Options for toolchain binaries |
#|--------------------------------------------------------------------------------------|
HEAP_SIZE = 0x0800
STACK_SIZE = 0x0800
STDFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -fno-strict-aliasing
STDFLAGS += -fdata-sections -ffunction-sections -Wall -g3
OPTFLAGS = -Og
CFLAGS = $(STDFLAGS) $(OPTFLAGS)
CFLAGS += -DSTM32F207ZE -DSTM32F2XX -DUSE_STDPERIPH_DRIVER
CFLAGS += -D__HEAP_SIZE=$(HEAP_SIZE) -D__STACK_SIZE=$(STACK_SIZE)
CFLAGS += $(INC_PATH)
AFLAGS = $(CFLAGS)
LFLAGS = $(STDFLAGS) $(OPTFLAGS)
LFLAGS += -Wl,--defsym=__HEAP_SIZE=$(HEAP_SIZE) -Wl,--defsym=__STACK_SIZE=$(STACK_SIZE)
LFLAGS += -Wl,-script="stm32f207ze_flash.ld" -Wl,-Map=$(BIN_PATH)/$(PROJ_NAME).map
LFLAGS += -specs=nano.specs -Wl,--gc-sections $(LIB_PATH)
OFLAGS = -O srec
ODFLAGS = -x
SZFLAGS = -B -d
RMFLAGS = -f
#|--------------------------------------------------------------------------------------|
#| Specify library files |
#|--------------------------------------------------------------------------------------|
LIBS =
#|--------------------------------------------------------------------------------------|
#| Define targets |
#|--------------------------------------------------------------------------------------|
AOBJS = $(patsubst %.S,%.o,$(PROJ_ASRCS))
COBJS = $(patsubst %.c,%.o,$(PROJ_CSRCS))
#|--------------------------------------------------------------------------------------|
#| Make ALL |
#|--------------------------------------------------------------------------------------|
.PHONY: all
all: $(BIN_PATH)/$(PROJ_NAME).srec
$(BIN_PATH)/$(PROJ_NAME).srec : $(BIN_PATH)/$(PROJ_NAME).elf
@$(OC) $< $(OFLAGS) $@
@$(OD) $(ODFLAGS) $< > $(BIN_PATH)/$(PROJ_NAME).map
@echo +++ Summary of memory consumption:
@$(SZ) $(SZFLAGS) $<
@echo +++ Build complete [$(notdir $@)]
$(BIN_PATH)/$(PROJ_NAME).elf : $(AOBJS) $(COBJS)
@echo +++ Linking [$(notdir $@)]
@$(LN) $(LFLAGS) -o $@ $(patsubst %.o,$(OBJ_PATH)/%.o,$(^F)) $(LIBS)
#|--------------------------------------------------------------------------------------|
#| Compile and assemble |
#|--------------------------------------------------------------------------------------|
$(AOBJS): %.o: %.S $(PROJ_CHDRS)
@echo +++ Assembling [$(notdir $<)]
@$(AS) $(AFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
$(COBJS): %.o: %.c $(PROJ_CHDRS)
@echo +++ Compiling [$(notdir $<)]
@$(CC) $(CFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
#|--------------------------------------------------------------------------------------|
#| Make CLEAN |
#|--------------------------------------------------------------------------------------|
.PHONY: clean
clean:
@echo +++ Cleaning build environment
@$(RM) $(RMFLAGS) $(foreach file,$(AOBJS),$(OBJ_PATH)/$(file))
@$(RM) $(RMFLAGS) $(foreach file,$(COBJS),$(OBJ_PATH)/$(file))
@$(RM) $(RMFLAGS) $(patsubst %.o,%.lst,$(foreach file,$(COBJS),$(OBJ_PATH)/$(file)))
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).elf $(BIN_PATH)/$(PROJ_NAME).map
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).srec
@echo +++ Clean complete

View File

@ -1,371 +1,254 @@
S02100002E2E5C62696E5C64656D6F70726F675F73746D3332663230372E7372656342
S315080080000000022095930008E3930008E593000812
S31508008010E7930008E9930008EB93000800000000C6
S31508008020000000000000000000000000ED930008BA
S31508008030EF93000800000000F193000891950008EE
S31508008040F7930008F9930008FB930008FD930008CE
S31508008050FF9300080194000803940008059400089B
S3150800806007940008099400080B9400080D9400086A
S315080080700F9400081194000813940008159400083A
S3150800808017940008199400081B9400081D9400080A
S315080080901F940008219400082394000825940008DA
S315080080A027940008299400082B9400082D940008AA
S315080080B02F9400083194000833940008359400087A
S315080080C037940008399400083B9400083D9400084A
S315080080D03F9400084194000843940008459400081A
S315080080E047940008499400084B9400084D940008EA
S315080080F04F940008519400085394000855940008BA
S3150800810057940008599400085B9400085D94000889
S315080081105F94000861940008639400086594000859
S3150800812067940008699400086B9400086D94000829
S315080081306F940008719400087394000875940008F9
S3150800814077940008799400087B9400087D940008C9
S315080081507F94000881940008839400088594000899
S3150800816087940008899400088B9400088D94000869
S315080081708F94000891940008939400089594000839
S3150800818097940008EE11AA5510B5054C237833B913
S01E000062696E2F64656D6F70726F675F73746D3332663230372E737265632A
S315080080000000022059820008A7820008A9820008F9
S31508008010AB820008AD820008AF82000800000000AD
S31508008020000000000000000000000000B182000807
S31508008030B382000800000000B5820008898700089E
S31508008040BB820008BD820008BF820008C182000802
S31508008050C3820008C5820008C7820008C9820008D2
S31508008060CB820008CD820008CF820008D1820008A2
S31508008070D3820008D5820008D7820008D982000872
S31508008080DB820008DD820008DF820008E182000842
S31508008090E3820008E5820008E7820008E982000812
S315080080A0EB820008ED820008EF820008F1820008E2
S315080080B0F3820008F5820008F7820008F9820008B2
S315080080C0FB820008FD820008FF8200080183000881
S315080080D0038300080583000807830008098300084E
S315080080E00B8300080D8300080F830008118300081E
S315080080F013830008158300081783000819830008EE
S315080081001B8300081D8300081F83000821830008BD
S31508008110238300082583000827830008298300088D
S315080081202B8300082D8300082F830008318300085D
S31508008130338300083583000837830008398300082D
S315080081403B8300083D8300083F83000841830008FD
S3150800815043830008458300084783000849830008CD
S315080081604B8300084D8300084F830008518300089D
S31508008170538300085583000857830008598300086D
S315080081805B830008EE11AA5510B5054C237833B960
S31508008190044B13B10448AFF300800123237010BDCC
S315080081A07C0000200000000078960008084B10B5F7
S315080081A07C00002000000000288F0008084B10B54E
S315080081B01BB108490848AFF300800848036803B9AB
S315080081C010BD074B002BFBD0BDE81040184700BF79
S315080081D00000000080000020789600087C0000203F
S315080081D00000000080000020288F00087C00002096
S315080081E000000000154B002B08BF134B9D46A3F556
S315080081F0803A00218B460F461348144A121A01F09A
S315080082000FFA0F4B002B00D098470E4B002B00D0CF
S315080081F0803A00218B460F461348144A121A00F09B
S315080082006BFE0F4B002B00D098470E4B002B00D06F
S3150800821098470020002104000D000D48002802D0D0
S315080082200C48AFF3008001F0D5F92000290001F0D1
S315080082309DF801F0BBF900BF00000800000002200D
S3150800824000000000000000007C000020F400002070
S31508008250000000000000000080B400AFBFF34F8F9D
S315080082600549054BDB6803F4E062044B1343CB6016
S31508008270BFF34F8FFEE700BF00ED00E00400FA05EC
S3150800828080B500AF00F012F800F032F900BF80BDEB
S3150800829080B500AF00F05AF800F0A2F900BF80BD23
S315080082A080B500AFFFF7D8FF00BF80BD80B586B0A8
S315080082B000AF01214FF4802000F082FE0121082042
S315080082C000F060FE072208211E4800F069FD07221B
S315080082D009211C4800F064FD0023BB750123FB75CA
S315080082E002233B754FF480733B6102237B7507F1CC
S315080082F010031946134800F0A9FC02233B754FF4F6
S3150800830000733B6107F1100319460E4800F09EFC06
S315080083104FF461433B600023BB800023FB800023AE
S315080083203B810023BB810C237B813B4619460648CB
S3150800833000F082FE0121044800F038FF00BF18371C
S31508008340BD4680BD000C02400048004080B500AF25
S31508008350254B1B78002B15D1244800F04DF8034611
S31508008360012B3FD1214B1B78002B3BD001F006F99E
S3150800837002461F4B1A601C4B01221A701D4B002225
S315080083801A702FE01B4B1B780133184A1344184602
S3150800839000F032F80346012B19D1164B1B7801332E
S315080083A0DAB2144B1A70114B1A78124B1B789A4290
S315080083B018D10D4B00221A700C4B5B78FF2B11D18C
S315080083C00A4B9B78002B0DD1FFF76AFF0AE001F0F4
S315080083D0D5F80246064B1B6864339A4202D9024B0B
S315080083E000221A7000BF80BD980000209C00002063
S315080083F0E0000020E400002080B582B000AF78607D
S3150800840020210A4800F002FF0346012B08D107483D
S3150800841000F0ECFE0346DAB27B681A70012300E02E
S31508008420002318460837BD4680BD00BF00480040F7
S3150800843080B487B000AFB9607A603B600346FB81C1
S315080084400023FB7548E0FA89FB7D284911F81330AB
S315080084501846FB7D25495B000B445B7803440133D2
S3150800846003FB02F347F2305292FBF3F103FB01F3ED
S31508008470D31A002B2DD1FA89FB7D1C4911F813302C
S315080084801846FB7D19495B000B445B7803440133AE
S3150800849003FB02F347F2305292FBF3F39AB2BB683E
S315080084A01A80BB681B88002B13D0BB681B88B3F5E2
S315080084B0806F0ED8FB7D0D4A12F813207B681A7060
S315080084C0FB7D0A4A5B0013445A783B681A700123FD
S315080084D006E0FB7D0133FB75FB7D112BB3D9002329
S315080084E018461C37BD4680BC704700BF4C9600082E
S315080084F080B58AB000AF0121022000F043FD0922B1
S315080085000821354800F04CFC09220921324800F0C0
S3150800851047FC4FF440733B62022387F8243002235A
S3150800852087F82530002387F82630012387F8273077
S3150800853007F120031946284800F088FB01214FF06F
S31508008540007000F03DFD254800F0CAF807F1140355
S31508008550184600F073FA3B467A1CB91C4FF4FA70B9
S31508008560FFF766FF0023BB760023FB7600233B77E5
S3150800857000237B770023BB770023FB770023BB759B
S315080085800023FB757B78013BDBB23B763B78013BEE
S31508008590DBB27B767B88BB8207F1140319460F484A
S315080085A000F0C2F80023BB730023FB7301233B745E
S315080085B00023BB800023FB8000233B8100237B81B3
S315080085C00023BB8101237B743B1D184600F07CF910
S315080085D000BF2837BD4680BD000402400064004045
S315080085E080B586B000AF0023FB750021124800F065
S315080085F009FB0346002B1AD03B461A4600210E48B3
S3150800860000F046FA3B7A002B06D13B6840F26762D7
S31508008610934201D10123FB75FB7D012B07D1FB7A20
S31508008620FF2B04D13B7B002B01D1FFF739FE00BF9E
S315080086301837BD4680BD00BF0064004080B582B0D3
S3150800864000AF0121202000F09DFC4FF480733B60B1
S315080086500023BB710123FB7102237B7101233B714C
S315080086603B461946054800F0F1FA4FF48071034875
S3150800867000F088FB00BF0837BD4680BD00140240E5
S3150800868080B582B000AF00F079FF7860114B1B68A7
S315080086907A68D31AB3F5FA7F18D30F4B1B78002BD9
S315080086A008D10D4B01221A704FF480710B4800F067
S315080086B05BFB07E0084B00221A704FF480710748ED
S315080086C000F060FB034A7B68136000E000BF0837D0
S315080086D0BD4680BDE8000020EC00002000140240E2
S315080086E080B582B000AF78607B680E4A93420AD1A3
S315080086F001214FF0007000F081FC00214FF000705E
S3150800870000F07CFC09E001214FF0806000F076FC67
S3150800871000214FF0806000F071FC00BF0837BD46AD
S3150800872080BD00BF0064004080B485B000AF7860AB
S3150800873039600023FB730023BB607B681B6823F04A
S3150800874002027B681A607B681B6843F001027B683B
S315080087501A6002E0BB680133BB607B685B6803F0A4
S315080087600103002B04D1BB684FF6FF729342F1D187
S315080087707B685B6803F00103002B02D10023FB73BF
S315080087809CE03B689B79012B06D17B681B6843F00C
S3150800879080027B681A6005E07B681B6823F080020C
S315080087A07B681A603B68DB79012B06D17B681B68FE
S315080087B043F040027B681A6005E07B681B6823F07B
S315080087C040027B681A603B681B7A012B06D17B68DE
S315080087D01B6843F020027B681A6005E07B681B680B
S315080087E023F020027B681A603B685B7A012B06D16E
S315080087F07B681B6843F010027B681A6005E07B689B
S315080088001B6823F010027B681A603B689B7A012B71
S3150800881006D17B681B6843F008027B681A6005E08E
S315080088207B681B6823F008027B681A603B68DB7A62
S31508008830012B06D17B681B6843F004027B681A602B
S3150800884005E07B681B6823F004027B681A603B68B6
S315080088509B789A073B68DB781B061A433B681B79AB
S315080088601B041A433B685B791B051A433B681B8844
S31508008870013B1A437B68DA617B681B6823F00102B7
S315080088807B681A600023BB6002E0BB680133BB60EB
S315080088907B685B6803F00103002B04D0BB684FF6C6
S315080088A0FF729342F1D17B685B6803F00103002BEA
S315080088B002D00023FB7301E00123FB73FB7B184600
S315080088C01437BD4680BC704780B485B000AF786069
S315080088D00023FB607B689B7A1A4601239340FB6062
S315080088E0554A554BD3F8003243F00103C2F800321B
S315080088F05149514BD3F81C22FB68DB431340C1F89E
S315080089001C327B681B7B002B25D14B494A4BD3F87D
S315080089100C22FB68DB431340C1F80C3246497B68DE
S315080089209B7A18467B68DB881B047A6852881A4348
S3150800893000F1480341F833203F497B689B7A184683
S315080089407B689B881B047A6812881A4300F14803DF
S31508008950DB000B445A607B681B7B012B24D136490C
S31508008960354BD3F80C22FB681343C1F80C32324955
S315080089707B689B7A18467B681B881B047A68528832
S315080089801A4300F1480341F833202B497B689B7A48
S3150800899018467B689B881B047A68D2881A4300F1BC
S315080089A04803DB000B445A607B68DB7A002B09D14D
S315080089B02149214BD3F80422FB68DB431340C1F855
S315080089C0043207E01C491C4BD3F80422FB68134306
S315080089D0C1F804327B681B89002B08D11649164B4F
S315080089E0D3F81422FB68DB431340C1F814327B68C2
S315080089F01B89012B07D110490F4BD3F81422FB68AA
S31508008A001343C1F814327B685B7B012B07D10A49F3
S31508008A10094BD3F81C22FB681343C1F81C32064ADB
S31508008A20054BD3F8003223F00103C2F8003200BF29
S31508008A301437BD4680BC70470064004080B483B0DC
S31508008A4000AF78607B6800229A717B680022DA7131
S31508008A507B6800221A727B6800225A727B680022A1
S31508008A609A727B680022DA727B6800229A707B68A9
S31508008A700022DA707B6803221A717B6802225A7117
S31508008A807B6801221A8000BF0C37BD4680BC704740
S31508008A9080B485B000AFF8600B467A60FB72FB7A4B
S31508008AA0FA681B331B0113441B68DBB203F004038B
S31508008AB0DAB27B681A727B681B7A002B09D1FB7ABB
S31508008AC0FA681B331B0113441B685A0D7B681A602E
S31508008AD008E0FB7AFA681B331B0113441B68DA08A3
S31508008AE07B685A60FB7AFA681B331B0113441B68C0
S31508008AF0DBB203F00203DAB27B685A72FB7AFA68D1
S31508008B001B331B01134404331B68DBB203F00F034A
S31508008B10DAB27B689A72FB7AFA681B331B01134434
S31508008B2004331B681B0ADAB27B68DA74FB7AFA68C4
S31508008B301B01134403F5DC731B68DAB27B68DA722F
S31508008B40FB7AFA681B01134403F5DC731B681B0ADE
S31508008B50DAB27B681A73FB7AFA681B01134403F5C9
S31508008B60DC731B681B0CDAB27B685A73FB7AFA68EB
S31508008B701B01134403F5DC731B681B0EDAB27B6812
S31508008B809A73FB7AFA681B01134403F5DE731B68B4
S31508008B90DAB27B68DA73FB7AFA681B01134403F5C9
S31508008BA0DE731B681B0ADAB27B681A74FB7AFA68EA
S31508008BB01B01134403F5DE731B681B0CDAB27B68D2
S31508008BC05A74FB7AFA681B01134403F5DE731B68B3
S31508008BD01B0EDAB27B689A74FB7A002B06D1FB6807
S31508008BE0DB6843F02002FB68DA6005E0FB681B6976
S31508008BF043F02002FB681A6100BF1437BD4680BCEB
S31508008C00704700BF80B485B000AF78600B46FB7034
S31508008C100023FB73FB78002B06D17B68DB68DBB28D
S31508008C2003F00303FB730BE0FB78012B06D17B688B
S31508008C301B69DBB203F00303FB7301E00023FB733C
S31508008C40FB7B18461437BD4680BC704780B487B096
S31508008C5000AF7860396000237B6100233B61002305
S31508008C60FB6000237B6176E001227B6902FA03F34D
S31508008C703B613B681A683B691340FB60FA683B69CD
S31508008C809A4265D17B681A687B695B00032101FA01
S31508008C9003F3DB431A407B681A607B681A683B68F3
S31508008CA01B7919467B695B0001FA03F31A437B6853
S31508008CB01A603B681B79012B03D03B681B79022B92
S31508008CC02ED17B689A687B695B00032101FA03F35E
S31508008CD0DB431A407B689A607B689A683B685B79D5
S31508008CE019467B695B0001FA03F31A437B689A60AD
S31508008CF07B685A687B699BB2012101FA03F3DB435F
S31508008D001A407B685A607B685A683B689B791946A3
S31508008D107B699BB201FA03F39BB21A437B685A60DC
S31508008D207B68DA687B699BB25B00032101FA03F36F
S31508008D30DB431A407B68DA607B68DA683B68DB7974
S31508008D4019467B695B0001FA03F31A437B68DA600C
S31508008D507B6901337B617B690F2B85D900BF1C3783
S31508008D60BD4680BC704700BF80B483B000AF786052
S31508008D700B467B807B687A881A8300BF0C37BD4612
S31508008D8080BC704780B483B000AF78600B467B80A8
S31508008D907B687A885A8300BF0C37BD4680BC70470B
S31508008DA080B485B000AF78600B467B8013467B7035
S31508008DB00023FB600023BB607A787B8803F00703F7
S31508008DC09B0002FA03F3FB607B88DB089BB218461C
S31508008DD07B88DB089BB21A467B68083253F8222048
S31508008DE07B8803F007039B000F2101FA03F3DB439B
S31508008DF002EA03017B6800F1080243F822107B8827
S31508008E00DB089BB21A467B68083253F82220FB68B7
S31508008E101343BB607B88DB089BB21A467B68083223
S31508008E20B96843F8221000BF1437BD4680BC7047A6
S31508008E3080B489B000AF78600023BB6100237B61F2
S31508008E400023FB6102233B610023FB600223BB6016
S31508008E50484B9B6803F00C03BB61BB69042B07D026
S31508008E60082B09D0002B3FD17B68434A1A603FE0A4
S31508008E707B68424A1A603BE03E4B5B6803F480031A
S31508008E809B0DFB603B4B5B6803F03F03BB60FB68D5
S31508008E90002B0DD0394ABB68B2FBF3F2354B596843
S31508008EA047F6C0730B409B0903FB02F3FB610CE01A
S31508008EB0314ABB68B2FBF3F22E4B596847F6C073CA
S31508008EC00B409B0903FB02F3FB612A4B5B6803F427
S31508008ED040331B0C01335B003B61FA693B69B2FB0B
S31508008EE0F3F27B681A6003E07B68234A1A6000BFC6
S31508008EF0204B9B6803F0F003BB61BB691B09BB6190
S31508008F001F4ABB6913441B78DBB27B617B681A680E
S31508008F107B69DA407B685A60164B9B6803F4E0531A
S31508008F20BB61BB699B0ABB61154ABB6913441B78C5
S31508008F30DBB27B617B685A687B69DA407B689A603A
S31508008F400C4B9B6803F46043BB61BB695B0BBB615D
S31508008F500B4ABB6913441B78DBB27B617B685A6892
S31508008F607B69DA407B68DA6000BF2437BD4680BC7F
S31508008F70704700BF003802400024F40040787D01A5
S31508008F800000002080B483B000AF78600B46FB7009
S31508008F90FB78002B06D00949084B1A6B7B681343EC
S31508008FA00B6306E00549054B1A6B7B68DB431340E8
S31508008FB00B6300BF0C37BD4680BC704700380240C3
S31508008FC080B483B000AF78600B46FB70FB78002B4B
S31508008FD006D00949084B1A6C7B6813430B6406E0F4
S31508008FE00549054B1A6C7B68DB4313400B6400BFCD
S31508008FF00C37BD4680BC70470038024080B483B049
S3150800900000AF78600B46FB70FB78002B06D0094949
S31508009010084B1A6A7B6813430B6206E00549054B41
S315080090201A6A7B68DB4313400B6200BF0C37BD46E8
S3150800903080BC70470038024080B58AB000AF7860BF
S31508009040396000237B6200233B620023FB61002317
S31508009050BB617B681B8A9BB27B627B6A23F44053A5
S315080090607B623B68DB881A467B6A13437B627B6AB2
S315080090709AB27B681A827B689B899BB27B627B6A01
S3150800908023F4B05323F00C037B623B689A883B6851
S315080090901B8913439AB23B685B8913439BB21A46F2
S315080090A07B6A13437B627B6A9AB27B689A817B6888
S315080090B09B8A9BB27B627B6A23F440737B623B6824
S315080090C09B891A467B6A13437B627B6A9AB27B68E2
S315080090D09A8207F108031846FFF7AAFE7B68304A0A
S315080090E0934203D07B682F4A934202D17B693B6245
S315080090F001E03B693B627B689B899BB21BB2002BF4
S315080091000CDA3A6A13469B0013449A001A443B68E1
S315080091101B685B00B2FBF3F3FB610BE03A6A13468C
S315080091209B0013449A001A443B681B689B00B2FBD9
S31508009130F3F3FB61FB691C4AA2FB03235B091B01D2
S315080091407B627B6A1B09642202FB03F3FA69D31A62
S31508009150BB617B689B899BB21BB2002B0CDABB698F
S31508009160DB003233104AA2FB03235B0903F0070333
S315080091707A6A13437B620BE0BB691B0132330A4AE6
S31508009180A2FB03235B0903F00F037A6A13437B628E
S315080091907B6A9AB27B681A8100BF2837BD4680BDB4
S315080091A000100140001401401F85EB5180B483B0C4
S315080091B000AF78600B46FB70FB78002B08D07B6805
S315080091C09B899BB243F400539AB27B689A8107E065
S315080091D07B689B899BB223F400539AB27B689A8179
S315080091E000BF0C37BD4680BC704700BF80B483B053
S315080091F000AF78607B689B889BB2C3F308039BB279
S3150800920018460C37BD4680BC704700BF80B485B091
S3150800921000AF78600B467B800023FB737B681B8856
S315080092209AB27B8813409BB2002B02D00123FB73B2
S3150800923001E00023FB73FB7B18461437BD4680BC50
S31508009240704700BF80B500AF104A104B1B6843F04B
S31508009250010313600D4B00229A600C4A0B4B1B68E6
S3150800926023F0847323F480331360084B084A5A604A
S31508009270064A064B1B6823F480231360034B00221F
S31508009280DA6000F007F800BF80BD00BF0038024072
S315080092901030002480B483B000AF00237B60002325
S315080092A03B602F4A2E4B1B6843F4803313602C4BCC
S315080092B01B6803F400333B607B6801337B603B68C3
S315080092C0002B03D17B68B3F5C06FF0D1244B1B6824
S315080092D003F40033002B02D001233B6001E0002396
S315080092E03B603B68012B36D11D4A1D4B9B6893603A
S315080092F01B4A1B4B9B6843F400439360184A184B60
S315080093009B6843F4A0539360154B164A5A60144A57
S31508009310134B1B6843F08073136000BF104B1B6828
S3150800932003F00073002BF9D00F4B40F203721A605A
S315080093300B4A0B4B9B6823F003039360084A084BC0
S315080093409B6843F00203936000BF054B9B6803F0DC
S315080093500C03082BF9D100BF0C37BD4680BC7047FB
S3150800936000380240193C4005003C024080B500AF79
S3150800937000F008F8FEF784FFFFF782F9FEF788FF8A
S31508009380FAE700BF80B500AFFFF758F900F0D4F848
S3150800939000BF80BD07498D460749084A084B9A42CF
S315080093A0BEBF51F8040B42F8040BF8E7054880479E
S315080093B005480047000002208496000800000020A7
S315080093C07C00002045920008E58100083249334AAE
S315080093D0002301E041F8043B9142FBD3FFF7C6FFA7
S315080093E0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE747
S315080093F0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737
S31508009400FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE726
S31508009410FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE716
S31508009420FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE706
S31508009430FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7F6
S31508009440FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7E6
S31508009450FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7D6
S31508009460FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7C6
S31508009470FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B6
S31508009480FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7A6
S31508009490FEE7FEE7FEE7FEE77C000020F40000207A
S315080094A080B483B000AF03463960FB7197F9073083
S315080094B0002B0BDA0D49FB7903F00F03043B3A68DE
S315080094C0D2B21201D2B20B441A7609E0084997F9CA
S315080094D007303A68D2B21201D2B20B4483F800239D
S315080094E000BF0C37BD4680BC704700BF00ED00E0EA
S315080094F000E100E080B582B000AF78607B68B3F128
S31508009500807F01D3012311E00A4A7B6823F07F4359
S31508009510013B53600F214FF0FF30FFF7C1FF054BAA
S3150800952000229A60034B07221A6000231846083760
S31508009530BD4680BD10E000E080B500AF064B1B6855
S31508009540064AA2FB03239B091846FFF7D3FF002010
S3150800955000F006F800BF80BD10000020D34D621051
S3150800956080B483B000AF7860034A7B68136000BF9D
S315080095700C37BD4680BC7047F000002080B400AFB1
S31508009580024B1B681846BD4680BC7047F000002099
S3150800959080B400AF044B1B680133034A136000BF55
S315080095A0BD4680BC704700BFF000002008B5074BD9
S315080095B0044613B10021AFF30080054B1868836A8F
S315080095C003B19847204600F033F800BF00000000BA
S315080095D0749600080E4B70B51E460E4C0025E41A0C
S315080095E0A410A54204D056F8253098470135F8E767
S315080095F000F020F8084B094C1E46E41AA410002572
S31508009600A54204D056F8253098470135F8E770BDCD
S3150800961074000020740000207400002078000020E8
S3150800962003460244934202D003F8011BFAE7704747
S31508009630FEE70000F8B500BFF8BC08BC9E467047B8
S31508009640F8B500BFF8BC08BC9E467047050206027E
S31508009650060307030803090309040A040B040C0498
S315080096600C050D050E050F050F0610061007100848
S3110800967043000000140000200000000069
S30D0800967C68EBFF7F0100000006
S315080096840000000001020304010203040607080996
S31508009694000E27070000000000000000000000007C
S315080096A400000000000000000000000000000000A8
S315080096B4000000007096000800000000000000008A
S315080096C40000000000000000000000000000000088
S315080096D40000000000000000000000000000000078
S315080096E40000000000000000000000000000000068
S311080096F400000000AD8100088981000814
S315080082200C48AFF3008000F031FE2000290000F072
S315080082302DFA00F017FE00BF00000800000002201B
S3150800824000000000000000007C000020EC00002078
S31508008250000000000000000007498D460749084A4B
S31508008260084B9A42BEBF51F8040B42F8040BF8E7D4
S31508008270054880470548004700000220348F00085B
S31508008280000000207C00002049880008E5810008DD
S315080082903249334A002301E041F8043B9142FBD3BB
S315080082A000F0F4F9FEE7FEE7FEE7FEE7FEE7FEE785
S315080082B0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE788
S315080082C0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE778
S315080082D0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE768
S315080082E0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE758
S315080082F0FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE748
S31508008300FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE737
S31508008310FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE727
S31508008320FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE717
S31508008330FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE707
S31508008340FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7F7
S31508008350FEE7FEE7FEE7FEE7FEE7FEE77C00002015
S31508008360EC000020F0B5002421E0134D15F8147038
S3150800837005EB440595F801E007EB0E0505FB00053E
S3150800838047F2305C9CFBF5F605FB16C66EB99CFBFE
S31508008390F5F5ADB20D80013DADB2B5F5806F04D2ED
S315080083A0177083F800E00120F0BD0134E4B2112C07
S315080083B0DBD90020F0BD00BF008F0008F0B587B0FC
S315080083C001214FF4802000F0C3FA0121082000F0B3
S315080083D0B1FA1F4D07220821284600F09DFB072207
S315080083E00921284600F098FB00248DF8164001273D
S315080083F08DF8177002268DF814604FF48073049375
S315080084008DF8156004A9284600F040FB8DF8146025
S315080084104FF40073049304A9284600F037FB4FF481
S3150800842061430093ADF80440ADF80640ADF8084046
S31508008430ADF80C400C23ADF80A30064C69462046C8
S3150800844000F0A2FA3946204600F006FB07B0F0BD58
S31508008450000C02400048004070B58AB00121022095
S3150800846000F068FA354E09220821304600F054FB20
S3150800847009221146304600F04FFB4FF4407308932B
S3150800848002238DF824308DF8253000248DF82640F7
S3150800849001258DF8275008A9304600F0F7FA294635
S315080084A04FF0007000F054FAA6F5D036304600F0CA
S315080084B04BFB05A800F066FC6B460DEB05020DF1BB
S315080084C002014FF4FA70FFF74DFF8DF81A408DF848
S315080084D01B408DF81C408DF81D408DF81E408DF808
S315080084E01F408DF816408DF817409DF80130013B66
S315080084F08DF818309DF80030013B8DF81930BDF81D
S315080085000230ADF8143005A9304600F039FB8DF875
S315080085100E408DF80F408DF81050ADF80440ADF8B8
S315080085200640ADF80840ADF80A40ADF80C408DF8A5
S31508008530115001A800F0ACFB0AB070BD000402405F
S3150800854010B504462021064800F098FA012805D1FE
S31508008550034800F08FFA2070012010BD002010BDDE
S315080085600048004008B5FFF729FFFFF775FF08BD6B
S31508008570BFF34F8F0449CA6802F4E062034B134302
S31508008580CB60BFF34F8FFEE700ED00E00400FA056D
S3150800859008B5204B1B789BB91F48FFF7D1FF012868
S315080085A036D11D4B1B78002B32D000F0E7F81B4B59
S315080085B018600122174B1A700022194B1A7008BD51
S315080085C0174B1B78013314481844FFF7B9FF0128E5
S315080085D014D1134A13780133DBB213700E4A12789A
S315080085E0934215D100220B4B1A700B4B5B78FF2B6D
S315080085F00ED1094B9B785BB9FFF7BAFF00F0BEF8BE
S31508008600064B1B686433984202D90022014B1A7044
S3150800861008BD00BFDA00002098000020DC0000201A
S31508008620D900002000B587B00021114800F00CFCE5
S31508008630D8B101AA00210E4800F0B4FB9DF80C3011
S3150800864033B940F26763019A9A4203D0002302E0E5
S31508008650002300E0012343B19DF80F30FF2B04D11E
S315080086609DF810300BB9FFF783FF07B05DF804FBE0
S315080086700064004008B5FFF78BFFFFF7D3FF08BD7E
S3150800868008B500F00DF800F05BF808BD08B5FFF76F
S31508008690F7FFFFF767FF00F025F8FFF7EBFFFAE7AC
S315080086A030B583B00121202000F044F94FF48075DD
S315080086B0009500238DF8063001238DF80730022235
S315080086C08DF805208DF80430054C6946204600F0E3
S315080086D0DDF92946204600F01DFA03B030BD00BF7B
S315080086E00014024010B500F049F80F4B1B68C31A76
S315080086F0B3F5FA7F16D304460C4B1B7843B901220F
S315080087000A4B1A704FF48071094800F001FA07E025
S315080087100022064B1A704FF48071054800F0FAF9EA
S31508008720014B1C6010BD00BFE0000020E4000020E3
S3150800873000140240014B1860704700BFE800002093
S3150800874008B50A4B1B680A4AA2FB03239B09013B8F
S31508008750084A5360F021084B83F8231000209060E4
S3150800876007231360FFF7E6FF08BD00BF00000020DF
S31508008770D34D621010E000E000ED00E0014B1868F0
S31508008780704700BFE8000020024A136801331360EF
S31508008790704700BFE8000020FEE700BF82B0002354
S315080087A001930093254A136843F480331360234BDF
S315080087B01B6803F400330093019B01330193009B6C
S315080087C01BB9019BB3F5C06FF1D11C4B1B6813F4A1
S315080087D0003F02D00123009301E000230093009B91
S315080087E0012B29D1154B9A689A609A6842F400427F
S315080087F09A609A6842F4A0529A60114A5A601A68B6
S3150800880042F080721A600D4B1B6813F0007FFAD095
S3150800881040F203720B4B1A60A3F580639A6822F044
S3150800882003029A609A6842F002029A60034B9B68B8
S3150800883003F00C03082BF9D102B070470038024048
S31508008840193C4005003C024008B50B4B1A6842F03B
S3150800885001021A60002199601A6822F0847222F4D3
S3150800886080321A60054A5A601A6822F480221A6011
S31508008870D960FFF793FF08BD003802401030002486
S3150800888010B4284B9B6803F00C03042B05D0082B67
S3150800889006D053BB244B036029E0244B036026E033
S315080088A0204B5A685B6803F03F0312F4800F09D027
S315080088B01E4AB2FBF3F21B4B5B68C3F3881303FB38
S315080088C002F208E0184AB2FBF3F3164A5168C1F3FC
S315080088D0881101FB03F2134B5B68C3F301430133B1
S315080088E05B00B2FBF3F3036001E00F4B03600D4C32
S315080088F0A368C3F303130E49CB5CDAB20368D3400B
S315080089004360A268C2F382228A5CD2B223FA02F2D8
S315080089108260A268C2F342328A5CD2B2D340C36094
S3150800892010BC7047003802400024F40040787D01EE
S315080089300400002021B1054B1A6B104318637047D9
S31508008940024A136B23EA000010637047003802409E
S3150800895021B1054B1A6C104318647047024A136C10
S3150800896023EA0000106470470038024021B1054B25
S315080089701A6A104318627047024A136A23EA00000B
S31508008980106270470038024030B585B004460D467F
S31508008990038A9BB223F44053CA881343038283890C
S315080089A09BB223F4B05323F00C01A8882A896B895B
S315080089B0024313430B43A381A38A9BB223F4407358
S315080089C0AA891343A3826846FFF75AFF204B9C42A5
S315080089D003D003F580639C4201D1039A00E0029A12
S315080089E0A38913F4004F08D002EB820202EB82023D
S315080089F029684900B2FBF1F107E002EB820202EBBB
S31508008A00820229688900B2FBF1F1124BA3FB01230C
S31508008A105B091B011A09642000FB1212A18911F4D3
S31508008A20004F08D0D20032320A49A1FB0212C2F323
S31508008A3042121A4307E0120132320649A1FB02121A
S31508008A40C2F343121A4392B2228105B030BD00BF69
S31508008A50001001401F85EB5129B183899BB243F46D
S31508008A6000538381704783899BB223F400539BB2DA
S31508008A70838170478088C0F30800704703881942CD
S31508008A8001D0012070470020704700BF70B4002352
S31508008A903AE001229A400C68A24334D104685D008A
S31508008AA00322AA40D2431440046006680C79AC40FD
S31508008AB0344304600C79013CE4B2012C15D884686F
S31508008AC02240826084684A79AA40224382604668C6
S31508008AD09AB20124944026EA0404446046688C79D4
S31508008AE004FA02F292B232434260C4689AB256005D
S31508008AF00322B24024EA0202C260C668CC7904FAAC
S31508008B0005F23243C26001330F2BC2D970BC7047DD
S31508008B10018370474183704730B401F007039B0017
S31508008B209A40C908083150F821400F2505FA03F381
S31508008B3024EA030340F8213050F821301A4340F85C
S31508008B40212030BC704700BF08B50C4B98420AD1AB
S31508008B5001214FF00070FFF709FF00214FF0007068
S31508008B60FFF704FF08BD01214FF08060FFF7FEFE06
S31508008B7000214FF08060FFF7F9FE08BD0064004051
S31508008B80036823F002030360036843F001030360EC
S31508008B90002300E00133426812F0010F03D14FF6BB
S31508008BA0FF729342F6D1436813F0010F6BD08B79AD
S31508008BB0012B04D1036843F08003036003E00368D4
S31508008BC023F080030360CB79012B04D1036843F0BB
S31508008BD04003036003E0036823F0400303600B7A55
S31508008BE0012B04D1036843F02003036003E0036804
S31508008BF023F0200303604B7A012B04D1036843F06A
S31508008C001003036003E0036823F0100303608B7A04
S31508008C10012B04D1036843F00803036003E00368EB
S31508008C2023F008030360CB7A012B04D1036843F0D1
S31508008C300403036003E0036823F0040303608A78EF
S31508008C40CB781B0643EA82730A7943EA02434A79D8
S31508008C5043EA02530A88013A1343C361036823F0BF
S31508008C6001030360002300E00133426812F0010F9C
S31508008C7003D04FF6FF729342F6D1436813F0010F03
S31508008C8003D000207047002070470120704700BFBE
S31508008C9070B4837A012202FA03F3394AD2F8001231
S31508008CA041F00101C2F80012D2F81C12DC4321403F
S31508008CB0C2F81C12027BB2B9314AD2F80C12214012
S31508008CC0C2F80C12817AC688458845EA06454831B5
S31508008CD042F83150857A8688018841EA0641483546
S31508008CE002EBC5025160027B012A16D1244AD2F84A
S31508008CF00C121943C2F80C12817A0688458845EA8F
S31508008D000645483142F83150857A8688C18841EA55
S31508008D100641483502EBC5025160C27A32B9184994
S31508008D20D1F804222240C1F8042205E01449D1F8FA
S31508008D3004221A43C1F8042202892AB91049D1F833
S31508008D4014221440C1F814420289012A05D10C499B
S31508008D50D1F814221A43C1F81422427B012A05D1FC
S31508008D600749D1F81C221343C1F81C32044AD2F829
S31508008D70003223F00103C2F8003270BC704700BF0E
S31508008D800064004000238371C371037243728372C7
S31508008D90C3728370C37003230371022343710123D3
S31508008DA00380704710B401F11B031B01C35803F07D
S31508008DB00403DBB2137233B901F11B031B01C35859
S31508008DC05B0D136005E001F11B031B01C358DB08AB
S31508008DD0536001F11B031B01C418C35803F00203B7
S31508008DE05372636803F00F03937263681B0AD374A4
S31508008DF000EB0113D3F8B841D472D3F8B841240A6A
S31508008E001473D3F8B841240C5473D3F8B841240E1C
S31508008E109473D3F8BC41D473D3F8BC41240A1474B0
S31508008E20D3F8BC41240C5474D3F8BC311B0E93748C
S31508008E3021B9C36843F02003C36003E0036943F024
S31508008E402003036110BC704719B9C06800F003001D
S31508008E507047012903D1006900F00300704700201C
S31508008E60704700BF08B5074B044613B10021AFF39E
S31508008E700080054B1868836A03B198472046FFF7B8
S31508008E808BFC00BF00000000248F00080E4B70B555
S31508008E901E460E4C0025E41AA410A54204D056F826
S31508008EA0253098470135F8E700F01EF8084B094CBD
S31508008EB01E46E41AA4100025A54204D056F825300B
S31508008EC098470135F8E770BD74000020740000204B
S31508008ED0740000207800002003460244934202D022
S31508008EE003F8011BFAE77047F8B500BFF8BC08BCE1
S31508008EF09E467047F8B500BFF8BC08BC9E4670474A
S31508008F0005020602060307030803090309040A04FF
S31508008F100B040C040C050D050E050F050F061006AF
S31108008F20100710081400002000000000D4
S30D08008F2CB8F2FF7F0100000006
S31508008F34000E2707000000000102030401020304CF
S31508008F4406070809000000000000000000000000F1
S31508008F5400000000000000000000000000000000FF
S31508008F6400000000000000000000000000000000EF
S31508008F7400000000000000000000000000000000DF
S31508008F8400000000000000000000000000000000CF
S31508008F9400000000000000000000000000000000BF
S31108008FA400000000AD810008898100086B
S7050800800072

View File

@ -0,0 +1,38 @@
// ----------------------------------------------------------------------------
#include <stdlib.h>
// ----------------------------------------------------------------------------
// Forward declaration
void
_exit(int code);
// ----------------------------------------------------------------------------
// We just enter an infinite loop, to be used as landmark when halting
// the debugger.
//
// It can be redefined in the application, if more functionality
// is required.
void
__attribute__((weak))
_exit(int code __attribute__((unused)))
{
// TODO: write on trace
while (1)
;
}
// ----------------------------------------------------------------------------
void
__attribute__((weak,noreturn))
abort(void)
{
_exit(1);
}
// ----------------------------------------------------------------------------

View File

@ -0,0 +1,164 @@
#****************************************************************************************
#| Description: Makefile for GNU ARM Embedded toolchain.
#| File Name: makefile
#|
#|---------------------------------------------------------------------------------------
#| C O P Y R I G H T
#|---------------------------------------------------------------------------------------
#| Copyright (c) 2017 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 have received a copy of the GNU General Public License along with OpenBLT. It
#| should be located in ".\Doc\license.html". If not, contact Feaser to obtain a copy.
#|
#****************************************************************************************
SHELL = sh
#|--------------------------------------------------------------------------------------|
#| Configure project name |
#|--------------------------------------------------------------------------------------|
PROJ_NAME=demoprog_stm32f207
#|--------------------------------------------------------------------------------------|
#| Configure tool path |
#|--------------------------------------------------------------------------------------|
TOOL_PATH=/opt/gcc-arm-none-eabi-5_4-2016q3/bin/
#|--------------------------------------------------------------------------------------|
#| Collect project files |
#|--------------------------------------------------------------------------------------|
# Recursive wildcard function implementation. Example usages:
# $(call rwildcard, , *.c *.h)
# --> Returns all *.c and *.h files in the current directory and below
# $(call rwildcard, /lib/, *.c)
# --> Returns all *.c files in the /lib directory and below
rwildcard = $(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)))
# Collect all application files in the current directory and its subdirectories
PROJ_FILES = $(call rwildcard, , *.c *.h *.S)
#|--------------------------------------------------------------------------------------|
#| Toolchain binaries |
#|--------------------------------------------------------------------------------------|
RM = rm
CC = $(TOOL_PATH)arm-none-eabi-gcc
LN = $(TOOL_PATH)arm-none-eabi-gcc
OC = $(TOOL_PATH)arm-none-eabi-objcopy
OD = $(TOOL_PATH)arm-none-eabi-objdump
AS = $(TOOL_PATH)arm-none-eabi-gcc
SZ = $(TOOL_PATH)arm-none-eabi-size
#|--------------------------------------------------------------------------------------|
#| Filter project files
#|--------------------------------------------------------------------------------------|
PROJ_ASRCS = $(filter %.S,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
PROJ_CSRCS = $(filter %.c,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
PROJ_CHDRS = $(filter %.h,$(foreach file,$(PROJ_FILES),$(notdir $(file))))
#|--------------------------------------------------------------------------------------|
#| Set important path variables |
#|--------------------------------------------------------------------------------------|
VPATH = $(foreach path,$(sort $(foreach file,$(PROJ_FILES),$(dir $(file)))) $(subst \,/,$(OBJ_PATH)),$(path) :)
OBJ_PATH = obj
BIN_PATH = bin
INC_PATH = $(patsubst %/,%,$(patsubst %,-I%,$(sort $(foreach file,$(filter %.h,$(PROJ_FILES)),$(dir $(file))))))
LIB_PATH =
#|--------------------------------------------------------------------------------------|
#| Options for toolchain binaries |
#|--------------------------------------------------------------------------------------|
HEAP_SIZE = 0x0800
STACK_SIZE = 0x0800
STDFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -fno-strict-aliasing
STDFLAGS += -fdata-sections -ffunction-sections -Wall -g3
OPTFLAGS = -Og
CFLAGS = $(STDFLAGS) $(OPTFLAGS)
CFLAGS += -DSTM32F207ZE -DSTM32F2XX -DUSE_STDPERIPH_DRIVER
CFLAGS += -D__HEAP_SIZE=$(HEAP_SIZE) -D__STACK_SIZE=$(STACK_SIZE)
CFLAGS += $(INC_PATH)
AFLAGS = $(CFLAGS)
LFLAGS = $(STDFLAGS) $(OPTFLAGS)
LFLAGS += -Wl,--defsym=__HEAP_SIZE=$(HEAP_SIZE) -Wl,--defsym=__STACK_SIZE=$(STACK_SIZE)
LFLAGS += -Wl,-script="stm32f207ze_flash.ld" -Wl,-Map=$(BIN_PATH)/$(PROJ_NAME).map
LFLAGS += -specs=nano.specs -Wl,--gc-sections $(LIB_PATH)
OFLAGS = -O srec
ODFLAGS = -x
SZFLAGS = -B -d
RMFLAGS = -f
#|--------------------------------------------------------------------------------------|
#| Specify library files |
#|--------------------------------------------------------------------------------------|
LIBS =
#|--------------------------------------------------------------------------------------|
#| Define targets |
#|--------------------------------------------------------------------------------------|
AOBJS = $(patsubst %.S,%.o,$(PROJ_ASRCS))
COBJS = $(patsubst %.c,%.o,$(PROJ_CSRCS))
#|--------------------------------------------------------------------------------------|
#| Make ALL |
#|--------------------------------------------------------------------------------------|
.PHONY: all
all: $(BIN_PATH)/$(PROJ_NAME).srec
$(BIN_PATH)/$(PROJ_NAME).srec : $(BIN_PATH)/$(PROJ_NAME).elf
@$(OC) $< $(OFLAGS) $@
@$(OD) $(ODFLAGS) $< > $(BIN_PATH)/$(PROJ_NAME).map
@echo +++ Summary of memory consumption:
@$(SZ) $(SZFLAGS) $<
@echo +++ Build complete [$(notdir $@)]
$(BIN_PATH)/$(PROJ_NAME).elf : $(AOBJS) $(COBJS)
@echo +++ Linking [$(notdir $@)]
@$(LN) $(LFLAGS) -o $@ $(patsubst %.o,$(OBJ_PATH)/%.o,$(^F)) $(LIBS)
#|--------------------------------------------------------------------------------------|
#| Compile and assemble |
#|--------------------------------------------------------------------------------------|
$(AOBJS): %.o: %.S $(PROJ_CHDRS)
@echo +++ Assembling [$(notdir $<)]
@$(AS) $(AFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
$(COBJS): %.o: %.c $(PROJ_CHDRS)
@echo +++ Compiling [$(notdir $<)]
@$(CC) $(CFLAGS) -c $< -o $(OBJ_PATH)/$(@F)
#|--------------------------------------------------------------------------------------|
#| Make CLEAN |
#|--------------------------------------------------------------------------------------|
.PHONY: clean
clean:
@echo +++ Cleaning build environment
@$(RM) $(RMFLAGS) $(foreach file,$(AOBJS),$(OBJ_PATH)/$(file))
@$(RM) $(RMFLAGS) $(foreach file,$(COBJS),$(OBJ_PATH)/$(file))
@$(RM) $(RMFLAGS) $(patsubst %.o,%.lst,$(foreach file,$(COBJS),$(OBJ_PATH)/$(file)))
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).elf $(BIN_PATH)/$(PROJ_NAME).map
@$(RM) $(RMFLAGS) $(BIN_PATH)/$(PROJ_NAME).srec
@echo +++ Clean complete