Matrisberäkningar med för STM32?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Matrisberäkningar med för STM32?

Inlägg av Rick81 »

De funktioner du ha problem med är normalt sätt operativsystems funktioner som filhantering. Eftersom du varken har operativsystem eller hdd/ssd på din STM32 måste du undersöka vad dessa används till och beroende på detta göra en workaround. tex

1) filhantering används inte på det sätt du använder biblioteket - då kan du bara deklara funktionerna som tomma
2) filhantering används för genera nån specialfil, ex konfigfil eller nåt annat - hårdkoda inställningar som du vill ha det
3) filhantering krävs för dina operationer. - koppla på SDkort och implementera fatFS
4) filhantering används för skapa filer till kompilatorn - kompilera filena på PC

Hur gick det med x86 assemblern? Om jag fattade rätt hade biblioteket x86 assembler? Det går ju ändra till ARM assembler men kan ju ge problem så bäst är att försöka göra om assemblern till Ckod.
Senast redigerad av Rick81 15 februari 2019, 10:10:34, redigerad totalt 1 gång.
Användarvisningsbild
hawkan
Inlägg: 2636
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

Sitter och pillar med detta just nu.
Det finns en färdig väg för att korskompilera och alla dessa saknade funktioner
finns där. Det måste ju vara versioner för just processorn och embedded-miljön.
Försöker sätta upp en virtualbox för att köra detta men det ska nog gå bra.

https://www.instructables.com/id/Build- ... der-Linux/
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Jo. Det där känner jag till, att biblioteket är anpassat för OS. Hur skulle det vara om jag kopierade och klistrade i vissa funktioner från biblioteket till mitt bibliotek? På Lapacks hemsida så kan man se en karta om vilka funktioner som talar med vem. De enda jag har behov utav är SVD, QR och LU från Lapack. Inget mer.

Eller är det ett dumt förslag?

Jag har lagt ned arm-atollic-eabi-gcc. Den fungerade inte.
Användarvisningsbild
hawkan
Inlägg: 2636
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

Undrar om inte det bästa är att följa instructables och se vart det leder.
Har snart tagit mej igenom den. Det är en del saker att installera och ladda ner.
Vet inte riktigt vad codeblocks gör i det stora hela, men att CubeMx behöver vara med
kan jag vagt förstå.

EDIT: Nu har jag tagit mej igenom detta. Uhhm. Tja. Det borde gå att använda för
att korskompilera. Vart bara att skriva "make" och den gjorde något som kanske
skulle kunna laddas ner till en mcu.

Så då är det väl att få till Clapack i denna miljön. Få det att kompilera.
Ja det blir en del jobb med det utan tvekan.

Jag får ta en paus med detta. Det vart så mycket nytt att lära mej att jag inte
behöver lära mej något mer på ett par dagar känns det som. Tvn gäller.

EDIT 2: Det är helt okej att skilja ut exakt vad du behöver och bara ta med det.
Det är ändå det som länkaren gör. Gör du det. Ofta vet man inte beroenden i koden,
men om det är utrett så är det absolut inga problem.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Oj detta var ett rörligt inlägg. Jag vet inte om det är värt att komplimera Clapack i Codeblocks när jag hör från dig hur bökigt det är.

Jag tror jag dyker ned i C koden och kopierar in de C-filer jag behöver.
Användarvisningsbild
hawkan
Inlägg: 2636
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

Okej. Då ska du veta hur jag kände det efter att ha gått igenom det :)

Men du hade nåt sätt för att skapa kod till STM32? Har för mej du visade det
i början, och en C-fil med massor av genererade kommentarer och Hal_Init()
och sånt. Det är väl DÄR du ska lägga in de bitarna av clapack du behöver.
Då borde det funka kan jag tycka.

EDIT. Man är inte i codeblocks, men den användes till... Jag vet inte faktiskt.
Man fick ut en Makefil och en massa supportrutiner från CubeMX.
Man fick en main.c och den kan man utöka som man vill. Och Makefile
kan ändras efter behov. Och man jobbar i bash-nivå och skriver "make"
och editerar med sin favoriteditor. Så det är en vanlig linux-miljö.
Det jobbiga var att sätta upp den. Sedan ska det flyta på utan att
man behöver göra om detta. Som jag har förstått det.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Jag lägger upp en skärmdump för att visa hur jag tänker göra. Här använder jag en funktion och sedan så kopierar jag och klistrar in nödvändiga filer. Allt bara för att få bort alla felmeddelanden :)
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
hawkan
Inlägg: 2636
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

