From dff65627fe7491b42fd2b0ec6f8fba9b3a5b040e Mon Sep 17 00:00:00 2001 From: awe Date: Tue, 7 Apr 2026 20:20:46 +0300 Subject: [PATCH] bugfix --- .codex | 0 local.mk.example | 7 +++ makefile | 118 +++++++++++++++++++++++++++++----------- src/l502_fft_config.h | 20 +++++++ src/l502_stream.c | 2 +- src/l502_user_process.c | 10 ++-- src/l502_user_process.h | 31 ++++------- 7 files changed, 129 insertions(+), 59 deletions(-) create mode 100644 .codex create mode 100644 local.mk.example create mode 100644 src/l502_fft_config.h diff --git a/.codex b/.codex new file mode 100644 index 0000000..e69de29 diff --git a/local.mk.example b/local.mk.example new file mode 100644 index 0000000..e83fd61 --- /dev/null +++ b/local.mk.example @@ -0,0 +1,7 @@ +# Local Blackfin toolchain override for this project. +# +# Option 1: point to the toolchain root that contains bin/bfin-elf-gcc +# BFIN_TOOLCHAIN := /opt/analog/bfin-elf +# +# Option 2: provide the full compiler prefix directly +# CROSS_COMPILE := /opt/analog/bfin-elf/bin/bfin-elf- diff --git a/makefile b/makefile index 7899f5a..fa8322b 100644 --- a/makefile +++ b/makefile @@ -1,6 +1,8 @@ -BUILDDIR = build - -CONFIG ?= release +BUILDDIR = build + +CONFIG ?= release + +-include local.mk CONFIGDIR = $(BUILDDIR)/$(CONFIG) @@ -11,11 +13,46 @@ LSTDIR = $(CONFIGDIR)/lst DEPDIR = $(CONFIGDIR)/.dep -TRGT = bfin-elf- -CC = $(TRGT)gcc -CP = $(TRGT)objcopy -AS = $(TRGT)gcc -x assembler-with-cpp -LDR = $(TRGT)ldr +BFIN_TOOLCHAIN ?= +CROSS_COMPILE ?= + +ifeq ($(strip $(CROSS_COMPILE)),) +ifneq ($(strip $(BFIN_TOOLCHAIN)),) +ifneq ($(wildcard $(BFIN_TOOLCHAIN)/bin/bfin-elf-gcc),) +TRGT = $(BFIN_TOOLCHAIN)/bin/bfin-elf- +else ifneq ($(wildcard $(BFIN_TOOLCHAIN)/bfin-elf-gcc),) +TRGT = $(BFIN_TOOLCHAIN)/bfin-elf- +else +TRGT = $(BFIN_TOOLCHAIN)/bin/bfin-elf- +endif +else +TRGT = bfin-elf- +endif +else +TRGT = $(CROSS_COMPILE) +endif + +CC = $(TRGT)gcc +CP = $(TRGT)objcopy +AS = $(TRGT)gcc -x assembler-with-cpp +LDR = $(TRGT)ldr + +TOOLCHAIN_SKIP_CHECK_GOALS = clean help print-toolchain +TOOLCHAIN_CHECK = 1 +ifneq ($(strip $(MAKECMDGOALS)),) +ifeq ($(strip $(filter-out $(TOOLCHAIN_SKIP_CHECK_GOALS),$(MAKECMDGOALS))),) +TOOLCHAIN_CHECK = 0 +endif +endif + +ifeq ($(TOOLCHAIN_CHECK),1) +ifeq ($(strip $(shell command -v $(CC) 2>/dev/null)),) +$(error Blackfin GCC toolchain not found: '$(CC)'. Set BFIN_TOOLCHAIN=/abs/path/to/bfin-elf or CROSS_COMPILE=/abs/path/to/bin/bfin-elf-) +endif +ifeq ($(strip $(shell command -v $(LDR) 2>/dev/null)),) +$(error Blackfin loader tool not found: '$(LDR)'. Set BFIN_TOOLCHAIN=/abs/path/to/bfin-elf or CROSS_COMPILE=/abs/path/to/bin/bfin-elf-) +endif +endif LDRFLAGS = -T BF527 @@ -131,14 +168,29 @@ CPFLAGS += -MD -MP -MF $(DEPDIR)/$(@F).d #bfin-elf-gcc $(CPFLAGS) -I . $(INCDIR) $(LDFLAGS) $(SRC) -o bf-test.elf -.PHONY: all clean prj dirs -.SECONDEXPANSION: - -all: dirs $(RESULT_FILES) - - -$(OBJS) : $$(filter %/$$(basename $$(notdir $$@)).c, $$(SRC)) ##$$(patsubst %.o,%.c, $$@) - $(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ +.PHONY: all clean prj dirs help print-toolchain +.SECONDEXPANSION: + +all: dirs $(RESULT_FILES) + +help: + @echo "Blackfin firmware build" + @echo " make" + @echo " make CONFIG=debug" + @echo " make BFIN_TOOLCHAIN=/abs/path/to/bfin-elf" + @echo " make CROSS_COMPILE=/abs/path/to/bin/bfin-elf-" + @echo " make print-toolchain" + +print-toolchain: + @echo "TRGT=$(TRGT)" + @echo "CC=$(CC)" + @echo "AS=$(AS)" + @echo "CP=$(CP)" + @echo "LDR=$(LDR)" + + +$(OBJS) : $$(filter %/$$(basename $$(notdir $$@)).c, $$(SRC)) ##$$(patsubst %.o,%.c, $$@) + $(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ $(AOBJS) : $(ASRC) $(AS) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ @@ -153,23 +205,23 @@ dirs: $(BUILDDIR) $(CONFIGDIR) $(DEPDIR) $(OBJDIR) $(LSTDIR) $(BINDIR) -$(BINDIR): - mkdir $(BINDIR) - -$(LSTDIR): - mkdir $(LSTDIR) - -$(OBJDIR): - mkdir $(OBJDIR) - -$(BUILDDIR): - mkdir $(BUILDDIR) - -$(CONFIGDIR): - mkdir $(CONFIGDIR) - -$(DEPDIR): - mkdir $(DEPDIR) +$(BINDIR): + mkdir -p $(BINDIR) + +$(LSTDIR): + mkdir -p $(LSTDIR) + +$(OBJDIR): + mkdir -p $(OBJDIR) + +$(BUILDDIR): + mkdir -p $(BUILDDIR) + +$(CONFIGDIR): + mkdir -p $(CONFIGDIR) + +$(DEPDIR): + mkdir -p $(DEPDIR) clean: -rm -fR $(CONFIGDIR) diff --git a/src/l502_fft_config.h b/src/l502_fft_config.h new file mode 100644 index 0000000..78ea529 --- /dev/null +++ b/src/l502_fft_config.h @@ -0,0 +1,20 @@ +#ifndef L502_FFT_CONFIG_H_ +#define L502_FFT_CONFIG_H_ + +#ifndef FP_acc +#define FP_acc 1000 +#endif + +#ifndef FFT_INP_DATA_L +#define FFT_INP_DATA_L (1 << 9) +#endif + +#ifndef DATA_L +#define DATA_L FFT_INP_DATA_L +#endif + +#ifndef TWIDDLE_L +#define TWIDDLE_L (DATA_L / 2) +#endif + +#endif diff --git a/src/l502_stream.c b/src/l502_stream.c index ac61cc7..d924a56 100644 --- a/src/l502_stream.c +++ b/src/l502_stream.c @@ -48,7 +48,7 @@ volatile uint32_t TX_buff_shadow[TX_BUFF_SIZE] __attribute__((section(".sdram_no //volatile uint32_t RAW_data_buff[RAW_DATA_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); volatile uint32_t AVG_buff[AVG_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); //volatile uint32_t AVG_buff_B[AVG_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); -volatile uint64_t FFT_buff[FFT_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); +volatile int64_t FFT_buff[FFT_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); diff --git a/src/l502_user_process.c b/src/l502_user_process.c index d8b8139..567957a 100644 --- a/src/l502_user_process.c +++ b/src/l502_user_process.c @@ -87,10 +87,10 @@ extern volatile uint32_t TX_buff_shadow[]; //size: TX_BUFF_SIZE //extern volatile uint32_t RAW_data_buff[]; //size: RAW_DATA_BUFF_SIZE extern volatile uint32_t AVG_buff[]; //size: AVG_BUFF_SIZE //extern volatile uint32_t AVG_buff_B[]; //size: AVG_BUFF_SIZE -extern volatile uint64_t FFT_buff[]; //size: FFT_BUFF_SIZE +extern volatile int64_t FFT_buff[]; //size: FFT_BUFF_SIZE -extern volatile int64_t twiddle_re[]; //size: TWIDDLE_L -extern volatile int64_t twiddle_im[]; //size: TWIDDLE_L +extern int64_t twiddle_re[]; //size: TWIDDLE_L +extern int64_t twiddle_im[]; //size: TWIDDLE_L volatile uint32_t TX_marker[10] = {0xFE00000F,0xFE0000F0, 0xFE000F00, 0xFE00F000, 0xFE0F0000,0xFEF00000, 0xFE0F0000,0xFE00F000, 0xFE000F00, 0xFE0000F0}; @@ -173,7 +173,7 @@ static int64_t isqrt64(int64_t x) { -uint32_t dataprocessor(uint32_t* AVG_buff, uint32_t AVG_buff_I_max, uint64_t* FFT_buff, uint8_t mode){ +uint32_t dataprocessor(uint32_t* AVG_buff, uint32_t AVG_buff_I_max, int64_t* FFT_buff, uint8_t mode){ uint32_t FFT_buff_I = 0; if (mode == TRANSPARENT){ uint32_t i = 0; @@ -182,7 +182,7 @@ uint32_t dataprocessor(uint32_t* AVG_buff, uint32_t AVG_buff_I_max, uint64_t* FF } }else if (mode == FFT){ //uint32_t i = 0; - //void FFT_fp(int64_t* inp, uint32_t inp_L, int64_t* buf) + //void FFT_fp(const uint32_t* inp, uint32_t inp_L, int64_t* buf) //for (uint32_t i = 0; i < FFT_INP_DATA_L; ++i){ //AVG_buff[i] = FP_acc; //} diff --git a/src/l502_user_process.h b/src/l502_user_process.h index ba66850..a4000f2 100644 --- a/src/l502_user_process.h +++ b/src/l502_user_process.h @@ -9,26 +9,17 @@ пользователем для написания своих алгоритмов обработки данных и реализации пользовательских команд. ******************************************************************************/ -#include "l502_cmd.h" -#ifndef L502_USER_PROCESS_H_ - - #define FP_acc 1000 - #define L502_USER_PROCESS_H_ - - #ifndef FFT_FP_EXTERNAL_TWIDDLES - #define FFT_FP_EXTERNAL_TWIDDLES 1 - #endif - #ifndef FFT_INP_DATA_L - #define FFT_INP_DATA_L (1 << 9) - #endif - #ifndef DATA_L - #define DATA_L FFT_INP_DATA_L - #endif - #ifndef TWIDDLE_L - #define TWIDDLE_L (DATA_L / 2) - #endif - - /* остальной код заголовка */ +#include "l502_cmd.h" +#include "l502_fft_config.h" +#ifndef L502_USER_PROCESS_H_ + + #define L502_USER_PROCESS_H_ + + #ifndef FFT_FP_EXTERNAL_TWIDDLES + #define FFT_FP_EXTERNAL_TWIDDLES 1 + #endif + + /* остальной код заголовка */ //#endif /* L502_USER_PROCESS_H_ */