From e98aa11f728605dcf2bd13d755114c3a4ed48118 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Wed, 11 Jan 2023 21:19:18 +0300 Subject: [PATCH] -flto --- F0:F030,F042,F072/3steppersLB/Makefile | 5 ++--- F0:F030,F042,F072/3steppersLB/steppers.bin | Bin 23644 -> 23476 bytes F0:F030,F042,F072/3steppersLB/version.inc | 4 ++-- F0:F030,F042,F072/inc/startup/vector.c | 4 ++-- F1:F103/MLX90640/MLX90640.bin | Bin 20516 -> 20504 bytes F1:F103/MLX90640/Makefile | 4 ++-- F1:F103/PL2303_ringbuffer/Makefile | 4 ++-- F1:F103/PL2303_ringbuffer/PL2303.bin | Bin 6904 -> 6864 bytes F1:F103/PL2303_ringbuffer/version.inc | 4 ++-- F1:F103/inc/startup/vector.c | 4 ++-- F3:F303/floatPrintf/Makefile | 4 ++-- F3:F303/floatPrintf/usart1.bin | Bin 2400 -> 2268 bytes F3:F303/inc/startup/vector.c | 4 ++-- F4:F401/blink/Makefile | 4 ++-- F4:F401/blink/blink.bin | Bin 968 -> 960 bytes F4:F401/inc/startup/vector.c | 2 +- G0:G070/blink/Makefile | 7 +++---- G0:G070/blink/blink.bin | Bin 880 -> 872 bytes G0:G070/i2c/Makefile | 4 ++-- G0:G070/i2c/i2c.c | 5 +++-- G0:G070/i2c/i2cscan.bin | Bin 6272 -> 5916 bytes G0:G070/i2c/proto.c | 8 ++++++++ G0:G070/i2c/strfunc.c | 2 ++ G0:G070/i2c/usart.c | 5 ++--- G0:G070/inc/startup/vector.c | 2 +- G0:G070/usart/Makefile | 7 +++---- G0:G070/usart/usart.bin | Bin 1724 -> 1592 bytes G0:G070/usart/usart.c | 16 ++++++++-------- TODO | 1 + 29 files changed, 54 insertions(+), 46 deletions(-) create mode 100644 TODO diff --git a/F0:F030,F042,F072/3steppersLB/Makefile b/F0:F030,F042,F072/3steppersLB/Makefile index 0427056..a43912c 100644 --- a/F0:F030,F042,F072/3steppersLB/Makefile +++ b/F0:F030,F042,F072/3steppersLB/Makefile @@ -61,13 +61,12 @@ CFLAGS += -O2 -g -MD -D__thumb2__=1 CFLAGS += -Wall -Werror -Wextra -Wshadow -Wimplicit-function-declaration CFLAGS += -Wredundant-decls $(INCLUDE) # -Wmissing-prototypes -Wstrict-prototypes -CFLAGS += -fno-common -ffunction-sections -fdata-sections +CFLAGS += -fno-common -ffunction-sections -fdata-sections -flto ############################################################################### # Linker flags LDFLAGS += --static -nostartfiles -nostdlib -LDFLAGS += -Wl,--gc-sections -Wl,--print-memory-usage -#--specs=nano.specs +LDFLAGS += -Wl,--gc-sections -Wl,--print-memory-usage --specs=nano.specs -flto LDFLAGS += -L$(LIB_DIR) LDFLAGS += -T$(LDSCRIPT) LDFLAGS += -Wl,-Map=$(OBJDIR)/$(BINARY).map diff --git a/F0:F030,F042,F072/3steppersLB/steppers.bin b/F0:F030,F042,F072/3steppersLB/steppers.bin index 9eb447ed533f1dc4921179faef343922a229bacd..97db3a95e3491af1aef6da5ec59c9eb35d153b0b 100755 GIT binary patch literal 23476 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