Det ska väl funka att göra så.

Var tog du clapack ifrån? Tänkte jag kunde prova.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Här! Jag kommer ändå lägga upp mitt bibliotek på forumet. Men en sak som du kan testa är varför den inte ger en definerad referes. Funktionerna s_wsfe osv verkar inte finnas. Kan man göra så i C att man säger åt kompilatorn att neka felmeddelanden?

För när jag kompilerar C-kod, någon annans C-kod, så får man typ triljoners med fel och varningar. Ändå fungerar koden. :?

http://www.netlib.org/clapack/
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
hummel
Inlägg: 2269
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Matrisberäkningar med för STM32?

Inlägg av hummel »

Om C-kompilatorn ger ett fel lär det inte genereras någon kod/objektfil. Kompilator-varningar är just varning och betyder inte direkt fel. MEN varningar ska åtgärdas då det kan orsaka fel.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Någon som vill ha mitt ofärdiga bibliotek? Tänkte om det var någon som var sugen på att utforska lite. Jag kan lägga upp hela Eclipse projektet.

Här är projektet mitt. Starta upp det med Eclipse. Det är massvis med mystiska felmeddelanden, trots att alla filer finns där.

Edit:
Filen uppdaterad.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av Al_Bundy 15 februari 2019, 14:27:26, redigerad totalt 3 gånger.
Användarvisningsbild
hawkan
Inlägg: 2636
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

De finns i wsfe,c, sfe.c och fmt.c
Du fick ju generalfel från länkaren så något användbart kom inte ut ur den.
Det är skillnad på varningar och fel. Blir det fel så brukar det inte funka.
Användarvisningsbild
hawkan
Inlägg: 2636
Blev medlem: 14 augusti 2011, 10:27:40

Re: Matrisberäkningar med för STM32?

Inlägg av hawkan »

Så här kan du göra för att kors-kompilera ett program med clapack.
Jag gjorde det förut idag. Det funkar.

Följ instruktionerna i länken till instructables som jag la här i morse.
Då får du en Makefile med rätt flaggor satta (viktigt!).

Lägg clapack under Src, där main.c är. Lägg in SAMMA flaggor
i make.inc så att clapack kompileras på samma sätt.
Man får byta 'ld' mot arm-none-eabi-ld i nån Makefile.
Sen ska det gå att kompilera clapack. Här är en make.inc som borde fungera.

Kod: Markera allt

####################################################################
#  LAPACK make include file.                                       #
#  LAPACK, Version 3.8.0                                           #
#  November 2017                                                   #
####################################################################

SHELL = /bin/sh
GCC_PATH = /usr/bin/

#######################################
# binaries
#######################################
PREFIX  = $(GCC_PATH)arm-none-eabi-
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
AR = $(PREFIX)ar
SZ = $(PREFIX)size
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S

#  CC is the C compiler, normally invoked with options CFLAGS.
#
#CFLAGS = -O3
# macros for gcc
AS_DEFS =
C_DEFS =  -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" -DUSE_HAL_DRIVER -DSTM32F407xx
# includes for gcc
AS_INCLUDES =
HH = /home/hawkan/src/test/Testing/Src
C_INCLUDES = -I../include
C_INCLUDES += -I$(HH)/Inc
C_INCLUDES += -I$(HH)/Drivers/STM32F4xx_HAL_Driver/Inc
C_INCLUDES += -I$(HH)/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy
C_INCLUDES += -I$(HH)/Drivers/CMSIS/Device/ST/STM32F4xx/Include
C_INCLUDES += -I$(HH)/Drivers/CMSIS/Include
C_INCLUDES += -I$(HH)/lapack/CLAPACK-3.2.1/INCLUDE
# compile gcc flags
WFLAGS = -Wall -fdata-sections -ffunction-sections -fmessage-length=0 -c
ASFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard $(AS_DEFS) $(AS_INCLUDES) $(OPT) $(WFLAGS)
CFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fno-aggressive-loop-optimizations $(C_DEFS) $(C_INCLUDES) $(OPT) $(WFLAGS)
# Generate dependency information
CFLAGS += -MD -MP
# -MF .dep/$(@F).d
LOADOPTS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fno-aggressive-loop-optimizations $(C_DEFS) $(C_INCLUDES) $(OPT) --specs=nosys.specs

