реклама на сайте
подробности

 
 
> GNU-сный math
_Артём_
сообщение Mar 30 2012, 21:24
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Добрый вечер.
Создал проект для GCC Cortex-M3. Проект содержит только функцию main следующего содержания
Код
#include "efm32g890f128.h"
#include <math.h>

volatile float DeltaX=50, DeltaY=120, Angle=3.14/4;
volatile float Delta;
volatile unsigned char DistanceFlag;
int main() {
    while (1) {
        float dx=DeltaX, dy=DeltaY, angle=Angle, distance_delta;
        dx=dx*cos(angle);
        distance_delta=dx*dx+dy*dy;
        distance_delta=sqrt(distance_delta);
        if (distance_delta>100)
            DistanceFlag=1;
        Delta=distance_delta;
    }
}


Получил на выходе
Код
  10416       1092        264      11772       2dfc    ./exe/efm_cpp_main.axf

Что так много-то?
Запустил elf в Keil. Цикл while выполнился за ~3500 тактов, если Keil мне не врёт.
Makefile:
CODE

#+---------------------------------------------------------------------------
#
# Copyright © 2010 Anton Gusev aka AHTOXA (HTTP://AHTOXA.NET)
#
# File: makefile
#
# Contents: makefile to build arm Cortex-M3 software with gcc
#
#----------------------------------------------------------------------------

############# program name
TARGET = efm_cpp_main

# program version
VER_MAJOR = 0
VER_MINOR = 1

TOOL = arm-none-eabi-
# TOOL = arm-kgp-eabi-

# compile options
MCU = cortex-m3
OPTIMIZE = -O3
USE_LTO = NO

# Select family
# STM32F10X_LD : STM32 Low density devices
# STM32F10X_LD_VL : STM32 Low density Value Line devices
# STM32F10X_MD : STM32 Medium density devices
# STM32F10X_MD_VL : STM32 Medium density Value Line devices
# STM32F10X_HD : STM32 High density devices
# STM32F10X_HD_VL : STM32 XL-density devices
# STM32F10X_CL : STM32 Connectivity line devices
# STM32F10X_XL : STM32G890 XL-density devices
CHIP = EFM32G890


#defines
DEFS = -D$(CHIP)
DEFS += -DVER_MAJOR=$(VER_MAJOR)
DEFS += -DVER_MINOR=$(VER_MINOR)

###########################################################
# common part for all my cortex-m3 projects
###########################################################

BASE = .
CC = $(TOOL)gcc
CXX = $(TOOL)g++
LD = $(TOOL)g++
AS = $(CC) -x assembler-with-cpp
OBJCOPY = $(TOOL)objcopy
OBJDUMP = $(TOOL)objdump
SIZE = $(TOOL)size -d
FLASHER = openocd
RM = rm -f
CP = cp
MD = mkdir


# dirs
SRCDIR = $(BASE)/src
OBJDIR = $(BASE)/obj
EXEDIR = $(BASE)/exe
LSTDIR = $(BASE)/lst
PRJDIR = $(BASE)/prj
BAKDIR = $(BASE)/bak

#files
HEX = $(EXEDIR)/$(TARGET).hex
BIN = $(EXEDIR)/$(TARGET).bin
ELF = $(EXEDIR)/$(TARGET).axf
MAP = $(LSTDIR)/$(TARGET).map
LSS = $(LSTDIR)/$(TARGET).lss
OK = $(EXEDIR)/$(TARGET).ok

# linker script (chip dependent)
LD_SCRIPT = $(PRJDIR)/$(CHIP).ld


# source directories (all *.c, *.cpp and *.S files included)
DIRS := $(SRCDIR)
DIRS += $(COMMON)

# includes
INCS := $(patsubst %, -I "%", $(DIRS))

# individual source files
SRCS :=