s>keVJ7zs3a^|6T?z7(~ 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 |= 0x00000200; +// SCB->CCR |= 0x00000200; // copy initialized variables data while ( dst < &_edata ) { *dst++ = *src++; } diff --git a/F1:F103/MLX90640/MLX90640.bin b/F1:F103/MLX90640/MLX90640.bin index 46051afbc775866ce41a28183d38a40e45b57f9b..5a57ff0fad92cdc131f35efd4e9ea093002bfc39 100755 GIT binary patch delta 2555 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 delta 1091 zcmbW0TSydP6vxlE<8G5z)V!@0qnoxhm0Ajh3EQxamo+T0yTKYhOw@xJkq^<@L-=6P z!WgLu5xr<4w2Xm5wqZR8mCpKP7g?!?RkmOe7iYcfcD}F&4MH0D&G~=lJLfy!oWrQa zTCoF80H;p_mLO}X8-Yy^jiFFCwRgzI_|5tMS|5x5o$L6k=(WWEKlD$*k+`j%QM=W^ zEyl^miH&5+-K3D*mfw?|q+XsU{xi92UahMQ0!v}9*6GZZOwxr+CAjP`O~E4wn8T5! zng}>8u1XOC-&dgv0!1O#1%Ykh!xHd5RYHIJDww~ibT2Oi<{1?N6Ee@_l6LtdV9w*$;g>VbK! zmT5JJz}Kqzw#-)GZEAuDdn;ATLd59RhMjzkR~u^cYJD%dH7EeS!jmISqv{b#znG}v z9vh$g8Rm&lFa!J#HDb(>a;32#wDbslZlhS|DilfCMXSNDi%rx>Ok=rTBMBi-&n1EV zoKkhj8ca_@_d|i;JA{YtvL;(ic9Wz8!NFjOXF<4bvO~VxGdia|C>3GPgpXbzM|z7p z$<{YM2-rhIzUB)0iQ^1{o#U`2@03q5E*+VcJL0peT`LA#mc3+DClZn2Ake=8Cf@G% zHADedkI;l>7b7NXgs*c!HnpS>_APrD>`RO*vJ~~YxdPlyy_}cOl6c<@?p{o5#9!nk z(yjC-4CqL)aw=(($*>xMJ&Q<46Ox7WBI9yd>Ogs1WxP$e9A70YLQ97rG#aL2t7#7y zq+1Aiw%eksWg%(`veA<%3oD-R(z&&;kB%4cn){ItN_JWYv->Dcv!E57>kpTKGe=Fp K0x(7u3%>w3?o!79 diff --git a/F1:F103/PL2303_ringbuffer/version.inc b/F1:F103/PL2303_ringbuffer/version.inc index e1411d0..6ca1649 100644 --- a/F1:F103/PL2303_ringbuffer/version.inc +++ b/F1:F103/PL2303_ringbuffer/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "71" -#define BUILD_DATE "2022-05-28" +#define BUILD_NUMBER "72" +#define BUILD_DATE "2023-01-11" diff --git a/F1:F103/inc/startup/vector.c b/F1:F103/inc/startup/vector.c index aa203cf..e4b2873 100644 --- a/F1:F103/inc/startup/vector.c +++ b/F1:F103/inc/startup/vector.c @@ -795,7 +795,7 @@ typedef struct { extern unsigned _stack; -vector_table_t vector_table __attribute__ ((section(".vector_table"))) = { +vector_table_t vector_table __attribute__ ((used, section(".vector_table"))) = { .initial_sp_value = &_stack, .reset = reset_handler, .nmi = nmi_handler, @@ -828,7 +828,7 @@ void WEAK __attribute__ ((naked)) __attribute__ ((noreturn)) reset_handler(void) char *src = &_ldata; // enable 8-byte stack alignment to comply with AAPCS - SCB->CCR |= 0x00000200; +// SCB->CCR |= 0x00000200; // copy initialized variables data while ( dst < &_edata ) { *dst++ = *src++; } diff --git a/F3:F303/floatPrintf/Makefile b/F3:F303/floatPrintf/Makefile index 48cc8b5..229fcec 100644 --- a/F3:F303/floatPrintf/Makefile +++ b/F3:F303/floatPrintf/Makefile @@ -60,7 +60,7 @@ LIB_DIR := $(INC_DIR)/ld 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 +CFLAGS += -fshort-enums -ffunction-sections -fdata-sections -flto #CFLAGS += -fno-common -ffunction-sections -fdata-sections -fno-stack-protector CFLAGS += $(ARCH_FLAGS) @@ -68,7 +68,7 @@ CFLAGS += $(ARCH_FLAGS) # Linker flags #LDFLAGS += -nostartfiles --static -nostdlib -specs=nosys.specs -specs=nano.specs LDFLAGS += $(ARCH_FLAGS) -LDFLAGS += -specs=nano.specs -specs=nosys.specs +LDFLAGS += -specs=nano.specs -flto LDFLAGS += -L$(LIB_DIR) #-L$(TOOLCHLIB) LDFLAGS += -T$(LDSCRIPT) diff --git a/F3:F303/floatPrintf/usart1.bin b/F3:F303/floatPrintf/usart1.bin index 4c3d0954bad461f12344a3124154da3bf49e5fc4..b0c261039e40be65507ac32ed239a2987b0ffa81 100755 GIT binary patch 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 literal 2400 zcmd5-Yj6|S6+U;bWXo$|%NB_(*`<0w2a7^&=(Id0)p`M0-gTk|Os0r1Su4}9c0*7M zDTz8M5;Q;{ZE&5J>Cn#9!Qebd+!3W|LORZj1vm*N1m%xSqVaZx7qbZ0>b-IT zlurA%-I;Ih-E+_V_RKloISU8C@uUe%PY^tI8{oEw`cP0aU3<~L-?^RRfARiB;s0k` z|1B4V!s^!L+6njS7XGqjGbGTm$s`tyPUNyl!Ip3XSQrir;AaG@j22lXVo8uPIF5_& z2sZg0|NJl2K)s64{IP<)HfgQ=W)sT=CA;iWf7R~Nq6_VGuSH#UDM;2SCMXTJxzti- zIAs6Xt|Q>IZ~+xUl@G?HgOZ_x-izk%@%g*d@*FNbYly!ppt=s;&|y4hN*UtQd;BRR zZ1U51V(10YF7Lx!raAVKKQ18IsaBwRbtXb2B9`N|OXV~saPoxRp8w8^h_XKOA6b8m zCWfMf^##ObYGNdI6*IibFyIW5`$3se&5X%YHfV_d;sytMBQhh2Y^{t`Gcwg^$w$O> zGFHvlG>=nptXmiq}0kO+3gz>N>%PEg;y26I0i#NAbodx?E}tT}LTY)#~%F2$Pf zZf=6_Tv1L$D2qRlQ8q+0(xIR#JNAN;=N^Ms^drJZ0`$7JV z%QVI4JEZKs4aD!vtZz;x&eB+LY?=Ro?9M4z0IC-4S4Jbxk3rj6f(pgrd0T0Slw@*0 z+Dh0S$o^((tFkk)>8lcUgYvt`_7#)FJLaoU_ANbp9ru1{s$GQAvEoB%5f|xbNpfYe z?{e}$x&#)unZ-}*PzxST?TOa9ft>bdpp;YJj-pynL)Xv`SO=)h*Nh8{8H3S~F&ID{ zj(#!*ktau~{>>-0=>wCHgE2@=<#I&*3|D$0nzN)J<+UM5k(spr?}xbWT`+h7A}eTr z(4Lt|*11JsYGdbapGj6AC?~d$1_lP&1aKNVtg>5;Zg#5(FDI}{)Y4s8de#_!P(*cc z-k8_Bk?5W7sou-v-GviF>-|9y$@dG>IxoAS^Fh*IH+62L-9vP4jQ=>V(VJ`?U$c?! zAv$jm|5e|{8~XNYhkJ~1?(5qH=MId}SmI09GJWd$#Am!`HFt9RT)pH{@@m=1lZR|1pkXEmI zgebLWX!KS^`V-*tUU{SExX+N;t>{K&+#_}KisrQdQ8oFb?sz``_l z^r+>j{5&R{Kk3CjtB$H_dcjH7d8iIN*<|kOu|&8bpzf=$?PKLTn=1SjqDu>x^O~ca zm4r5zwk^bKN=OJDY$X$yKiCpbb9LP1N9W9Uq0nC?tc{|OQY%+>(DfK;_O-1^&s>Y*y3`#gg)@1WL z%Ee%7 zKno*YgZ5y{U-aD;NF>Gs&nCtm;+koTPkoCII24kZ6ySb%0>?mX`J{EI{b7hc^AZorQ*dP$IK}5@23PGPM(;-hO?R=M99p)i951bS>)yq5cKqXy@Tc#t>U!_qg8hllKc2iR d_2mRFy!N7aVb;r=^*11)_nZ3n6V2SZ|0lXhEA{{Y diff --git a/F3:F303/inc/startup/vector.c b/F3:F303/inc/startup/vector.c index af8b2ce..6a908a8 100644 --- a/F3:F303/inc/startup/vector.c +++ b/F3:F303/inc/startup/vector.c @@ -798,7 +798,7 @@ typedef struct { extern unsigned _stack; -vector_table_t vector_table __attribute__ ((section(".vector_table"))) = { +vector_table_t vector_table __attribute__ ((used, section(".vector_table"))) = { .initial_sp_value = &_stack, .reset = reset_handler, .nmi = nmi_handler, @@ -831,7 +831,7 @@ void WEAK __attribute__ ((naked)) __attribute__ ((noreturn)) reset_handler(void) char *src = &_ldata; // enable 8-byte stack alignment to comply with AAPCS - SCB->CCR |= 0x00000200; +// SCB->CCR |= 0x00000200; /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) diff --git a/F4:F401/blink/Makefile b/F4:F401/blink/Makefile index 5ce9a75..1bdf5a1 100644 --- a/F4:F401/blink/Makefile +++ b/F4:F401/blink/Makefile @@ -70,7 +70,7 @@ LIB_DIR := $(INC_DIR)/ld CFLAGS += -g3 -gdwarf-2 CFLAGS += -O2 -D__thumb2__=1 -MD CFLAGS += -Wall -Werror -Wextra -Wshadow -CFLAGS += -fshort-enums -ffunction-sections -fdata-sections +CFLAGS += -fshort-enums -ffunction-sections -fdata-sections -flto #CFLAGS += -fno-common -ffunction-sections -fdata-sections -fno-stack-protector CFLAGS += $(ARCH_FLAGS) @@ -78,7 +78,7 @@ CFLAGS += $(ARCH_FLAGS) # Linker flags #LDFLAGS += -nostartfiles --static -nostdlib -specs=nosys.specs -specs=nano.specs LDFLAGS += $(ARCH_FLAGS) -LDFLAGS += -specs=nosys.specs -specs=nano.specs +LDFLAGS += -specs=nano.specs -flto LDFLAGS += -L$(LIB_DIR) #LDFLAGS += -L$(TOOLCHLIB) LDFLAGS += -T$(LDSCRIPT) diff --git a/F4:F401/blink/blink.bin b/F4:F401/blink/blink.bin index a47c25b77f8980e96e3e82bd0a6293a034b31067..4c539f317a0d8345afe2b51df2a18295287089f8 100755 GIT binary patch literal 960 zcmZQzU{W~B$iT4?h}WWF1~dRt1HvF-5WN*mJ-Yr;K4zFw5+?tiGwd&LXV}l=C7i)% zESvyh1EWHLV=J#GuQ#8U|Ca)WZl^;(IvCh4aeE2xx}Cd z6p^0n^!p;i2c91wyv5 zfywEMh|{cu$ONejC!o0q^PGX^^)mjt>fq(@iM3EL0jT2xGn3N?CZ<^lHr_Tqww{p* zW?mmu85GzRTYe}9%t(+-5YD#nwe+#{bp9a1ES&8Bp&>y)StCI?fg^)ELt1L{*I)I& zE^}lgXG*c$c4qq0pv3%vg<05nabh+^5Ch{wz=MJ9$5w{@KlX6!ndesEj?4xCR)Grc literal 968 zcmZQzU{Z)>X5fef;!rfqfCfNnKo}$pqSrEF>OnVSlux}dV)7EsU^Es^C~#-k4~znZ zC~v6@r4J27N?#g`oPby=A^$_Y6XOF$tDFmx86C{Ou1e+vc{zS)2$W0_&T#(H;4BPM z;S5w^9ep7%!;|ILRZnkk&siBtUuv9`K73$u`Xb^qD*1t~z=- zd}1vWOaSWmz|7?Ifr)8Wf~~i$r-hfn7F(algb%6=3hat4Ka>MzBuFL*XIuJO`dE27 ze-L37PWJ!MkRYI}k)WKwk-?oIEw%aUuliq?IWm$nrC4q|Gks}LV*bFwEbP2EF&iTC zfgy~`U4}-1&mAxSMCJ5vXdR;Yf&7&UIFyA2hi6%-l9bK zdLqa?#+EBTp990&g2{oQfWd*s!-0*#hRH$T0mFlOBPIrhw+s&$IDm2jKn#o%0S^YY ze?ax1IO5pK=gH^I@8$ocfT7#z(2ouVwo5!-LO&R}nSpqw)6a`s-dtXjomeh0C;~;K rCp-PV`2V}ee~^BVSzrt_{{$q@DX;*=er#pf|6>owo_THs?#OHag#GTG diff --git a/F4:F401/inc/startup/vector.c b/F4:F401/inc/startup/vector.c index 8c6710c..d5447ea 100644 --- a/F4:F401/inc/startup/vector.c +++ b/F4:F401/inc/startup/vector.c @@ -798,7 +798,7 @@ typedef struct { extern unsigned _stack; -vector_table_t vector_table __attribute__ ((section(".vector_table"))) = { +vector_table_t vector_table __attribute__ ((used, section(".vector_table"))) = { .initial_sp_value = &_stack, .reset = reset_handler, .nmi = nmi_handler, diff --git a/G0:G070/blink/Makefile b/G0:G070/blink/Makefile index f82d9ea..56673ee 100644 --- a/G0:G070/blink/Makefile +++ b/G0:G070/blink/Makefile @@ -54,12 +54,11 @@ CFLAGS += -O2 -MD -D__thumb2__=1 CFLAGS += -Wall -Werror -Wextra -Wshadow -Wimplicit-function-declaration CFLAGS += -Wredundant-decls $(INCLUDE) # -Wmissing-prototypes -Wstrict-prototypes -CFLAGS += -fno-common -ffunction-sections -fdata-sections +CFLAGS += -fno-common -ffunction-sections -fdata-sections -flto ############################################################################### # Linker flags -LDFLAGS += --static -nostartfiles -#--specs=nano.specs +LDFLAGS += --static -nostartfiles --specs=nano.specs -flto LDFLAGS += -L$(LIB_DIR) LDFLAGS += -T$(LDSCRIPT) LDFLAGS += -Wl,-Map=$(OBJDIR)/$(BINARY).map @@ -127,7 +126,7 @@ clean: @rmdir $(OBJDIR) 2>/dev/null || true size: $(ELF) - $(SIZE) $(ELF) + $(SIZE) -Ax $(ELF) flash: $(BIN) @echo " FLASH $(BIN)" diff --git a/G0:G070/blink/blink.bin b/G0:G070/blink/blink.bin index b058600a3f0e9cdca0cdf42c4423f9fc0cb86a14..48c48b0c1a941526e19f23c5143505e47b75291e 100755 GIT binary patch delta 394 zcmeys_JU1-VFH7~Nd^XvqdGbm=hc}1UWG9wO42qIKk;zWKFEV@( z`T^9d0Kyr}U=Jw(eWk$U6`a9n96a&(u}B4OXW;}UB}Z=uhFJ+rMp4Ob-fmt}35-g& z68;-SCAfIcbd%0#b`rR7K+(y|+1uGCI6*m!lTDgQnv2_6If+4eassolaDum+M1rk1 zqrz-ATW?dJS#IXOlb> z;KuFE -#include "strfunc.h" // mymemcpy +#include +#include "strfunc.h" // hexdump #include "usart.h" #include "i2c.h" @@ -166,7 +167,7 @@ uint8_t write_i2c(uint8_t addr, uint8_t *data, uint8_t nbytes){ uint8_t write_i2c_dma(uint8_t addr, uint8_t *data, uint8_t nbytes){ if(!data || nbytes < 1) return 0; - mymemcpy((char*)I2Cbuf, (char*)data, nbytes); + memcpy((char*)I2Cbuf, (char*)data, nbytes); if(isI2Cbusy()) return 0; i2cDMAsetup(1, nbytes); goterr = 0; diff --git a/G0:G070/i2c/i2cscan.bin b/G0:G070/i2c/i2cscan.bin index 7c289ce2007af30519eaf1ea88b92f662d8920a1..30e9a0318c851cee17b88c319a9797d92ec036c1 100755 GIT binary patch delta 4134 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 CO1L`! delta 4427 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 +#include #include "i2c.h" #include "strfunc.h" #include "usart.h" @@ -24,6 +25,7 @@ #define LOCBUFFSZ (32) // local buffer for I2C data to send static uint8_t locBuffer[LOCBUFFSZ]; +extern volatile uint32_t Tms; const char *helpstring = "i0..2 - setup I2C with lowest..highest speed (7.7, 10 and 100kHz)\n" @@ -36,6 +38,7 @@ const char *helpstring = "In n - just read n bytes\n" "IN n - the same but with DMA\n" "Is - scan I2C bus\n" + "T - print current Tms\n" "U - send long buffer over USART\n" ; @@ -167,6 +170,11 @@ char *parse_cmd(char *buf){ // "short" commands if(buf[1]) return buf; // echo wrong data switch(*buf){ + case 'T': + usart3_sendstr("T="); + usart3_sendstr(u2str(Tms)); + usart3_send("\n", 1); + break; case 'U': U3sendlong(longbuff); break; diff --git a/G0:G070/i2c/strfunc.c b/G0:G070/i2c/strfunc.c index 8f3b7ca..096f131 100644 --- a/G0:G070/i2c/strfunc.c +++ b/G0:G070/i2c/strfunc.c @@ -247,7 +247,9 @@ char *getnum(const char *txt, uint32_t *N){ return nxt; } +/* void mymemcpy(char *dest, const char *src, int len){ if(len < 1) return; while(len--) *dest++ = *src++; } +*/ diff --git a/G0:G070/i2c/usart.c b/G0:G070/i2c/usart.c index a420719..eb1a7ce 100644 --- a/G0:G070/i2c/usart.c +++ b/G0:G070/i2c/usart.c @@ -19,7 +19,6 @@ #include #include -#include "strfunc.h" // mymemcpy #include "usart.h" // RX/TX DMA->CCR without EN flag @@ -84,7 +83,7 @@ int usart3_send(const char *str, int len){ int rest = UARTBUFSZ - txlen[tbufno]; if(rest == 0 && !u3txrdy) return 0; // buffer is full while transmission in process if(len < rest) rest = len; - mymemcpy((char*)(tbuf[tbufno] + txlen[tbufno]), str, rest); + memcpy((char*)(tbuf[tbufno] + txlen[tbufno]), str, rest); txlen[tbufno] += rest; if(!u3txrdy) return rest; if(txlen[tbufno] == UARTBUFSZ) usart3_sendbuf(); @@ -92,7 +91,7 @@ int usart3_send(const char *str, int len){ len -= rest; // now fill another - empty - buffer if(len > UARTBUFSZ) len = UARTBUFSZ; - mymemcpy((char*)tbuf[tbufno], str + rest, len); + memcpy((char*)tbuf[tbufno], str + rest, len); txlen[tbufno] = len; return rest + len; } diff --git a/G0:G070/inc/startup/vector.c b/G0:G070/inc/startup/vector.c index 3ec0543..958c534 100644 --- a/G0:G070/inc/startup/vector.c +++ b/G0:G070/inc/startup/vector.c @@ -88,7 +88,7 @@ typedef struct { extern unsigned _stack; -vector_table_t vector_table __attribute__ ((section(".vector_table"))) = { +vector_table_t vector_table __attribute__ ((used, section(".vector_table"))) = { .initial_sp_value = &_stack, .reset = reset_handler, .nmi = nmi_handler, diff --git a/G0:G070/usart/Makefile b/G0:G070/usart/Makefile index 383edc8..d5c27e2 100644 --- a/G0:G070/usart/Makefile +++ b/G0:G070/usart/Makefile @@ -64,12 +64,11 @@ CFLAGS += -O2 -MD -D__thumb2__=1 CFLAGS += -Wall -Werror -Wextra -Wshadow -Wimplicit-function-declaration CFLAGS += -Wredundant-decls $(INCLUDE) # -Wmissing-prototypes -Wstrict-prototypes -CFLAGS += -fno-common -ffunction-sections -fdata-sections +CFLAGS += -fno-common -ffunction-sections -fdata-sections -flto ############################################################################### # Linker flags -LDFLAGS += --static -nostartfiles -#--specs=nano.specs +LDFLAGS += --static -nostartfiles --specs=nano.specs -flto LDFLAGS += -L$(LIB_DIR) LDFLAGS += -T$(LDSCRIPT) LDFLAGS += -Wl,-Map=$(OBJDIR)/$(BINARY).map @@ -146,7 +145,7 @@ clean: @rmdir $(OBJDIR) 2>/dev/null || true size: $(ELF) - $(SIZE) $(ELF) + $(SIZE) -Ax $(ELF) flash: $(BIN) @echo " FLASH $(BIN)" diff --git a/G0:G070/usart/usart.bin b/G0:G070/usart/usart.bin index a6b12499e71a9e93df7ed4a6234437413a58d8f1..1ee68dba93785ff92c07a63f025f8820389b47df 100755 GIT binary patch literal 1592 zcmaJ>Z)_Ar6o0dKg<}uwUC)rcJ;c3Tg3?2U9ucS}-R{D2yMsutMB9R7?vBD-VB@q=?VwFa{#{YsK66GhN&&H@fqq@^I`gN!tl)g4Eq0iZS8S>PqH1O zT(x~v<|d8)ZIebpsWe3N7)-Q9kB# zkTNX$Q%kT&tmZC)n?!cqVQdvjm0uD@E%@#dRUl~@GTOqO>ugJpM z1_xv@g_^{4$hvA5(Uee+XNW4-IQ^7UOb5=QXp7XDO4@mGrh3LxscCz$HH6xPrMsr> zgx1= zT@a%9g7B?|uD!al&H?4OJr{SO_-EQbCDB~)=&~EaU4*f$rYs9yYK$*2%i@O?h#|+F zkGY>~A*Usxz696Q=hoXi9zqucP+kZx@P0~pCyi=NXx>@`pIdg>7Dcfa55x^!|TwPF^`-?XD~3{QBigUOs_GfZ;o{Q^0tSJc94Y zGTwLapfyvCob*2AW_u|0K7y_8!O2-U9JD7TzaAo-oW@zRK(bbLyG7(4Sk%BZ@SHBE zK^`WaCZ2esUAfHbyxx_`SV(H7F_KUw$4O_d+#J+9GlksV*Eqe9dCS_H2->jPr;bOL zc#!T&LDJUqp5B(u%hS0jj@M^0CzUs>B3vfpN~ErxOe%%wC`sZlNt$D1I9eO2(N6NK zy)!X{J}@>)sV&oFhv}n&HnD$@ps1+@(rAdPGirD>0B0Ko1BBGo3^fXw7!h<=o2Hq1sXS$HYeQqTNTxC z=WkZH=tep_URhxIc{(rm_8iM5y?$>0Uuo~2#*2h7q}ZRb7rzFY10rLfa=Z@cUcv$yH_2X}cD)$9%N`Z(1` zWtmESf1$qAwu<)fIx6?-!1p^9P`=-T;?Q`v)UmRE8-R9raIo*7)IZRD=ur1Qp3e90 z?;eo)-t8XP-`jUY>dRyf4|MO7RH-+0Xi$2a!cqsidEiayK;K}qL}LKY10bsZ1(-I} Ap8x;= literal 1724 zcmaJ>T}%{L6h3!$(cM{)T~=^+R_p8xBDiYNwOT2y!;FsXT%-sZSG4Jc6&=JDg4pur z8lQwd80drSwuZEQF!7}i-Oz`U;6oqUCe19=M5VQB(uBsQ$(l5}_`~#GlxiB|Bxlb3 zIp;gyJ?GpD7eV~K2wc~wOj3bYe9UHPn~kr*b06mWGGX>?{k@m$FYUd|?^SDeoX>f1 zhTlX{Kk3^$r8@z{eCD=(NN?8n=n0&N31%+CD*{PML36};{%fD=vfhtzIkXdM9M+T` zFuiIao0Q_Xl?$4@_RNx_cG-jfx3iLRvvH&-+vCw@5=p5Uj{vhj+&v8pH}-;kyqn>w zST}Ah#%^`~hwWt8@4R5U$ib>N-o`$2O7v)c!pYl=y4WbG!*4ZVBAmvezmk+%VMz09S34j-QDC?;*IDG5xs}wXZvMucpX%-Nh_3xGH>HD@Q*7H_ zSg>t?K2RK9$5s$Ig>wLSbCBD$mUhG6kfW7td2BziuPg%>tLHaVC#m#N;W1PrOE5VC zl0aNIXhMz4638+fFf}#aP=u3cD$utV#K&_Y0`VgC|Ab006<4?tS2niy@LGE!)w6sj zucZ=U!)Lmb@vz&0G+XqM{U^_9`#Y1;&7NtF*KQ?-Wx+_p3>lY0MQvnCPK8HF1zyz{ zB&%X$WGGyLgQS9vl<;9v9&?))kUOwLyh;2q7Zvm-`}+tA$5dbEFlC&Sym+LD>1ohj@-`Gh3p9eV8aRbtmNGlFwgEgnIa^wxm78)Vq%wEjG59YE19)rVQEck1roSj!RGcNLaWv&NcG%WiECDVyOp zrK*kILXgj)hTWTjcaQ!^eJ(HhB;mD|uYw}fe|M4c_(H#`7bdsCPjmKzv-X7g`|Q2B zCI0LzjK4QSJ0_nh&?ABUAZ2^$IalG@%xrhsQE`1pE;lNgDq>z!CLR;2%Pa`{h~Ge4 z*guVC0xOIeqR4Fo)As~PZrrL0owbu_U9nM4y3AdbZsSuZ`b z`Y4L5UaVFk4bE!FdT(6v;gBh)oQ1-rhL4O(Wyr6VStVF7OK7&zfnCwiARlpCNaC?T zczj{2K#aO}f~iIlq72$upHOU|cnqImFU4D+@!7lQ!Nsv*b=kDX@D8G_fj$%+Q|Gg8 z>^4SK=QM>{<-F1uy^~~|(UHxM3M_v8LPxXE*_9hZ%`n!&aig>Ey^nmyQHS0Lh U#RDG`PxKDdiIh9=JOHBlUv>cHhX4Qo diff --git a/G0:G070/usart/usart.c b/G0:G070/usart/usart.c index bd22c4b..22fc1b2 100644 --- a/G0:G070/usart/usart.c +++ b/G0:G070/usart/usart.c @@ -25,18 +25,18 @@ #define DMARXCCR (DMA_CCR_MINC | DMA_CCR_TCIE | DMA_CCR_TEIE) #define DMATXCCR (DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE | DMA_CCR_TEIE) -static int txrdy = 1, rxrdy = 0; // transmission done, next line received -static int bufovr = 0, wasbufovr = 0; // Rx buffer overflow or error flag -> delete next line -static int rbufno = 0, tbufno = 0; // current buf number -static char rbuf[2][UARTBUFSZ], tbuf[2][UARTBUFSZ]; // receive & transmit buffers -static int rxlen[2] = {0}, txlen[2] = {0}; +static volatile int txrdy = 1, rxrdy = 0; // transmission done, next line received +static volatile int bufovr = 0, wasbufovr = 0; // Rx buffer overflow or error flag -> delete next line +static volatile int rbufno = 0, tbufno = 0; // current buf number +static volatile char rbuf[2][UARTBUFSZ], tbuf[2][UARTBUFSZ]; // receive & transmit buffers +static volatile int rxlen[2] = {0}, txlen[2] = {0}; char *usart3_getline(int *wasbo){ if(wasbo) *wasbo = wasbufovr; wasbufovr = 0; if(!rxrdy) return NULL; rxrdy = 0; // clear ready flag - return rbuf[!rbufno]; // current buffer is in filling stage, return old - filled - buffer + return (char*)rbuf[!rbufno]; // current buffer is in filling stage, return old - filled - buffer } #define USART_BRR(speed) ((64000000 + speed/2) / speed) @@ -87,7 +87,7 @@ int usart3_send(const char *str, int len){ int rest = UARTBUFSZ - txlen[tbufno]; if(rest == 0 && !txrdy) return 0; // buffer is full while transmission in process if(len < rest) rest = len; - mymemcpy(tbuf[tbufno] + txlen[tbufno], str, rest); + mymemcpy((char*)(tbuf[tbufno] + txlen[tbufno]), str, rest); txlen[tbufno] += rest; if(!txrdy) return rest; if(txlen[tbufno] == UARTBUFSZ) usart3_sendbuf(); @@ -95,7 +95,7 @@ int usart3_send(const char *str, int len){ len -= rest; // now fill another - empty - buffer if(len > UARTBUFSZ) len = UARTBUFSZ; - mymemcpy(tbuf[tbufno], str + rest, len); + mymemcpy((char*)tbuf[tbufno], str + rest, len); txlen[tbufno] = len; return rest + len; } diff --git a/TODO b/TODO new file mode 100644 index 0000000..045ca1f --- /dev/null +++ b/TODO @@ -0,0 +1 @@ +add -flto \ No newline at end of file