LINUX.ORG.RU

Сообщения r44083

 

Помогите настроить openocd

Пытаюсь прошить STM32F100RB (на плате STM32VLDISCOVERY) с помощью openocd в Linux (Mint). В windows нормально работает (после замены драйвера c USBSTOR на WinUSB с помощью Zadig). В Linux получаю вот такую ошибку:

pc0@pc0-System-Product-Name ~/1-internet/STM32-test2-FatFs $ make program
- programming with openocd...
openocd -c "source [find interface/stlink-v1.cfg]" -c "transport select hla_swd" -c "source [find target/stm32f1x.cfg]" -c "program ./out/hex/STM32-test2-FatFs.elf" -c "verify_image ./out/hex/STM32-test2-FatFs.elf" -c "reset run" -c "exit"
Open On-Chip Debugger 0.9.0 (2015-11-28-18:44)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
hla_swd
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
in procedure 'program' 
in procedure 'init' called at file "embedded:startup.tcl", line 473
in procedure 'ocd_bouncer'
** OpenOCD init failed **
shutdown command invoked

make: *** [program] Ошибка 1

Файла startup.tcl в папке со скриптами openocd нет.

Для того, что бы openocd работал с ST-Link, я также положил файл «49-stlinkv1.rules» в папку /etc/udev/rules.d. Вот содержание этого файла:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", \
    MODE:="0666", \
    SYMLINK+="stlinkv1_%n"

Ниже привожу отрывок из makefile, с параметрами openocd:

# Настройка openocd для работы с интерфейсом и контроллером:
OPENOCD_PARAMS = -c "source [find interface/stlink-v1.cfg]"
OPENOCD_PARAMS += -c "transport select hla_swd"
OPENOCD_PARAMS += -c "source [find target/stm32f1x.cfg]"

# Настройка openocd для прошивки контроллера:
OPENOCD_PARAMS_LOAD = $(OPENOCD_PARAMS)
OPENOCD_PARAMS_LOAD += -c "program $(ELF)"
#OPENOCD_PARAMS_LOAD += -c "flash write_image $(ELF)"
OPENOCD_PARAMS_LOAD += -c "verify_image $(ELF)"
OPENOCD_PARAMS_LOAD += -c "reset run"
OPENOCD_PARAMS_LOAD += -c "exit"
...
program:
	@echo - programming with $(FLASHER)...
ifeq ($(FLASHER),openocd)
	$(FLASHER) $(OPENOCD_PARAMS_LOAD)
endif
В чём может быть проблема?

 , ,

r44083 ()

Во время линковки для STM32F100RB возникает непонятная ошибка

