Файл .elf не имеет разделовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Файл .elf не имеет разделов

Сообщение Anonymous »

В настоящее время я пытаюсь воссоздать пример с миганием, используя низкоуровневый C++, используя vscode для платы STM32F446RE Nucleo-64. Я взял компоновщик и код запуска из примера кода stm32 dwelch67 и изменил его в соответствии со своими потребностями. Ниже показаны скрипт компоновщика, код запуска и файл makefile:
Скрипт компоновщика:

Код: Выделить всё

MEMORY
{
rom : ORIGIN = 0x08000000, LENGTH = 512K
ram : ORIGIN = 0x20000000, LENGTH = 128K
}
SECTIONS
{
.text : {
*(.text*)
*(.rodata*)
} > rom

.data : {
_data = .;
*(.data*)
*(.ramtext*)
} > rom

.bss  : {
*(.bss*)
} > ram
}
Startup.s:
.cpu cortex-m0
.thumb

Код: Выделить всё

.thumb_func
.global _start
_start:
.word 0x20001000
.word reset
.word hang
.word hang

.word hang
.word hang
.word hang
.word hang

.word hang
.word hang
.word hang
.word hang

.word hang
.word hang
.word hang
.word hang

.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang:   b .

.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr

.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
Makefile:

Код: Выделить всё

{ifneq ($(V),1)
Q       := @
NULL        := 2>/dev/null
endif

#####################################################################################
# Executables
PREFIX      ?= arm-none-eabi-

CC      := $(PREFIX)gcc
CXX     := $(PREFIX)g++
LD      := $(PREFIX)gcc
AR      := $(PREFIX)ar
AS      := $(PREFIX)as
OBJCOPY     := $(PREFIX)objcopy
OBJDUMP     := $(PREFIX)objdump
GDB     := $(PREFIX)gdb
STFLASH     = $(shell which st-flash)
OPT     := -Os
DEBUG       := -ggdb3
CSTD        ?= -std=c99
#####################################################################################
# C flags

TGT_CFLAGS  += $(OPT) $(CSTD) $(DEBUG)
TGT_CFLAGS  += $(ARCH_FLAGS)
TGT_CFLAGS  += -Wextra -Wshadow -Wimplicit-function-declaration
TGT_CFLAGS  += -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes
TGT_CFLAGS  += -fno-common -ffunction-sections -fdata-sections

###############################################################################
# C++ flags

TGT_CXXFLAGS    += $(OPT) $(CXXSTD) $(DEBUG)
TGT_CXXFLAGS    += $(ARCH_FLAGS)
TGT_CXXFLAGS    += -Wextra -Wshadow -Wredundant-decls  -Weffc++
TGT_CXXFLAGS    += -fno-common -ffunction-sections -fdata-sections

###############################################################################
# C & C++ preprocessor common flags

TGT_CPPFLAGS    += -MD
TGT_CPPFLAGS    += -Wall -Wundef
TGT_CPPFLAGS    += $(DEFS)

###############################################################################
# Linker flags

TGT_LDFLAGS     += --static -nostartfiles
TGT_LDFLAGS     += -T$(LDSCRIPT)
TGT_LDFLAGS     += $(ARCH_FLAGS) $(DEBUG)
TGT_LDFLAGS     += -Wl,-Map=$(*).map -Wl,--cref
TGT_LDFLAGS     += -Wl,--gc-sections
ifeq ($(V),99)
TGT_LDFLAGS     += -Wl,--print-gc-sections
endif

###############################################################################
# Directories, Linkerscript, Object files, Includes
SRC_DIR             = ./src
INC_DIR             = ./inc
START_DIR           =./startup

LDSCRIPT    = linkerscript.ld
AFILES      += startup.S

OBJS        += $(SRC_DIR)/$(BINARY).o
OBJS        += $(START_DIR)/$(AFILES:%.S=%.o)

DEFS        += -I$(INC_DIR)

BINARY      = firmware

# Used libraries
LDLIBS      += -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group
#####################################################################################

all: elf bin

elf: $(BINARY).elf
bin: $(BINARY).bin
hex: $(BINARY).hex
srec: $(BINARY).srec
list: $(BINARY).list
GENERATED_BINARIES=$(BINARY).elf $(BINARY).bin $(BINARY).hex $(BINARY).srec $(BINARY).list $(BINARY).map

images: $(BINARY).images
flash: $(BINARY).flash
print-%:
@echo $*=$($*)

%.images: %.bin %.hex %.srec %.list %.map
@#printf "*** $* images generated ***\n"

%.bin: %.elf
@#printf "  OBJCOPY $(*).bin\n"
$(Q)$(OBJCOPY) -Obinary $(*).elf $(*).bin

%.hex: %.elf
@#printf "  OBJCOPY $(*).hex\n"
$(Q)$(OBJCOPY) -Oihex $(*).elf $(*).hex

%.srec: %.elf
@#printf "  OBJCOPY $(*).srec\n"
$(Q)$(OBJCOPY) -Osrec $(*).elf $(*).srec

%.list: %.elf
@#printf "  OBJDUMP $(*).list\n"
$(Q)$(OBJDUMP) -S $(*).elf >  $(*).list

%.elf %.map: $(OBJS)
@#printf "  LD      $(*).elf\n"
$(Q)$(LD) $(TGT_LDFLAGS) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $(*).elf

%.o: %.c
@#printf "  CC      $(*).c\n"
$(Q)$(CC) $(TGT_CFLAGS) $(CFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $(*).o -c $(*).c

%.o: %.S
@#printf "  CC      $(*).S\n"
$(Q)$(CC) $(TGT_CFLAGS) $(CFLAGS) -o $(*).o -c $(*).S

%.o: %.cxx
@#printf "  CXX     $(*).cxx\n"
$(Q)$(CXX) $(TGT_CXXFLAGS) $(CXXFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $(*).o -c $(*).cxx

%.o: %.cpp
@#printf "  CXX     $(*).cpp\n"
$(Q)$(CXX) $(TGT_CXXFLAGS) $(CXXFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $(*).o -c $(*).cpp

clean:
@#printf "  CLEAN\n"
$(Q)$(RM) $(GENERATED_BINARIES) generated.* $(OBJS) $(OBJS:%.o=%.d)
Когда я пытаюсь собрать проект с помощью Arm-none-eabi, я получаю следующую ошибку:

Код: Выделить всё

C:\arm-none-eabi\bin\arm-none-eabi-objcopy.exe: error: the input file 'firmware.elf' has no sections
Я пытался использовать STM32CubeMX для создания проекта make-файла, из которого я взял файлы запуска и компоновщика, но этот метод заставил меня добавить кучу других файлов, которые я не знал где чтобы найти. Очень признателен за помощь!

Подробнее здесь: https://stackoverflow.com/questions/793 ... o-sections
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»