Jump to content

    

Создание проекта на assembler в STM32F4

2 часа назад, haker_fox сказал:

Ибо куча постов в стиле "видновс .... и пользователи виндовс..." запомнилась, а вот полезная информация потонула за тоннами гневных изречений... жаль.

Есть такая секта "Свидетелей Линуха". :biggrin:

Share this post


Link to post
Share on other sites

Им можно, их "праотцы" Це придумали ;-) такштааа...

Share this post


Link to post
Share on other sites

Коль уж мы тут все равно в офтоп скатились, поделюсь своим свежим. Надоело вручную менять цель (debug/release), а cmake для STM32 использовать как-то уж чересчур... Вот и сделал такое чудовище:

Spoiler

# make debug adds -DEBUG -Werror
# make ADDEFS="additional defs"
BINARY		= chrono
BOOTPORT	?= /dev/ttyUSB0
BOOTSPEED	?= 115200
# MCU FAMILY
FAMILY		?= F1
# MCU code
MCU			?= F103x8
# density (stm32f10x.h, lines 70-84)
DENSITY 	?= MD
# change this linking script depending on particular MCU model,
LDSCRIPT	?= stm32F103xB.ld
DEFS		= ${ADDEFS} -DVERSION=\"0.1.0\"
TARGET := RELEASE
# proxy GPS output over USART1
#DEFS += -DUSART1PROXY

FP_FLAGS	?= -msoft-float -mfloat-abi=soft
ASM_FLAGS	?= -mthumb -mcpu=cortex-m3 -mfix-cortex-m3-ldrd
ARCH_FLAGS	= $(ASM_FLAGS) $(FP_FLAGS)

###############################################################################
# Executables
#PREFIX		?= arm-none-eabi
# gcc from arm web site 
PREFIX		?= /opt/bin/arm-none-eabi
TOOLCHLIB	?= /opt/arm-none-eabi/lib
RM			:= rm -f
RMDIR		:= rmdir
CC			:= $(PREFIX)-gcc
# don't replace ld with gcc: the binary size would be much greater!!
LD			:= $(PREFIX)-ld
AR			:= $(PREFIX)-ar
AS			:= $(PREFIX)-as
SIZE 		:= $(PREFIX)-size
OBJCOPY		:= $(PREFIX)-objcopy
OBJDUMP		:= $(PREFIX)-objdump
GDB			:= $(PREFIX)-gdb
STFLASH		:= $(shell which st-flash)
STBOOT		:= $(shell which stm32flash)
DFUUTIL		:= $(shell which dfu-util)

###############################################################################
# Source files
OBJDIR 		= mk
SRC			:= $(wildcard *.c)
OBJS		:= $(addprefix $(OBJDIR)/, $(SRC:%.c=%.o))
STARTUP		= $(OBJDIR)/startup.o
OBJS 		+= $(STARTUP)
# dependencies: we need them to recompile files if their headers-dependencies changed
DEPS		:= $(OBJS:.o=.d)

INC_DIR ?= ../inc

INCLUDE 	:= -I$(INC_DIR)/Fx -I$(INC_DIR)/cm
LIB_DIR		:= $(INC_DIR)/ld

###############################################################################
# C flags
CFLAGS		+= -O2 -g -D__thumb2__=1 -MD
CFLAGS		+= -Wall -Wextra -Wshadow 
CFLAGS		+= -fno-common -ffunction-sections -fdata-sections -fno-stack-protector
CFLAGS		+=  $(ARCH_FLAGS)

###############################################################################
# Linker flags
LDFLAGS		+= --static -nostartfiles -nostdlibs 
LDFLAGS		+= -L$(LIB_DIR) -L$(TOOLCHLIB)
LDFLAGS		+= -T$(LDSCRIPT)

###############################################################################
# Used libraries
LDLIBS		+=  -lc $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)

DEFS		+= -DSTM32$(FAMILY) -DSTM32$(MCU) -DSTM32F10X_$(DENSITY)

ELF		:= $(OBJDIR)/$(BINARY).elf
LIST	:= $(OBJDIR)/$(BINARY).list
BIN		:= $(BINARY).bin
HEX		:= $(BINARY).hex

all: $(OBJDIR)/RELEASE
all: bin list size
release: all

debug: CFLAGS += -DEBUG -Werror
debug: TARGET := DEBUG
debug: $(OBJDIR)/DEBUG
debug: bin list size

$(OBJDIR)/DEBUG: 
	make clean
$(OBJDIR)/RELEASE:
	make clean

elf: $(ELF)
bin: $(BIN)
hex: $(HEX)
list: $(LIST)

ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif

$(OBJDIR):
	mkdir $(OBJDIR)

$(STARTUP): $(INC_DIR)/startup/vector.c
	$(CC) $(CFLAGS) $(DEFS) $(INCLUDE) -o $@ -c $<

$(OBJDIR)/%.o: %.c
	@echo "  CC      $<"
	$(CC) $(CFLAGS) $(DEFS) $(INCLUDE) -o $@ -c $<

$(BIN): $(ELF)
	@echo "TARGET: $(TARGET)"
	@> $(OBJDIR)/$(TARGET)
	@echo "  OBJCOPY $(BIN)"
	$(OBJCOPY) -Obinary $(ELF) $(BIN)