Использую arm-none-eabi-, make, clang, Sublime Text. До недавнего времени проект нормально собирался, но вот я решил добавить в него свою библиотеку (файлы init.cpp, init.h, spi.cpp, spi.h). Положил эти 4 файла в папку user-code в проекте, эта папка прописана в makefile для флага -I, а также для создания объектных файлов. Самое интересное, когда я просто подключаю в главном файле (#include «init.h» #include «spi.h»), то проект нормально собирается, а когда в main() пытаюсь использовать какую-нибудь функцию из этих библиотек, то в лог построения проекта попадает вот такая ошибка:

--- linking...
arm-none-eabi-gcc .\out\obj/system_stm32f10x.o .\out\obj/core_cm3.o .\out\obj/stm32f10x_exti.o .\out\obj/stm32f10x_gpio.o .\out\obj/stm32f10x_spi.o .\out\obj/misc.o .\out\obj/stm32f10x_rcc.o .\out\obj/main.o .\out\obj/spi.o .\out\obj/init.o .\out\obj/startup_stm32f10x_md_vl.o -mcpu=cortex-m3 -mthumb -Wl,-Map=".\out\lst\ARM-testENC28J60.map",--cref -Wl,--gc-sections -TSTM32F10X_MD_VL.ld -nostartfiles -o .\out\hex\ARM-testENC28J60.elf
c:/program files (x86)/gnu tools arm embedded/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7-m\libgcc.a(unwind-arm.o): In function `get_eit_entry':
unwind-arm.c:(.text+0x154): undefined reference to `__exidx_start'
unwind-arm.c:(.text+0x158): undefined reference to `__exidx_end'
c:/program files (x86)/gnu tools arm embedded/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-abort.o): In function `abort':
abort.c:(.text.abort+0xa): undefined reference to `_exit'
c:/program files (x86)/gnu tools arm embedded/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-signalr.o): In function `_kill_r':
signalr.c:(.text._kill_r+0xe): undefined reference to `_kill'
c:/program files (x86)/gnu tools arm embedded/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-signalr.o): In function `_getpid_r':
signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [.\out\hex\ARM-testENC28J60.elf] Error 1
makefile:252: recipe for target '.\out\hex\ARM-testENC28J60.elf' failed
make[1]: Leaving directory 'D:/4 electronics/soft/Sublime Text projects/ARM-testENC28J60'
makefile:203: recipe for target 'all' failed
make: *** [all] Error 2
[Finished in 1.8s with exit code 2]

Микроконтроллер - STM32F100RB.

Сборка SublimeText (портабельная, со всеми программами) лежит тут: https://copy.com/kJIDxc8rIJenEWm4

Как преодолеть такую ошибку?

Весь проект лежит на гитхаб тут: https://github.com/r44083/ARM-testENC28J60

 , , , ,

r44083 ()

Как передать в arm-none-eabi-gcc файл .s что бы проект успешно скомпилировался?

Пытаюсь построить проект в SublimeText для микроконтроллера STM32F100x. При построении в логе копиляции появляется ошибка при компилировании файла startup_stm32f10x_md_vl.s (стартапа):

--- assembling startup_stm32f10x_md_vl.s...
arm-none-eabi-as -c -mcpu=cortex-m3 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard  -I "." -DSTM32F100Rx -DVER_MAJOR=0 -DVER_MINOR=1 -DHSE_VALUE=8000000 -Wa,-adhlns=./startup_stm32f10x_md_vl.lst -x assembler-with-cpp -o startup_stm32f10x_md_vl.o startup_stm32f10x_md_vl.s
arm-none-eabi-as: unrecognized option `-STM32F100Rx'
makefile:322: recipe for target 'startup_stm32f10x_md_vl.o' failed
make[1]: *** [startup_stm32f10x_md_vl.o] Error 1
На сколько я понимаю, то это происходит потому что arm-none-eabi-as не понимает флага "-DSTM32F100Rx" (указание для какого микроконтроллера компилируется код). Если вместо arm-none-eabi-as запускать arm-none-eabi-gcc с флагом "-x assembler-with-cpp", то при построении, arm-none-eabi-gcc начинает ругаться, что он нашел кучу ошибок в файле startup_stm32f10x_md_vl.s (вообщем что он не понимает инструкции и комментарии в ассмеблере).

В качестве редактора кода используется SublimeText, в качестве компилятора - arm-none-eabi-, в качестве линтера кода - LLVM Clang, и одноименная утилита make для построения проекта (всё это собранное лежит в архиве ниже, кнопка на скачивание будет в правом верхнем углу после перехода по ссылке).

«Sublime for ARM» (в этом архиве всё «портабельное»)

Достаточно извлечь папку из архива и просто запустить .bat файл «батник для запуска sublime for ARM (с автопрописыванием в переменную PATH).bat».

Вот ссылка на проект: «проект test1»

Далее в меню SublimeText: Project->Open Project->(переходим в папку с проектом text1 и открываем файл «test1.sublime-project». Нажимаем Ctrl+B - и проект начнет сборку. Прошу помощи и не знаю куда копать =(

 , , ,

r44083 ()

RSS подписка на новые темы