#  Modify the FORTRAN and OPTS definitions to refer to the compiler
#  and desired compiler options for your machine.  NOOPT refers to
#  the compiler options desired when NO OPTIMIZATION is selected.
#
#  Note: During a regular execution, LAPACK might create NaN and Inf
#  and handle these quantities appropriately. As a consequence, one
#  should not compile LAPACK with flags such as -ffpe-trap=overflow.
#
FORTRAN = gfortran
OPTS    = -O2 -frecursive
DRVOPTS = $(OPTS)
NOOPT   = -O0 -frecursive

#  Define LOADER and LOADOPTS to refer to the loader and desired
#  load options for your machine.
#
LOADER   = gfortran
#LOADOPTS =

#  The archiver and the flag(s) to use when building an archive
#  (library).  If your system has no ranlib, set RANLIB = echo.
#
ARCH      = $(AR)
ARCHFLAGS = cr
RANLIB    = ranlib

#  Timer for the SECOND and DSECND routines
#
#  Default:  SECOND and DSECND will use a call to the
#  EXTERNAL FUNCTION ETIME
#TIMER = EXT_ETIME
#  For RS6K:  SECOND and DSECND will use a call to the
#  EXTERNAL FUNCTION ETIME_
#TIMER = EXT_ETIME_
#  For gfortran compiler:  SECOND and DSECND will use a call to the
#  INTERNAL FUNCTION ETIME
TIMER = INT_ETIME
#  If your Fortran compiler does not provide etime (like Nag Fortran
#  Compiler, etc...) SECOND and DSECND will use a call to the
#  INTERNAL FUNCTION CPU_TIME
#TIMER = INT_CPU_TIME
#  If none of these work, you can use the NONE value.
#  In that case, SECOND and DSECND will always return 0.
#TIMER = NONE

#  Uncomment the following line to include deprecated routines in
#  the LAPACK library.
#
#BUILD_DEPRECATED = Yes

#  LAPACKE has the interface to some routines from tmglib.
#  If LAPACKE_WITH_TMG is defined, add those routines to LAPACKE.
#
#LAPACKE_WITH_TMG = Yes

#  Location of the extended-precision BLAS (XBLAS) Fortran library
#  used for building and testing extended-precision routines.  The
#  relevant routines will be compiled and XBLAS will be linked only
#  if USEXBLAS is defined.
#
#USEXBLAS = Yes
#XBLASLIB = -lxblas

#  The location of the libraries to which you will link.  (The
#  machine-specific, optimized BLAS library should be used whenever
#  possible.)
#
BLASLIB      = ../../librefblas.a
CBLASLIB     = ../../libcblas.a
LAPACKLIB    = liblapack.a
TMGLIB       = libtmglib.a
LAPACKELIB   = liblapacke.a
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

Jag ska testa det där!

Annars så har jag lyckats plocka in nödvändiga filer för att utgöra mina beräkningar. :)
Jag lägger upp mitt projekt här om någon vill testa. SVD och LU fungerar utmärkt!

Nu skulle det inte vara fel att kompilera det för STM32.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Matrisberäkningar med för STM32?

Inlägg av Al_Bundy »

hawkan skrev:Så här kan du göra för att kors-kompilera ett program med clapack.
Jag gjorde det förut idag. Det funkar.

Följ instruktionerna i länken till instructables som jag la här i morse.
Då får du en Makefile med rätt flaggor satta (viktigt!).

Lägg clapack under Src, där main.c är. Lägg in SAMMA flaggor
i make.inc så att clapack kompileras på samma sätt.
Man får byta 'ld' mot arm-none-eabi-ld i nån Makefile.
Sen ska det gå att kompilera clapack. Här är en make.inc som borde fungera.

Kod: Markera allt

####################################################################
#  LAPACK make include file.                                       #
#  LAPACK, Version 3.8.0                                           #
#  November 2017                                                   #
####################################################################

SHELL = /bin/sh
GCC_PATH = /usr/bin/

#######################################
# binaries
#######################################
PREFIX  = $(GCC_PATH)arm-none-eabi-
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
AR = $(PREFIX)ar
SZ = $(PREFIX)size
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S