$(HEX): $(ELF)
	@echo "  OBJCOPY $(HEX)"
	$(OBJCOPY) -Oihex $(ELF) $(HEX)

$(LIST): $(ELF)
	@echo "  OBJDUMP $(LIST)"
	$(OBJDUMP) -S $(ELF) > $(LIST)

$(ELF): $(OBJDIR) $(OBJS) $(LDSCRIPT)
	@echo "  LD      $(ELF)"
	$(LD) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $(ELF)

size: $(ELF)
	$(SIZE) $(ELF)    

clean:
	@echo "  CLEAN"
	@$(RM) $(HEX)
	@$(RM) -rf $(OBJDIR) 2>/dev/null || true


flash: $(BIN)
	@echo "  FLASH  $(BIN)"
	$(STFLASH) --reset write $(BIN) 0x8000000

boot: $(BIN)
	@echo "  LOAD $(BIN) through bootloader"
	$(STBOOT) -b$(BOOTSPEED) $(BOOTPORT) -w $(BIN)

dfuboot: $(BIN)
	@echo "  LOAD  $(BIN) THROUGH DFU"
	$(DFUUTIL) -a0 -D $(BIN) -s 0x08000000

.PHONY: clean flash boot

 

 

Edited by Eddy_Em

Share this post


Link to post
Share on other sites

Какая среда?

Чем плох встроенный в среду вариант?

 

Например, в keil так:

1.jpg.347634fb4b3b000b6b91bdb2aa0cfc6d.jpg

Вполне удобно.

 

Share this post


Link to post
Share on other sites
2 minutes ago, Forger said:

Чем плох встроенный в среду вариант?

Тем, что его нет, очевидно! Мне лень заморачиваться с cmake. Да и все равно я собираю в командной строке, а не клавосочетанием в IDE! В отдельном терминале приятней выхлоп смотреть, нежели в маленьком окошке, которое IDE предоставляет.

2020.01.16_01:50:28.png

Edited by Eddy_Em

Share this post


Link to post
Share on other sites
2 minutes ago, Eddy_Em said:

 нежели в маленьком окошке, которое IDE предоставляет.

 

Это зависит от размера мониторов и их количества.

Если моник один, то мне очень удобен широкоформатный, привык и не могу работать на обычных. Никаких крохотных окон.

Мне лично гораздо удобнее исправлять ошибки, щелкая на них и среда открывает соотв. файл в соотв. месте.

Но вообще - это все вкусовщина ))

Share this post


Link to post
Share on other sites

Вкусовщина, конечно. Я вообще в случае, когда надо удаленно немножко кода поправить, запускаю mcedit или nano, чтобы не париться с монтированием по sshfs и запуском IDE… Да и qt-creator в качестве IDE я совсем недавно начал использовать. До этого много лет на geany сидел, а он как бы и не IDE вовсе…

Share this post


Link to post
Share on other sites
7 minutes ago, Eddy_Em said:

Да и qt-creator в качестве IDE я совсем недавно начал использовать. До этого много лет на geany сидел, а он как бы и не IDE вовсе…

Ну надо же, а я так на geany и сижу (причем специально на каком-то древнем, ибо вид свежего меня оскорбляет). А qt-creator тормознут...

Share this post


Link to post
Share on other sites
On 1/12/2020 at 7:52 PM, haker_fox said:

Уже не впервые слышу подобные хвалебные речи в адрес латекса... Но как это оценить? Может быть подскажете, где можно глянуть на пример одной и той же презентации, выполненной в разных инструментах?

IEEE, SPIE предлагают одновременно шаблоны для статей в формате MS Word и стилевые файлы для LaTeX. Там же есть примеры с выходными файлами в формате pdf. При наличии математических формул (не очень простых) явно LaTeX выигрывает. Некоторые издательства (например) и конференции (ещё пример) требуют оформление в LaTeX'е.  Сфер примения много.

Сделать оформление не по правилам используя MS Word (LibreOffice) значительно проще (стиль абзаца использовали неверно), чем используя LaTeX (Вы только смысловую часть делаете, оформление текста не Ваше дело). Некоторым не нравится, что нет явного WYSIWYG (но да, есть специальные среды с этим режимом).

LaTeX (TeX) является кроссплатформенным (Win, Mac, Linux, Dos) и поэтому перенос файлов не представляет проблемы.

Quote

И прочитав пару-тройку раз книжку "Все про ТеХ" Дональда нашего Кнута, можно самому всякие штуки крутые выворачивать.

Не читайте эту книгу не познакомившись с LaTeX (TeX) по другим книгам! Её действительно надо читать не раз, Eddy_Em здесь абсолютно прав.

 

Share this post


Link to post
Share on other sites

Извиняюсь, что поздно написал, информация на этом форуме оказалась весьма полезной! Огромное спасибо хочу Сказать https://electronix.ru/forum/index.php?app=core&module=members&controller=profile&id=4140 ( Владиславу) за помощь в освоении создания проекта в Keil на assembler! Я получил доп баллы в рейтинг , а затем смог сдать экзамен на отлично!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now