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 9eb447e..97db3a9 100755 Binary files a/F0:F030,F042,F072/3steppersLB/steppers.bin and b/F0:F030,F042,F072/3steppersLB/steppers.bin differ diff --git a/F0:F030,F042,F072/3steppersLB/version.inc b/F0:F030,F042,F072/3steppersLB/version.inc index a2f289a..338ce6f 100644 --- a/F0:F030,F042,F072/3steppersLB/version.inc +++ b/F0:F030,F042,F072/3steppersLB/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "168" -#define BUILD_DATE "2022-06-17" +#define BUILD_NUMBER "169" +#define BUILD_DATE "2023-01-11" diff --git a/F0:F030,F042,F072/inc/startup/vector.c b/F0:F030,F042,F072/inc/startup/vector.c index aa203cf..e4b2873 100644 --- a/F0:F030,F042,F072/inc/startup/vector.c +++ b/F0:F030,F042,F072/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/F1:F103/MLX90640/MLX90640.bin b/F1:F103/MLX90640/MLX90640.bin index 46051af..5a57ff0 100755 Binary files a/F1:F103/MLX90640/MLX90640.bin and b/F1:F103/MLX90640/MLX90640.bin differ diff --git a/F1:F103/MLX90640/Makefile b/F1:F103/MLX90640/Makefile index 07e1d20..4bcf704 100644 --- a/F1:F103/MLX90640/Makefile +++ b/F1:F103/MLX90640/Makefile @@ -63,12 +63,12 @@ LIB_DIR := $(INC_DIR)/ld # C flags CFLAGS += -O2 -g -D__thumb2__=1 -MD CFLAGS += -Wall -Werror -Wextra -Wshadow -CFLAGS += -fno-common -ffunction-sections -fdata-sections -fno-stack-protector +CFLAGS += -fno-common -ffunction-sections -fdata-sections -fno-stack-protector CFLAGS += $(ARCH_FLAGS) ############################################################################### # Linker flags -LDFLAGS += -nostartfiles --static -nostdlibs --gc-sections --print-memory-usage +LDFLAGS += -nostartfiles --static -nostdlibs --gc-sections --print-memory-usage LDFLAGS += -L$(LIB_DIR) -L$(TOOLCHLIB) LDFLAGS += -T$(LDSCRIPT) diff --git a/F1:F103/PL2303_ringbuffer/Makefile b/F1:F103/PL2303_ringbuffer/Makefile index 7f09583..1d3be00 100644 --- a/F1:F103/PL2303_ringbuffer/Makefile +++ b/F1:F103/PL2303_ringbuffer/Makefile @@ -63,12 +63,12 @@ LIB_DIR := $(INC_DIR)/ld # C flags CFLAGS += -O2 -g -D__thumb2__=1 -MD -g -gdwarf-2 CFLAGS += -Wall -Werror -Wextra -Wshadow -CFLAGS += -fno-common -ffunction-sections -fdata-sections -fno-stack-protector -fshort-enums +CFLAGS += -fno-common -ffunction-sections -fdata-sections -fno-stack-protector -fshort-enums CFLAGS += $(ARCH_FLAGS) ############################################################################### # Linker flags -LDFLAGS += -nostartfiles --static -nostdlibs --gc-sections --print-memory-usage +LDFLAGS += -nostartfiles --static --gc-sections --print-memory-usage -specs=nano.specs LDFLAGS += -L$(LIB_DIR) -L$(TOOLCHLIB) LDFLAGS += -T$(LDSCRIPT) diff --git a/F1:F103/PL2303_ringbuffer/PL2303.bin b/F1:F103/PL2303_ringbuffer/PL2303.bin index 69e3c95..4d080e2 100755 Binary files a/F1:F103/PL2303_ringbuffer/PL2303.bin and b/F1:F103/PL2303_ringbuffer/PL2303.bin differ 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 4c3d095..b0c2610 100755 Binary files a/F3:F303/floatPrintf/usart1.bin and b/F3:F303/floatPrintf/usart1.bin differ 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 a47c25b..4c539f3 100755 Binary files a/F4:F401/blink/blink.bin and b/F4:F401/blink/blink.bin differ 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 b058600..48c48b0 100755 Binary files a/G0:G070/blink/blink.bin and b/G0:G070/blink/blink.bin differ diff --git a/G0:G070/i2c/Makefile b/G0:G070/i2c/Makefile index 7c5a85f..f0cae20 100644 --- a/G0:G070/i2c/Makefile +++ b/G0:G070/i2c/Makefile @@ -64,11 +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 diff --git a/G0:G070/i2c/i2c.c b/G0:G070/i2c/i2c.c index f8b62ab..1d43ada 100644 --- a/G0:G070/i2c/i2c.c +++ b/G0:G070/i2c/i2c.c @@ -17,7 +17,8 @@ */ #include -#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 7c289ce..30e9a03 100755 Binary files a/G0:G070/i2c/i2cscan.bin and b/G0:G070/i2c/i2cscan.bin differ diff --git a/G0:G070/i2c/proto.c b/G0:G070/i2c/proto.c index 4dbf0b7..760bb37 100644 --- a/G0:G070/i2c/proto.c +++ b/G0:G070/i2c/proto.c @@ -17,6 +17,7 @@ */ #include +#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 a6b1249..1ee68db 100755 Binary files a/G0:G070/usart/usart.bin and b/G0:G070/usart/usart.bin differ 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