#  CC is the C compiler, normally invoked with options CFLAGS.
#
#CFLAGS = -O3
# macros for gcc
AS_DEFS =
C_DEFS =  -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" -DUSE_HAL_DRIVER -DSTM32F407xx
# includes for gcc
AS_INCLUDES =
HH = /home/hawkan/src/test/Testing/Src
C_INCLUDES = -I../include
C_INCLUDES += -I$(HH)/Inc
C_INCLUDES += -I$(HH)/Drivers/STM32F4xx_HAL_Driver/Inc
C_INCLUDES += -I$(HH)/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy
C_INCLUDES += -I$(HH)/Drivers/CMSIS/Device/ST/STM32F4xx/Include
C_INCLUDES += -I$(HH)/Drivers/CMSIS/Include
C_INCLUDES += -I$(HH)/lapack/CLAPACK-3.2.1/INCLUDE
# compile gcc flags
WFLAGS = -Wall -fdata-sections -ffunction-sections -fmessage-length=0 -c
ASFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard $(AS_DEFS) $(AS_INCLUDES) $(OPT) $(WFLAGS)
CFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fno-aggressive-loop-optimizations $(C_DEFS) $(C_INCLUDES) $(OPT) $(WFLAGS)
# Generate dependency information
CFLAGS += -MD -MP
# -MF .dep/$(@F).d
LOADOPTS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fno-aggressive-loop-optimizations $(C_DEFS) $(C_INCLUDES) $(OPT) --specs=nosys.specs

#  Modify the FORTRAN and OPTS definitions to refer to the compiler
#  and desired compiler options for your machine.  NOOPT refers to
#  the compiler options desired when NO OPTIMIZATION is selected.
#
#  Note: During a regular execution, LAPACK might create NaN and Inf
#  and handle these quantities appropriately. As a consequence, one
#  should not compile LAPACK with flags such as -ffpe-trap=overflow.
#
FORTRAN = gfortran
OPTS    = -O2 -frecursive
DRVOPTS = $(OPTS)
NOOPT   = -O0 -frecursive

#  Define LOADER and LOADOPTS to refer to the loader and desired
#  load options for your machine.
#
LOADER   = gfortran
#LOADOPTS =

#  The archiver and the flag(s) to use when building an archive
#  (library).  If your system has no ranlib, set RANLIB = echo.
#
ARCH      = $(AR)
ARCHFLAGS = cr
RANLIB    = ranlib

#  Timer for the SECOND and DSECND routines
#
#  Default:  SECOND and DSECND will use a call to the
#  EXTERNAL FUNCTION ETIME
#TIMER = EXT_ETIME
#  For RS6K:  SECOND and DSECND will use a call to the
#  EXTERNAL FUNCTION ETIME_
#TIMER = EXT_ETIME_
#  For gfortran compiler:  SECOND and DSECND will use a call to the
#  INTERNAL FUNCTION ETIME
TIMER = INT_ETIME
#  If your Fortran compiler does not provide etime (like Nag Fortran
#  Compiler, etc...) SECOND and DSECND will use a call to the
#  INTERNAL FUNCTION CPU_TIME
#TIMER = INT_CPU_TIME
#  If none of these work, you can use the NONE value.
#  In that case, SECOND and DSECND will always return 0.
#TIMER = NONE

#  Uncomment the following line to include deprecated routines in
#  the LAPACK library.
#
#BUILD_DEPRECATED = Yes

#  LAPACKE has the interface to some routines from tmglib.
#  If LAPACKE_WITH_TMG is defined, add those routines to LAPACKE.
#
#LAPACKE_WITH_TMG = Yes

#  Location of the extended-precision BLAS (XBLAS) Fortran library
#  used for building and testing extended-precision routines.  The
#  relevant routines will be compiled and XBLAS will be linked only
#  if USEXBLAS is defined.
#
#USEXBLAS = Yes
#XBLASLIB = -lxblas

#  The location of the libraries to which you will link.  (The
#  machine-specific, optimized BLAS library should be used whenever
#  possible.)
#
BLASLIB      = ../../librefblas.a
CBLASLIB     = ../../libcblas.a
LAPACKLIB    = liblapack.a
TMGLIB       = libtmglib.a
LAPACKELIB   = liblapacke.a
Har du testat om detta fungerar för ARM? Jag menar, jag hade inte så stora problem att kompilera. Ett problem som jag stötte på var att denna CLapack är skapat för operativsystem, inte för uC. :( Så man fick typ undvika kompilera vissa filer.
Skriv svar