From 5230ad14e3bf2afd7cf8ae55d1f171de014d96f7 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Tue, 17 Jan 2023 21:50:52 +0300 Subject: [PATCH] fixed float printf for F303 --- F3:F303/floatPrintf/Makefile | 54 +++++--- F3:F303/floatPrintf/float.bin | Bin 0 -> 10984 bytes F3:F303/floatPrintf/main.c | 37 ++++-- F3:F303/floatPrintf/openocd.cfg | 119 ++++++++++++++++++ F3:F303/floatPrintf/usart1.bin | Bin 2268 -> 0 bytes F3:F303/floatPrintf/usart1.cflags | 1 + F3:F303/floatPrintf/usart1.config | 7 ++ F3:F303/floatPrintf/usart1.creator | 1 + F3:F303/floatPrintf/usart1.creator.user | 157 ++++++++++++++++++++++++ F3:F303/floatPrintf/usart1.cxxflags | 1 + F3:F303/floatPrintf/usart1.files | 5 + F3:F303/floatPrintf/usart1.includes | 6 + 12 files changed, 364 insertions(+), 24 deletions(-) create mode 100755 F3:F303/floatPrintf/float.bin create mode 100644 F3:F303/floatPrintf/openocd.cfg delete mode 100755 F3:F303/floatPrintf/usart1.bin create mode 100644 F3:F303/floatPrintf/usart1.cflags create mode 100644 F3:F303/floatPrintf/usart1.config create mode 100644 F3:F303/floatPrintf/usart1.creator create mode 100644 F3:F303/floatPrintf/usart1.creator.user create mode 100644 F3:F303/floatPrintf/usart1.cxxflags create mode 100644 F3:F303/floatPrintf/usart1.files create mode 100644 F3:F303/floatPrintf/usart1.includes diff --git a/F3:F303/floatPrintf/Makefile b/F3:F303/floatPrintf/Makefile index 229fcec..0e78c99 100644 --- a/F3:F303/floatPrintf/Makefile +++ b/F3:F303/floatPrintf/Makefile @@ -1,4 +1,4 @@ -BINARY = usart1 +BINARY = float BOOTPORT ?= /dev/ttyUSB0 BOOTSPEED ?= 115200 # MCU FAMILY @@ -9,12 +9,10 @@ MCU ?= F303xb ARMARCH = __ARM_ARCH_7M__ # change this linking script depending on particular MCU model, LDSCRIPT ?= stm32f303xB.ld -# debug -#DEFS = -DEBUG INDEPENDENT_HEADERS= -FP_FLAGS ?= -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -fsingle-precision-constant -mlittle-endian -DARM_MATH_CM4 +FP_FLAGS ?= -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -mlittle-endian -DARM_MATH_CM4 ASM_FLAGS ?= -mthumb -mcpu=cortex-m4 ARCH_FLAGS = $(ASM_FLAGS) $(FP_FLAGS) -D $(ARMARCH) @@ -42,6 +40,8 @@ DFUUTIL := $(shell which dfu-util) ############################################################################### # Source files OBJDIR := mk +# target (debug/release) +TARGFILE := $(OBJDIR)/TARGET SRC := $(wildcard *.c) OBJS := $(addprefix $(OBJDIR)/, $(SRC:%.c=%.o)) STARTUP := $(OBJDIR)/startup.o @@ -59,16 +59,15 @@ LIB_DIR := $(INC_DIR)/ld # C flags CFLAGS += -g -gdwarf-2 # debuggin symbols in listing CFLAGS += -O2 -D__thumb2__=1 -MD -CFLAGS += -Wall -Werror -Wextra -Wshadow -CFLAGS += -fshort-enums -ffunction-sections -fdata-sections -flto -#CFLAGS += -fno-common -ffunction-sections -fdata-sections -fno-stack-protector +CFLAGS += -Wall -Wextra -Wshadow +CFLAGS += -fshort-enums -ffunction-sections -fdata-sections +#CFLAGS += -fno-common -fno-stack-protector CFLAGS += $(ARCH_FLAGS) ############################################################################### # Linker flags -#LDFLAGS += -nostartfiles --static -nostdlib -specs=nosys.specs -specs=nano.specs +LDFLAGS += -nostartfiles --static -specs=nosys.specs -specs=nano.specs LDFLAGS += $(ARCH_FLAGS) -LDFLAGS += -specs=nano.specs -flto LDFLAGS += -L$(LIB_DIR) #-L$(TOOLCHLIB) LDFLAGS += -T$(LDSCRIPT) @@ -76,7 +75,7 @@ LDFLAGS += -Wl,-Map=$(MAP),--cref -Wl,--gc-sections -Wl,--print-memory-usage ############################################################################### # Used libraries -#LDLIBS += -lc $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) +LDLIBS += -lm -lc $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) DEFS += -DSTM32$(FAMILY) -DSTM32$(MCU) @@ -85,7 +84,29 @@ LIST := $(OBJDIR)/$(BINARY).list BIN := $(BINARY).bin HEX := $(BINARY).hex -all: bin list size +ifeq ($(shell test -e $(TARGFILE) && echo -n yes),yes) + TARGET := $(file < $(TARGFILE)) +else + TARGET := RELEASE +endif + +ifeq ($(TARGET), DEBUG) + .DEFAULT_GOAL := debug +endif + +# release: add LTO +release: CFLAGS += -flto +release: LDFLAGS += -flto +release: $(TARGFILE) bin list size + +#debug: add debug flags +debug: CFLAGS += -DEBUG -Werror -g3 +debug: TARGET := DEBUG +debug: $(TARGFILE) bin list size + +$(TARGFILE): $(OBJDIR) + @echo -e "\t\tTARGET: $(TARGET)" + @echo "$(TARGET)" > $(TARGFILE) elf: $(ELF) bin: $(BIN) @@ -127,8 +148,7 @@ size: $(ELF) clean: @echo " CLEAN" - $(RM) $(OBJS) $(DEPS) $(ELF) $(HEX) $(LIST) $(MAP) - @rmdir $(OBJDIR) 2>/dev/null || true + @rm -rf $(OBJDIR) 2>/dev/null || true flash: $(BIN) @@ -143,4 +163,10 @@ dfuboot: $(BIN) @echo " LOAD $(BIN) THROUGH DFU" $(DFUUTIL) -a0 -D $(BIN) -s 0x08000000 -.PHONY: clean flash boot +openocd: + openocd -f openocd.cfg + +dbg: + arm-none-eabi-gdb $(ELF) -ex 'target remote localhost:3333' -ex 'monitor reset halt' + +.PHONY: size clean flash boot dfuboot openocd dbg diff --git a/F3:F303/floatPrintf/float.bin b/F3:F303/floatPrintf/float.bin new file mode 100755 index 0000000000000000000000000000000000000000..bb8f6ccd0d30667fbceb4832a98120dfa8d138c3 GIT binary patch literal 10984 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. */ +#include +#include +#include -#include "stm32f3.h" #include "hardware.h" #include "usart.h" @@ -27,12 +29,17 @@ void sys_tick_handler(void){ } // be careful: if pow10 would be bigger you should change str[] size! -static const float pwr10[] = {1., 10., 100., 1000., 10000.}; -static const float rounds[] = {0.5, 0.05, 0.005, 0.0005, 0.00005}; +static const float pwr10[] = {1.f, 10.f, 100.f, 1000.f, 10000.f}; +static const float rounds[] = {0.5f, 0.05f, 0.005f, 0.0005f, 0.00005f}; #define P10L (sizeof(pwr10)/sizeof(uint32_t) - 1) static char * float2str(float x, uint8_t prec){ - if(prec > P10L) prec = P10L; static char str[16] = {0}; // -117.5494E-36\0 - 14 symbols max! + if(prec > P10L) prec = P10L; + if(isnan(x)){ memcpy(str, "NAN", 4); return str;} + else{ + int i = isinf(x); + if(i){memcpy(str, "-INF", 5); if(i == 1) return str+1; else return str;} + } char *s = str + 14; // go to end of buffer uint8_t minus = 0; if(x < 0){ @@ -89,8 +96,9 @@ static char * float2str(float x, uint8_t prec){ return s+1; } -static const float tests[] = {-1.23456789e-37, -3.14159265e-2, -1234.56789, -1.2345678, 0., 1e-40, 0.1234567, 123.456789, 2.473829e31}; -#define TESTN 9 +static const float tests[] = {-1.23456789e-37f, -3.14159265e-2f, -1234.56789f, -1.2345678f, 0.f, 1e-40f, 0.1234567f, 123.456789f, 2.473829e31f, +NAN, INFINITY, -INFINITY}; +#define TESTN 12 int main(void){ sysreset(); @@ -100,15 +108,14 @@ int main(void){ usart_setup(); usart_send("Start\n"); uint32_t ctr = Tms; - float x = 0.519, more = 5.123; + float more = 5.123f, ang = 0.f; while(1){ if(Tms - ctr > 499){ ctr = Tms; pin_toggle(GPIOB, 1 << 1 | 1 << 0); // toggle LED @ PB0 /**/ - if((x += 0.519) > more){ - more += 5.123; - } + more += 0.1234567f; + ang += 0.5f; } if(bufovr){ bufovr = 0; @@ -121,6 +128,16 @@ int main(void){ usart_send(float2str(tests[i], j)); usart_putchar('\n'); } + usart_send("\nValue of 'more': "); + usart_send(float2str(more, 4)); + usart_send(", sqrt of 'more': "); + usart_send(float2str(sqrtf(more), 4)); + usart_send("\nValue of 'ang': "); + usart_send(float2str(ang, 4)); + usart_send(", tan of 'ang' degr: "); + usart_send(float2str(tan(ang/180.f*M_PI), 4)); + usart_send("\ninf and nan: "); usart_send(float2str(ang/0.f, 4)); usart_putchar(' '); usart_send(float2str(sqrtf(-ang), 4)); + usart_putchar('\n'); }else{ usart_send("Get by USART1: "); usart_send(txt); diff --git a/F3:F303/floatPrintf/openocd.cfg b/F3:F303/floatPrintf/openocd.cfg new file mode 100644 index 0000000..56ccc2e --- /dev/null +++ b/F3:F303/floatPrintf/openocd.cfg @@ -0,0 +1,119 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +# script for stm32f3x family + +# +# stm32 devices support both JTAG and SWD transports. +# +source [find interface/stlink-v2-1.cfg] +source [find target/swj-dp.tcl] +source [find mem_helper.tcl] + +if { [info exists CHIPNAME] } { + set _CHIPNAME $CHIPNAME +} else { + set _CHIPNAME stm32f3x +} + +set _ENDIAN little + +# Work-area is a space in RAM used for flash programming +# By default use 16kB +if { [info exists WORKAREASIZE] } { + set _WORKAREASIZE $WORKAREASIZE +} else { + set _WORKAREASIZE 0x4000 +} + +# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz +# +# Since we may be running of an RC oscilator, we crank down the speed a +# bit more to be on the safe side. Perhaps superstition, but if are +# running off a crystal, we can run closer to the limit. Note +# that there can be a pretty wide band where things are more or less stable. +adapter speed 1000 + +adapter srst delay 100 +if {[using_jtag]} { + jtag_ntrst_delay 100 +} + +#jtag scan chain +if { [info exists CPUTAPID] } { + set _CPUTAPID $CPUTAPID +} else { + if { [using_jtag] } { + # See STM Document RM0316 + # Section 29.6.3 - corresponds to Cortex-M4 r0p1 + set _CPUTAPID 0x4ba00477 + } { + set _CPUTAPID 0x2ba01477 + } +} + +swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID +dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu + +if {[using_jtag]} { + jtag newtap $_CHIPNAME bs -irlen 5 +} + +set _TARGETNAME $_CHIPNAME.cpu +target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap + +$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0 + +set _FLASHNAME $_CHIPNAME.flash +flash bank $_FLASHNAME stm32f1x 0 0 0 0 $_TARGETNAME + +reset_config srst_nogate + +if {![using_hla]} { + # if srst is not fitted use SYSRESETREQ to + # perform a soft reset + cortex_m reset_config sysresetreq +} + +proc stm32f3x_default_reset_start {} { + # Reset clock is HSI (8 MHz) + adapter speed 1000 +} + +proc stm32f3x_default_examine_end {} { + # Enable debug during low power modes (uses more power) + mmw 0xe0042004 0x00000007 0 ;# DBGMCU_CR |= DBG_STANDBY | DBG_STOP | DBG_SLEEP + + # Stop watchdog counters during halt + mmw 0xe0042008 0x00001800 0 ;# DBGMCU_APB1_FZ |= DBG_IWDG_STOP | DBG_WWDG_STOP +} + +proc stm32f3x_default_reset_init {} { + # Configure PLL to boost clock to HSI x 8 (64 MHz) + mww 0x40021004 0x00380400 ;# RCC_CFGR = PLLMUL[3:1] | PPRE1[2] + mmw 0x40021000 0x01000000 0 ;# RCC_CR |= PLLON + mww 0x40022000 0x00000012 ;# FLASH_ACR = PRFTBE | LATENCY[1] + sleep 10 ;# Wait for PLL to lock + mmw 0x40021004 0x00000002 0 ;# RCC_CFGR |= SW[1] + + # Boost JTAG frequency + adapter speed 8000 +} + +# Default hooks +$_TARGETNAME configure -event examine-end { stm32f3x_default_examine_end } +$_TARGETNAME configure -event reset-start { stm32f3x_default_reset_start } +$_TARGETNAME configure -event reset-init { stm32f3x_default_reset_init } + +tpiu create $_CHIPNAME.tpiu -dap $_CHIPNAME.dap -ap-num 0 -baseaddr 0xE0040000 + +lappend _telnet_autocomplete_skip _proc_pre_enable_$_CHIPNAME.tpiu +proc _proc_pre_enable_$_CHIPNAME.tpiu {_targetname} { + targets $_targetname + + # Set TRACE_IOEN; TRACE_MODE is set to async; when using sync + # change this value accordingly to configure trace pins + # assignment + mmw 0xe0042004 0x00000020 0 +} + +$_CHIPNAME.tpiu configure -event pre-enable "_proc_pre_enable_$_CHIPNAME.tpiu $_TARGETNAME" diff --git a/F3:F303/floatPrintf/usart1.bin b/F3:F303/floatPrintf/usart1.bin deleted file mode 100755 index b0c261039e40be65507ac32ed239a2987b0ffa81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2268 zcmd5-e{2&~9RI$1Te)@9b#(k_N0xTSR0h-H#7qcTciXz|ZlS_7VMXI@pxma(DxgRu zq5M)5{4u7{I)cg+2u=ob3PwzEQ&BQvyHUjnu4trc)AI^tJJ_JUD=?76_^(aAec$(e z@AG+|@4N5!4&DLN!xYdjA)sHl$>64+x<@rNtd3O#cQfYyFh6!v9{&eT|E1w_7<{fu z@F824g64d%-_`YX*%kxw7g07Sybu^?&o2L>Ax$$HZ0+2^;*FGlyn;&3hh2wUl`0O3 zk#!2!-_WWVAI#ymZZU|CX00ADBrbr-dB}fSjQ~6hbPuYA5Mr-I;oc-^y>}4B|HXw(3$Dp~62rc7sqWYOPMe zDCWrPBLDmoWek3o}5Vy)Egh)xDU)at3!tR$&0p1f`<=w!cnawQKocbdjqP$mpd;)w1aT6X2uHud2Yj|F8wS6^*M6)~zmCD%& zCDpL;-^Z(pz|0bEWAc=(Nabw$SI(EwP;d$1d;?7l65TSUSec^0>?CNXNXZ!#U6AFc zypN1AXvb8g5>>S#k~0uJEgo3FFA}kwf$8aw`oZkraI;=yWY2O&M!1ZaUQi?6ahb=l zm*>$;FN>2oVv?ikt2t(gTgD9qE9@ma63e+O*=3Do=O=f1Jv*%47|9NMi<8=}vo&93 zBR58}o5BAxFMLB@*gI_us|~42RO~VSS=O^pnhTi;_1U(7pcjlGQsX+xnsIoI(mM(XwI(ko5~K<#Yvy53LKlKi zi2(tmfL-lDm>LIEO!C54dN7;v)+_mXr;r%d zT;9X?tG&}AOG{?&lPb8K9P+B&w8;3;`HO2N_P13fd#h!Zl;Y$Y;?h@~G3BQ+DsH_S z%NWNb-Nmv$DQx$xklMJ-b#D;1E(=Vz%JkaT#{3aab5($JI23&6|3cYq2`KHv_E};2 z5kK=x3E6$Y^CCYO-R$1%7*t>fvtHG!%T7Bl9d@gy*nKf+sXH#6aaa2sGD;^M zl&;3D=RWfQb41$d#zpF?8XG=&4P`yI)^k7tf;*C2Srt@g5YpS062w66wfN9+D6q=U zd!DfW)(JBn@*k4I?h{dPdZW-dNzxS@lq%h5?n=TE?OZ9n?{4}tHDjstoO?t0DA}p8 zO_E-ny=w%Y{+6~BkvHD0ZIO9cqoDh`D$;Fd1J;~78LD`T0+wGswJ<>9pT!{awg9pq ze`2`&(tt9>V$_TT(LGuwbp{MsDM|VfqiI$@7 z$a5Onh9fqt>LGgyq`-vzD#xbWiloL>;nM>>F^p0EVEFbbX!Wusad~fl6uDE1prtT; z?T*(BFX_1Pj_p2RO3w2g3&VO2m~K)J-Q=0~ozZaa>(~Z%jh?LekNJVry=wndGBujtIc}Xsgx1`cX{%COlo~0i8pHRSa+^;F9z_Cb4;ZG->}K^tW#_?E9#c5&;ryy^;px>%d}AW=n7N)D$|2Cr3)UI VIokxv$KX>A(TBF%T$MNae*?uUEeHSr diff --git a/F3:F303/floatPrintf/usart1.cflags b/F3:F303/floatPrintf/usart1.cflags new file mode 100644 index 0000000..68d5165 --- /dev/null +++ b/F3:F303/floatPrintf/usart1.cflags @@ -0,0 +1 @@ +-std=c17 \ No newline at end of file diff --git a/F3:F303/floatPrintf/usart1.config b/F3:F303/floatPrintf/usart1.config new file mode 100644 index 0000000..1cf1964 --- /dev/null +++ b/F3:F303/floatPrintf/usart1.config @@ -0,0 +1,7 @@ +// Add predefined macros for your project here. For example: +// #define THE_ANSWER 42 +#define EBUG +#define STM32F3 +#define STM32F303xb +#define __thumb2__ 1 +#define __ARM_ARCH_7M__ diff --git a/F3:F303/floatPrintf/usart1.creator b/F3:F303/floatPrintf/usart1.creator new file mode 100644 index 0000000..e94cbbd --- /dev/null +++ b/F3:F303/floatPrintf/usart1.creator @@ -0,0 +1 @@ +[General] diff --git a/F3:F303/floatPrintf/usart1.creator.user b/F3:F303/floatPrintf/usart1.creator.user new file mode 100644 index 0000000..aaa3d36 --- /dev/null +++ b/F3:F303/floatPrintf/usart1.creator.user @@ -0,0 +1,157 @@ + + + + + + EnvironmentId + {7bd84e39-ca37-46d3-be9d-99ebea85bc0d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + KOI8-R + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + false + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {65a14f9e-e008-4c1b-89df-4eaa4774b6e3} + 0 + 0 + 0 + + /Big/Data/00__Electronics/STM32/F303-nolib/blink + + + + all + + false + + + false + true + GenericProjectManager.GenericMakeStep + + 1 + Сборка + Сборка + ProjectExplorer.BuildSteps.Build + + + + + clean + + true + + + false + true + GenericProjectManager.GenericMakeStep + + 1 + Очистка + Очистка + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Default + GenericProjectManager.GenericBuildConfiguration + + 1 + + + 0 + Развёртывание + Развёртывание + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + 2 + + + ProjectExplorer.CustomExecutableRunConfiguration + + + false + + false + true + false + false + true + + + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/F3:F303/floatPrintf/usart1.cxxflags b/F3:F303/floatPrintf/usart1.cxxflags new file mode 100644 index 0000000..6435dfc --- /dev/null +++ b/F3:F303/floatPrintf/usart1.cxxflags @@ -0,0 +1 @@ +-std=c++17 \ No newline at end of file diff --git a/F3:F303/floatPrintf/usart1.files b/F3:F303/floatPrintf/usart1.files new file mode 100644 index 0000000..b605c2b --- /dev/null +++ b/F3:F303/floatPrintf/usart1.files @@ -0,0 +1,5 @@ +hardware.c +hardware.h +main.c +usart.c +usart.h diff --git a/F3:F303/floatPrintf/usart1.includes b/F3:F303/floatPrintf/usart1.includes new file mode 100644 index 0000000..06d1130 --- /dev/null +++ b/F3:F303/floatPrintf/usart1.includes @@ -0,0 +1,6 @@ +. +../inc +../inc/Fx +../inc/cm +../inc/ld +../inc/startup