From 6ea054dcf3c8c6a4dd77472c0d730a166dd8ee45 Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Fri, 2 Dec 2016 21:50:17 +1300 Subject: [PATCH 1/5] Optimised size for non realtime targets. --- Makefile | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index f2edc40d5..ec0f39739 100644 --- a/Makefile +++ b/Makefile @@ -557,6 +557,12 @@ COMMON_SRC = \ $(CMSIS_SRC) \ $(DEVICE_STDPERIPH_SRC) +NON_RT_SRC = \ + io/serial_cli.c \ + io/serial_4way.c \ + io/serial_4way_avrootloader.c \ + io/serial_4way_stk500v2.c + HIGHEND_SRC = \ blackbox/blackbox.c \ blackbox/blackbox_io.c \ @@ -762,13 +768,14 @@ OPTIMIZE = -Os else OPTIMIZE = -Ofast endif -LTO_FLAGS = -flto -fuse-linker-plugin $(OPTIMIZE) +LTO_BASE = -flto -fuse-linker-plugin +LTO_FLAGS = $(LTO_BASE) $(OPTIMIZE) +NON_RT_LTO_FLAGS = $(LTO_BASE) -Os endif DEBUG_FLAGS = -ggdb3 -DDEBUG CFLAGS += $(ARCH_FLAGS) \ - $(LTO_FLAGS) \ $(addprefix -D,$(OPTIONS)) \ $(addprefix -I,$(INCLUDE_DIRS)) \ $(DEBUG_FLAGS) \ @@ -848,8 +855,11 @@ $(TARGET_ELF): $(TARGET_OBJS) # Compile $(OBJECT_DIR)/$(TARGET)/%.o: %.c $(V1) mkdir -p $(dir $@) - $(V1) echo "%% $(notdir $<)" "$(STDOUT)" - $(V1) $(CROSS_CC) -c -o $@ $(CFLAGS) $< + $(V1) $(if $(findstring $(subst ./src/main/,,$<), $(NON_RT_SRC)), \ + echo "%% (unoptimised) $(notdir $<)" "$(STDOUT)" && \ + $(CROSS_CC) -c -o $@ $(CFLAGS) $(NON_RT_LTO_FLAGS) $<, \ + echo "%% $(notdir $<)" "$(STDOUT)" && \ + $(CROSS_CC) -c -o $@ $(CFLAGS) $(LTO_FLAGS) $<) # Assemble $(OBJECT_DIR)/$(TARGET)/%.o: %.s From 43b41d054e6c7d99f99d3e7db00a660b9a8ba8cc Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Mon, 5 Dec 2016 09:06:01 +1300 Subject: [PATCH 2/5] Added '-ffast-math' to space optimised targets, to eliminate linker warnings and further reduce size. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ec0f39739..f12e502ec 100644 --- a/Makefile +++ b/Makefile @@ -770,7 +770,7 @@ OPTIMIZE = -Ofast endif LTO_BASE = -flto -fuse-linker-plugin LTO_FLAGS = $(LTO_BASE) $(OPTIMIZE) -NON_RT_LTO_FLAGS = $(LTO_BASE) -Os +NON_RT_LTO_FLAGS = $(LTO_BASE) -Os -ffast-math endif DEBUG_FLAGS = -ggdb3 -DDEBUG From 9f7bae899f65ef38d82d66c57db29ac3d53d8245 Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Mon, 5 Dec 2016 10:34:51 +1300 Subject: [PATCH 3/5] Added 'low priority' target list. --- Makefile | 74 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index f12e502ec..b5b854f0a 100644 --- a/Makefile +++ b/Makefile @@ -557,12 +557,6 @@ COMMON_SRC = \ $(CMSIS_SRC) \ $(DEVICE_STDPERIPH_SRC) -NON_RT_SRC = \ - io/serial_cli.c \ - io/serial_4way.c \ - io/serial_4way_avrootloader.c \ - io/serial_4way_stk500v2.c - HIGHEND_SRC = \ blackbox/blackbox.c \ blackbox/blackbox_io.c \ @@ -601,6 +595,44 @@ HIGHEND_SRC = \ telemetry/mavlink.c \ telemetry/esc_telemetry.c \ +NON_RT_SRC = \ + drivers/serial_escserial.c \ + io/serial_cli.c \ + io/serial_4way.c \ + io/serial_4way_avrootloader.c \ + io/serial_4way_stk500v2.c \ + msp/msp_serial.c \ + +LOW_PRIO_SRC = \ + msp/msp_serial.c \ + cms/cms.c \ + cms/cms_menu_blackbox.c \ + cms/cms_menu_builtin.c \ + cms/cms_menu_imu.c \ + cms/cms_menu_ledstrip.c \ + cms/cms_menu_misc.c \ + cms/cms_menu_osd.c \ + cms/cms_menu_vtx.c \ + flight/gtune.c \ + flight/gps_conversion.c \ + io/dashboard.c \ + io/displayport_max7456.c \ + io/displayport_msp.c \ + io/displayport_oled.c \ + io/gps.c \ + io/ledstrip.c \ + io/osd.c \ + sensors/sonar.c \ + sensors/barometer.c \ + telemetry/telemetry.c \ + telemetry/crsf.c \ + telemetry/frsky.c \ + telemetry/hott.c \ + telemetry/smartport.c \ + telemetry/ltm.c \ + telemetry/mavlink.c \ + telemetry/esc_telemetry.c \ + ifeq ($(TARGET),$(filter $(TARGET),$(F4_TARGETS))) VCP_SRC = \ vcpf4/stm32f4xx_it.c \ @@ -760,17 +792,24 @@ SIZE := $(ARM_SDK_PREFIX)size # ifeq ($(DEBUG),GDB) -OPTIMIZE = -O0 -LTO_FLAGS = $(OPTIMIZE) +OPTIMIZE = -O0 +CC_OPTIMISATION = $(OPTIMISE) +LOW_PRIO_CC_OPTIMISATION = $(OPTIMISE) +NON_RT_CC_OPTIMISATION = $(OPTIMISE) +LTO_FLAGS = $(OPTIMIZE) else ifeq ($(TARGET),$(filter $(TARGET),$(F1_TARGETS))) -OPTIMIZE = -Os +OPTIMISE = -Os +OPTIMISE_LOW_PRIO = -Os else -OPTIMIZE = -Ofast +OPTIMISE = -Ofast +OPTIMISE_LOW_PRIO = -O2 endif -LTO_BASE = -flto -fuse-linker-plugin -LTO_FLAGS = $(LTO_BASE) $(OPTIMIZE) -NON_RT_LTO_FLAGS = $(LTO_BASE) -Os -ffast-math +OPTIMISATION_BASE = -flto -fuse-linker-plugin -ffast-math +CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE) +LOW_PRIO_CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE_LOW_PRIO) +NON_RT_CC_OPTIMISATION = $(OPTIMISATION_BASE) -Os +LTO_FLAGS = $(OPTIMISATION_BASE) $(OPTIMIZE) endif DEBUG_FLAGS = -ggdb3 -DDEBUG @@ -856,10 +895,13 @@ $(TARGET_ELF): $(TARGET_OBJS) $(OBJECT_DIR)/$(TARGET)/%.o: %.c $(V1) mkdir -p $(dir $@) $(V1) $(if $(findstring $(subst ./src/main/,,$<), $(NON_RT_SRC)), \ - echo "%% (unoptimised) $(notdir $<)" "$(STDOUT)" && \ - $(CROSS_CC) -c -o $@ $(CFLAGS) $(NON_RT_LTO_FLAGS) $<, \ + echo "%% (non-realtime) $(notdir $<)" "$(STDOUT)" && \ + $(CROSS_CC) -c -o $@ $(CFLAGS) $(NON_RT_CC_OPTIMISATION) $<, \ + $(if $(findstring $(subst ./src/main/,,$<), $(LOW_PRIO_SRC)), \ + echo "%% (low priority) $(notdir $<)" "$(STDOUT)" && \ + $(CROSS_CC) -c -o $@ $(CFLAGS) $(LOW_PRIO_CC_OPTIMISATION) $<, \ echo "%% $(notdir $<)" "$(STDOUT)" && \ - $(CROSS_CC) -c -o $@ $(CFLAGS) $(LTO_FLAGS) $<) + $(CROSS_CC) -c -o $@ $(CFLAGS) $(CC_OPTIMISATION) $<)) # Assemble $(OBJECT_DIR)/$(TARGET)/%.o: %.s From 9caa8b6cbaa8c9eb72ed7f613eb3bcf905ad5c7d Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Mon, 5 Dec 2016 10:56:28 +1300 Subject: [PATCH 4/5] Disabled size optimisation for F4. --- Makefile | 22 ++++++++-------------- src/main/target/SPRACINGF3EVO/target.h | 4 ++-- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index b5b854f0a..35111f7b8 100644 --- a/Makefile +++ b/Makefile @@ -615,23 +615,11 @@ LOW_PRIO_SRC = \ cms/cms_menu_vtx.c \ flight/gtune.c \ flight/gps_conversion.c \ - io/dashboard.c \ - io/displayport_max7456.c \ - io/displayport_msp.c \ - io/displayport_oled.c \ io/gps.c \ io/ledstrip.c \ io/osd.c \ sensors/sonar.c \ sensors/barometer.c \ - telemetry/telemetry.c \ - telemetry/crsf.c \ - telemetry/frsky.c \ - telemetry/hott.c \ - telemetry/smartport.c \ - telemetry/ltm.c \ - telemetry/mavlink.c \ - telemetry/esc_telemetry.c \ ifeq ($(TARGET),$(filter $(TARGET),$(F4_TARGETS))) VCP_SRC = \ @@ -801,14 +789,20 @@ else ifeq ($(TARGET),$(filter $(TARGET),$(F1_TARGETS))) OPTIMISE = -Os OPTIMISE_LOW_PRIO = -Os -else +OPTIMISE_NON_RT = -Os +else ifeq ($(TARGET),$(filter $(TARGET),$(F3_TARGETS))) OPTIMISE = -Ofast OPTIMISE_LOW_PRIO = -O2 +OPTIMISE_NON_RT = -Os +else +OPTIMISE = -Ofast +OPTIMISE_LOW_PRIO = -Ofast +OPTIMISE_NON_RT = -Ofast endif OPTIMISATION_BASE = -flto -fuse-linker-plugin -ffast-math CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE) LOW_PRIO_CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE_LOW_PRIO) -NON_RT_CC_OPTIMISATION = $(OPTIMISATION_BASE) -Os +NON_RT_CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE_NON_RT) LTO_FLAGS = $(OPTIMISATION_BASE) $(OPTIMIZE) endif diff --git a/src/main/target/SPRACINGF3EVO/target.h b/src/main/target/SPRACINGF3EVO/target.h index ce7e3b368..88e7d09f4 100755 --- a/src/main/target/SPRACINGF3EVO/target.h +++ b/src/main/target/SPRACINGF3EVO/target.h @@ -49,8 +49,8 @@ #define BARO #define USE_BARO_BMP280 -//#define MAG -//#define USE_MAG_AK8963 +#define MAG +#define USE_MAG_AK8963 //#define USE_MAG_HMC5883 // External #define MAG_AK8963_ALIGN CW90_DEG_FLIP From 5b674c8e4f02260e45bed5ac6830e377f0d785fd Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Tue, 6 Dec 2016 08:04:02 +1300 Subject: [PATCH 5/5] Switched to 'SPEED_OPTIMISED_SRC', 'SIZE_OPTIMISED_SRC'. Also fixed spelling. --- Makefile | 154 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 110 insertions(+), 44 deletions(-) diff --git a/Makefile b/Makefile index 35111f7b8..d4b7c1186 100644 --- a/Makefile +++ b/Makefile @@ -595,7 +595,91 @@ HIGHEND_SRC = \ telemetry/mavlink.c \ telemetry/esc_telemetry.c \ -NON_RT_SRC = \ +SPEED_OPTIMISED_SRC = \ + common/encoding.c \ + common/filter.c \ + common/maths.c \ + common/typeconversion.c \ + drivers/adc.c \ + drivers/buf_writer.c \ + drivers/bus_i2c_soft.c \ + drivers/bus_spi.c \ + drivers/bus_spi_soft.c \ + drivers/exti.c \ + drivers/gyro_sync.c \ + drivers/io.c \ + drivers/light_led.c \ + drivers/resource.c \ + drivers/rx_nrf24l01.c \ + drivers/rx_spi.c \ + drivers/rx_xn297.c \ + drivers/pwm_output.c \ + drivers/pwm_rx.c \ + drivers/rcc.c \ + drivers/serial.c \ + drivers/serial_uart.c \ + drivers/sound_beeper.c \ + drivers/stack_check.c \ + drivers/system.c \ + drivers/timer.c \ + fc/fc_tasks.c \ + fc/mw.c \ + fc/rc_controls.c \ + fc/rc_curves.c \ + fc/runtime_config.c \ + flight/altitudehold.c \ + flight/failsafe.c \ + flight/imu.c \ + flight/mixer.c \ + flight/pid.c \ + flight/servos.c \ + io/beeper.c \ + io/serial.c \ + io/statusindicator.c \ + rx/ibus.c \ + rx/jetiexbus.c \ + rx/msp.c \ + rx/nrf24_cx10.c \ + rx/nrf24_inav.c \ + rx/nrf24_h8_3d.c \ + rx/nrf24_syma.c \ + rx/nrf24_v202.c \ + rx/pwm.c \ + rx/rx.c \ + rx/rx_spi.c \ + rx/crsf.c \ + rx/sbus.c \ + rx/spektrum.c \ + rx/sumd.c \ + rx/sumh.c \ + rx/xbus.c \ + scheduler/scheduler.c \ + sensors/acceleration.c \ + sensors/boardalignment.c \ + sensors/gyro.c \ + $(CMSIS_SRC) \ + $(DEVICE_STDPERIPH_SRC) \ + blackbox/blackbox.c \ + blackbox/blackbox_io.c \ + drivers/display_ug2864hsweg01.c \ + drivers/light_ws2811strip.c \ + drivers/serial_softserial.c \ + io/dashboard.c \ + io/displayport_max7456.c \ + io/displayport_msp.c \ + io/displayport_oled.c \ + io/ledstrip.c \ + io/osd.c \ + telemetry/telemetry.c \ + telemetry/crsf.c \ + telemetry/frsky.c \ + telemetry/hott.c \ + telemetry/smartport.c \ + telemetry/ltm.c \ + telemetry/mavlink.c \ + telemetry/esc_telemetry.c \ + +SIZE_OPTIMISED_SRC = \ drivers/serial_escserial.c \ io/serial_cli.c \ io/serial_4way.c \ @@ -603,24 +687,6 @@ NON_RT_SRC = \ io/serial_4way_stk500v2.c \ msp/msp_serial.c \ -LOW_PRIO_SRC = \ - msp/msp_serial.c \ - cms/cms.c \ - cms/cms_menu_blackbox.c \ - cms/cms_menu_builtin.c \ - cms/cms_menu_imu.c \ - cms/cms_menu_ledstrip.c \ - cms/cms_menu_misc.c \ - cms/cms_menu_osd.c \ - cms/cms_menu_vtx.c \ - flight/gtune.c \ - flight/gps_conversion.c \ - io/gps.c \ - io/ledstrip.c \ - io/osd.c \ - sensors/sonar.c \ - sensors/barometer.c \ - ifeq ($(TARGET),$(filter $(TARGET),$(F4_TARGETS))) VCP_SRC = \ vcpf4/stm32f4xx_it.c \ @@ -780,30 +846,30 @@ SIZE := $(ARM_SDK_PREFIX)size # ifeq ($(DEBUG),GDB) -OPTIMIZE = -O0 -CC_OPTIMISATION = $(OPTIMISE) -LOW_PRIO_CC_OPTIMISATION = $(OPTIMISE) -NON_RT_CC_OPTIMISATION = $(OPTIMISE) -LTO_FLAGS = $(OPTIMIZE) +OPTIMISE = -O0 +CC_SPEED_OPTIMISATION = $(OPTIMISE) +CC_OPTIMISATION = $(OPTIMISE) +CC_SIZE_OPTIMISATION = $(OPTIMISE) +LTO_FLAGS = $(OPTIMISE) else ifeq ($(TARGET),$(filter $(TARGET),$(F1_TARGETS))) -OPTIMISE = -Os -OPTIMISE_LOW_PRIO = -Os -OPTIMISE_NON_RT = -Os +OPTIMISE_SPEED = -Os +OPTIMISE = -Os +OPTIMISE_SIZE = -Os else ifeq ($(TARGET),$(filter $(TARGET),$(F3_TARGETS))) -OPTIMISE = -Ofast -OPTIMISE_LOW_PRIO = -O2 -OPTIMISE_NON_RT = -Os +OPTIMISE_SPEED = -Ofast +OPTIMISE = -O2 +OPTIMISE_SIZE = -Os else -OPTIMISE = -Ofast -OPTIMISE_LOW_PRIO = -Ofast -OPTIMISE_NON_RT = -Ofast +OPTIMISE_SPEED = -Ofast +OPTIMISE = -Ofast +OPTIMISE_SIZE = -Ofast endif -OPTIMISATION_BASE = -flto -fuse-linker-plugin -ffast-math -CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE) -LOW_PRIO_CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE_LOW_PRIO) -NON_RT_CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE_NON_RT) -LTO_FLAGS = $(OPTIMISATION_BASE) $(OPTIMIZE) +OPTIMISATION_BASE = -flto -fuse-linker-plugin -ffast-math +CC_SPEED_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE_SPEED) +CC_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE) +CC_SIZE_OPTIMISATION = $(OPTIMISATION_BASE) $(OPTIMISE_SIZE) +LTO_FLAGS = $(OPTIMISATION_BASE) $(OPTIMISE_SPEED) endif DEBUG_FLAGS = -ggdb3 -DDEBUG @@ -888,12 +954,12 @@ $(TARGET_ELF): $(TARGET_OBJS) # Compile $(OBJECT_DIR)/$(TARGET)/%.o: %.c $(V1) mkdir -p $(dir $@) - $(V1) $(if $(findstring $(subst ./src/main/,,$<), $(NON_RT_SRC)), \ - echo "%% (non-realtime) $(notdir $<)" "$(STDOUT)" && \ - $(CROSS_CC) -c -o $@ $(CFLAGS) $(NON_RT_CC_OPTIMISATION) $<, \ - $(if $(findstring $(subst ./src/main/,,$<), $(LOW_PRIO_SRC)), \ - echo "%% (low priority) $(notdir $<)" "$(STDOUT)" && \ - $(CROSS_CC) -c -o $@ $(CFLAGS) $(LOW_PRIO_CC_OPTIMISATION) $<, \ + $(V1) $(if $(findstring $(subst ./src/main/,,$<), $(SPEED_OPTIMISED_SRC)), \ + echo "%% (speed optimised) $(notdir $<)" "$(STDOUT)" && \ + $(CROSS_CC) -c -o $@ $(CFLAGS) $(CC_SPEED_OPTIMISATION) $<, \ + $(if $(findstring $(subst ./src/main/,,$<), $(SIZE_OPTIMISED_SRC)), \ + echo "%% (size optimised) $(notdir $<)" "$(STDOUT)" && \ + $(CROSS_CC) -c -o $@ $(CFLAGS) $(CC_SIZE_OPTIMISATION) $<, \ echo "%% $(notdir $<)" "$(STDOUT)" && \ $(CROSS_CC) -c -o $@ $(CFLAGS) $(CC_OPTIMISATION) $<))