#calc obj files list
OBJS := $(SRCS)
OBJS += $(wildcard $(addsuffix /*.cpp, $(DIRS)))
OBJS += $(wildcard $(addsuffix /*.c, $(DIRS)))
OBJS += $(wildcard $(addsuffix /*.S, $(DIRS)))
OBJS := $(notdir $(OBJS))
OBJS := $(OBJS:.cpp=.o)
OBJS := $(OBJS:.c=.o)
OBJS := $(OBJS:.S=.o)
OBJS := $(patsubst %, $(OBJDIR)/%, $(OBJS))

#files to archive
ARCFILES = \
$(SRCDIR) \
$(PRJDIR) \
$(BASE)/makefile \
$(BASE)/.cproject \
$(BASE)/.project

# flags
FLAGS = -mcpu=$(MCU) -mthumb
FLAGS += $(INCS)
FLAGS += -MD
FLAGS += $(DEFS)
FLAGS += -Wa,-adhlns=$(addprefix $(LSTDIR)/, $(notdir $(addsuffix .lst, $(basename $<))))

AFLAGS = $(FLAGS)

CFLAGS = $(FLAGS)
CFLAGS += $(OPTIMIZE)
CFLAGS += -std=gnu99
CFLAGS += -g
CFLAGS += -ffunction-sections -fdata-sections
CFLAGS += -Wall -Wextra
CFLAGS += -Wimplicit -Wcast-align -Wpointer-arith -Wredundant-decls
CFLAGS += -Wshadow -Wcast-qual -Wcast-align -Wnested-externs -pedantic

CXXFLAGS = $(FLAGS)
CXXFLAGS += $(OPTIMIZE)
CXXFLAGS += -g
CXXFLAGS += -fno-exceptions -fno-rtti
CXXFLAGS += -ffunction-sections -fdata-sections
CXXFLAGS += -fno-threadsafe-statics
CXXFLAGS += -funsigned-bitfields -fshort-enums
CXXFLAGS += -Wall -Wextra
CXXFLAGS += -Winline
CXXFLAGS += -Wpointer-arith -Wredundant-decls
CXXFLAGS += -Wshadow -Wcast-qual -Wcast-align -pedantic

LD_FLAGS = -mcpu=$(MCU)
LD_FLAGS += -mthumb
LD_FLAGS += -nostartfiles
LD_FLAGS += -Wl,-Map="$(MAP)",--cref
LD_FLAGS += -Wl,--gc-sections
LD_FLAGS += -T$(LD_SCRIPT)

ifeq ($(USE_LTO),YES)
CFLAGS += -flto
CXXFLAGS += -flto
LD_FLAGS += -flto $(OPTIMIZE)
endif

#openocd command-line

# debug level (d0..d3)
oocd_params = -d0
# interface and board/target settings (using the OOCD target-library here)
# oocd_params += -c "fast enable"
oocd_params += -f interface/arm-usb-ocd.cfg
oocd_params += -f board/stm32f10x_128k_eval.cfg
oocd_params += -c init -c targets
oocd_params_program = $(oocd_params)
# commands to prepare flash-write
oocd_params_program += -c "halt"
# flash-write and -verify
oocd_params_program += -c "flash write_image erase $(ELF)"
oocd_params_program += -c "verify_image $(ELF)"
# reset target
oocd_params_program += -c "reset run"
# terminate OOCD after programming
oocd_params_program += -c shutdown

oocd_params_reset = $(oocd_params)
oocd_params_reset += -c "reset run"
oocd_params_reset += -c shutdown

.SILENT :

.PHONY: all start dirs build clean program reset archive

############# targets

all : start dirs $(ELF) $(BIN) $(LSS) $(OK)

build: clean all

start:
@echo --- building $(TARGET)

$(LSS): $(ELF) makefile
@echo --- making asm-lst...
# @$(OBJDUMP) -dStC $(ELF) > $(LSS)
@$(OBJDUMP) -dC $(ELF) > $(LSS)

$(OK): $(ELF)
@$(SIZE) $(ELF)
@echo "Errors: none"

$(ELF): $(OBJS) makefile
@echo --- linking...
$(LD) $(OBJS) $(LIBS) $(LD_FLAGS) -o "$(ELF)"

$(HEX): $(ELF)
@echo --- make hex...
@$(OBJCOPY) -O ihex $(ELF) $(HEX)

$(BIN): $(ELF)
@echo --- make binary...
@$(OBJCOPY) -O binary $(ELF) $(BIN)

program: $(ELF)
@echo "Programming with OPENOCD"
$(FLASHER) $(oocd_params_program)

reset:
@echo Resetting device
$(FLASHER) $(oocd_params_reset)

VPATH := $(DIRS)

$(OBJDIR)/%.o: %.cpp makefile
@echo --- compiling $<...
$(CXX) -c $(CXXFLAGS) -o $@ $<

$(OBJDIR)/%.o: %.c makefile
@echo --- compiling $<...
$(CC) -c $(CFLAGS) -o $@ $<

$(OBJDIR)/%.o: %.S makefile
@echo --- assembling $<...
$(AS) -c $(AFLAGS) -o $@ $<

dirs: $(OBJDIR) $(EXEDIR) $(LSTDIR) $(BAKDIR)

$(OBJDIR):
-@$(MD) $(OBJDIR)

$(EXEDIR):
-@$(MD) $(EXEDIR)

$(LSTDIR):
-@$(MD) $(LSTDIR)

$(BAKDIR):
-@$(MD) $(BAKDIR)

clean:
-@$(RM) $(OBJDIR)/*.d 2>/dev/null
-@$(RM) $(OBJDIR)/*.o 2>/dev/null
-@$(RM) $(LSTDIR)/*.lst 2>/dev/null
-@$(RM) $(ELF)
-@$(RM) $(HEX)
-@$(RM) $(LSS)
-@$(RM) $(MAP)

archive:
@echo --- archiving...
7z a $(BAKDIR)/$(TARGET)_`date +%Y-%m-%d,%H-%M-%S` $(ARCFILES)
@echo --- done!

# dependencies
ifeq (,$(findstring build,$(MAKECMDGOALS)))
ifeq (,$(findstring clean,$(MAKECMDGOALS)))
ifeq (,$(findstring dirs,$(MAKECMDGOALS)))
-include $(wildcard $(OBJDIR)/*.d)
endif
endif
endif



Toolchain: Yagarto.
Чтобы в нём поменять?Прикрепленный файл  efm_cpp_main.rar ( 278.03 килобайт ) Кол-во скачиваний: 100


P.S. Из интереса создал точно такой же проект в AtmelStudio6 для xmega128A1. Запустил AVRStudio 4.18.
Цикл while выполнился за 2900 тактов.
Прикрепленный файл  efm_cpp_main.rar ( 278.03 килобайт ) Кол-во скачиваний: 100


Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 13:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016