CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

STM32: Урок 1 - Настраиваем IDE

Сегодня я расскажу, как подготовить рабочую среду для разработки под ARM Cortex-M3 микроконтроллеры STM32F10x. Среда должна в себя включать компилятор, редактор кода, отладчик, прошивалку микроконтроллера, а также должна быть удобна для использования. Ну и должна дружить с платами STM32VLDiscovery и STM32L-Discovery, само собой. Выбор IDE для ARM довольно большой, и можно их условно разделить на две группы — коммерческие и некоммерческие.

Коммерческие:Некоммерческие:Наверняка есть ещё, ведь IDE для ARM не сделал, похоже, только ленивый. Коммерческие IDE обычно довольно хороши, и большая их часть основана на Eclipse, но у всех них есть общие недостатки: они стоят денег (вот это новость!), их бесплатные версии имеют ограничения по объёму кода, не все поддерживают плату STM32VLDiscovery, а версии для Linux почти никто не делает (есть пара 30-дневных trial-версий). А в популярной, не знаю, почему, среде Keil ещё и редактор кода, судя по его виду и удобству, написан во времена Windows 95.



У кого много денег (или начальство на работе купило IDE), и кто не собирается слезать с Windows — спокойно берите эти жлобские поделки (: и мучайтесь/радуйтесь с ними, а я, не будучи буржуем de facto, предлагаю обратить внимание на бесплатные среды разработки. Конечно же, у них тоже есть и плюсы, и минусы — о них я расскажу в первую очередь.

Конструктор самоделкина

 [Eclipse] Офигенный редактор кода: подсветка синтаксиса, авто-дополнение и авто-завершение кода, всплывающие подсказки, рефакторинг (легко заменить название функции/переменной во всём проекте сразу).
 [Eclipse/ARM Plugin] Интеграция с отладчиком: можно устанавливать точки останова в программе (breakpoints), выполнять программу пошагово, менять содержимое регистров и памяти, смотреть ассемблерный листинг… Всё, как положено.
 [CodeBench] Сочетание компилятора GCC и отладчика GDB, а также других программ из этой сборки, даёт компактный, быстрый код и отличные возможности отладки и анализа кода.
 Всё компоненты «конструктора» есть под Windows и Linux. Думаю, вполне реально собрать и для Mac OS X, если сильно захотеть.
 Не заточен под какие-либо определённые семейства МК. В будущем можно будет писать хоть под полноценные процы вроде Cortex-A9.
 Большой объём работы при первоначальной настройке. Большая часть статьи будет посвящена этому, но для ленивых в конце статьи ссылки на готовые сборки IDE (:

CoIDE

Судя по всему, сделана китайцами, но на удивление качественно.
 Эта среда основана на Eclipse, так что имеет все плюсы оной.
 Создавать проекты очень легко, пользуясь мастером — всего в несколько шагов.
 Добавление новых библиотек в проект реализовано проще некуда.
 Настроить свойства проекта и отладки — пару раз клацнуть мышкой.
 Скачал, установил, пользуешься. Никакой возни с настройкой.
 Нет версий для Linux или MacOS (пишут, для Linux что когда-нибудь сделают).
 Пути к файлам в проекте забиты как абсолютные, а не относительные, так что простой перенос папки с проектом в другое место не прокатит — проект не соберётся.
 Тонкие настройки Eclipse спрятаны так глубоко, что для их поиска может понадобиться помощь проктолога.

Такие дела, коллеги. Ну что ж, сделаем так: по умолчанию будем использовать «конструктор», а если у кого не заработает — ставьте CoIDE. Для обоих вариантов я опишу настройку и создание проекта.

Конструктор: покрасноглазим

Внимание: потребуются навыки более чем продвинутого пользователя. У кого их нет, ну или времени и/или желания собирать всё это — в конце статьи вас ждут ссылки на готовые сборки конструктора для Windows и Linux, можете переходить к разделу «Создание скелетного проекта» (пользователям Windows ещё нужно прочитать про установку драйвера WinUSB ниже). Остальным советую поставить на воспроизведение что-то вроде плейлиста боссовских тем из игры Painkiller или другую спокойную добрую музыку. Кто доберётся до финиша без мухляжа, получит стопицот очков опыта.

Для начала объясню, почему конструктор состоит именно из таких деталей, как написано выше:
  • Чтобы в принципе разрабатывать софт для каких-либо МК, нам нужен компилятор и отладчик. Это Sourcery CodeBench Lite Edition — компилятор GCC, отладчик GDB и ещё несколько полезных утилит для работы с исполняемыми файлами.
  • Наши бесценные программы нужно как-то заливать на МК, да и сам GDB ничего не знает о внутренностях конкретных МК. Проект stlink служит посредником между GDB и отладчиком ST-Link, установленным на плате STM32VLDiscovery, а также содержит утилиту для прошивки.
  • Нужна приличная IDE, на дворе 2011 год, как-никак — не в Notepad/vim же код писать и отлаживать? Eclipse — отличная IDE, но настраивать её с нуля для разработки под ARM не очень весело, да и специфика тут своя, а для этого есть ARM Plugin для Eclipse.
Далее, для сборки и тестирования софта нам нужно будет работать в консоли в Unix-окружении. В Linux для этого всё изначально есть, а в Windows нужно установить MinGW с MSYS, после чего запустить MSYS.

Sourcery CodeBench Lite Edition

Итак, начнём с того, без чего процесс сборки может потерять всякий смысл — это набор софта для компиляции и отладки наших будущих программ, и это в данном случае Sourcery CodeBench Lite Edition (бывшая Sourcery G++ Lite). В нём для нас заботливо собраны (и протестированы) GCC, GDB и прочие стандартные утилиты GNU для работы с кодом и исполняемыми файлами. В принципе, всё это можно собрать и самому из исходников, но это два часа возни и ожидания на ПК средней мощности, а за нас всё сделали задаром.

Скачать CodeBench можно на сайте компании-разработчика как в виде инсталлятора (рекомендую), так и простым архивом, но если у вас Arch Linux, то можно поставить пакет из AUR:
yaourt -S aur/arm-2011-arm-none-eabi
После установки проверьте, что компилятор запускается и работает, откомпилировав незатейливый исходник на C, назвав его, скажем, x.c:
int main()
{
}
командой
arm-none-eabi-gcc x.c
В результате вы увидите сообщение типа:
/usr/bin/../lib/gcc/arm-none-eabi/4.5.2/../../../../arm-none-eabi/bin/ld:
warning: cannot find entry symbol _start; defaulting to 00008018
Тут компилятор всего лишь жалуется, что не определена точка входа, ведь для МК недостаточно просто написать функцию main(), чтобы она начала выполняться. Впрочем, сейчас это неважно.

stlink

Далее нам нужно средство отладки и прошивки для нашей платы. На STM32VLDiscovery установлен отладчик ST-Link версии 1, а на STM32L-Discovery — ST-Link 2, которые поддерживаются в нескольких IDE и утилитах для прошивки МК, но, как это обычно бывает, только под Windows. Но в мире есть добрые люди! Один такой добрый человек — Fabien Le Mentec — относительно недавно при поддержке компании ST Microelectronics начал работу по поддержке ST-Link в Linux, и его проект stlink содержит GDB-сервер и утилиту для прошивки. Если кто не в курсе: отладчик GDB умеет отлаживать удалённо, подключаясь по сети (по TCP/IP) к программе-серверу, которая работает с реальным железом. Разработчик Karl Palsson допилил поддержку ST-Link v1 в своём форке, ну а я портировал этот проект под Windows, заодно поправив косяки с работой по сети и добавив поддержку рестарта при отключении клиента.

Для сборки stlink необходима библиотека libusb-1.0 с заголовочными файлами, которую в Linux можно установить из репозиториев:
# Ubuntu
sudo apt-get install libusb-1.0-0-dev

# Arch Linux
sudo pacman -S libusb
Версию libusb-1.0.8 для Windows можно скачать с нашего сервера, установить её можно так:
tar jxvf libusb-1.0.8-windows.tar.bz2
cd libusb-1.0.8
./configure --prefix=/mingw
make
make install
Если у вас ещё не установлена система контроля версий Git, то самое время её установить — скачав с официального сайта или, в Linux, через пакетный менеджер:
# Ubuntu
sudo apt-get install git

# Arch Linux
sudo pacman -S git
Перейдите в папку, где вы хотите держать stlink (у меня это /home/burjui/devel в Linux и c:\tmp в Windows), клонируйте stlink из репозитория, перейдите в папку проекта, скомпилируйте проект и установите GDB-сервер:
# Windows
cd c:	mp
git clone git://github.com/burjui/stlink.git -b server-restart
cd stlink
make CC=gcc CONFIG_WIN32=1
cp ./gdbserver/st-util.exe /mingw/bin

# Linux
cd /home/burjui/devel
git clone git://github.com/burjui/stlink.git -b server-restart
cd stlink
make
sudo ln -s /home/burjui/devel/stlink/gdbserver/st-util /usr/local/bin
В Linux вам ещё потребуется сделать пару действий, чтобы устройство корректно определялось:
  • Нужны права на запись в устройство ST-Link для обычного пользователя:
    sudo cp 49-stlinkv* /etc/udev/rules.d/
    sudo udevadm control --reload-rules
    Демон udevd перечитает правила из /etc/udev/rules.d/ и при подключении платы создаст в /dev файл устройства с осмысленным именем типа stlinkv1_4 и с нужными правами.
  • ST-Link версии 1 использует кривую эмуляцию SCSI, чтобы притворяться флешкой, а нам это — лишняя палка в колесо. Устраняем:
    sudo cp stlink_v1.modprobe.conf /etc/modprobe.d
    sudo modprobe -r usb-storage && sudo modprobe usb-storage
    Драйвер usb-storage перезагрузился, а modprobe, прочитав /etc/modprobe.d/stlink_v1.modprobe.conf, попросила драйвер не работать с ST-Link. Драйвер на просьбу отреагирует отладочным сообщением ядра:
    $ dmesg | tail -n 2
    [82914.808449] usb 6-4: new full speed USB device number 4 using ohci_hcd
    [82914.981001] usb-storage 6-4:1.0: device ignored
А в Windows потребуется немного шаманства, чтобы установить драйвер WinUSB, необходимый для работы libusb в этой ОС. Подключите плату STM32VLDiscovery, далее скачайте программу Zadig и запустите её с правами администратора. В меню Options поставьте галочку List All Devices:



Выберите из выпадающего списка устройство USB Mass Storage Device с USB ID, равным 0483 3744 (ST-Link) или 0483 3748 (ST-Link 2), и нажмите кнопку Replace Driver:



Программа предупредит, что это опасно, но мы не боимся опасностей и жмём Yes:



Если ничего «опасного» не произойдёт, можно будет порадоваться успешной установке:



Осталось переподключить плату — и можно испытывать GDB-сервер и в Windows, и в Linux. Наберите команду:
st-util -1
Ключ "-1" указывает, что нам нужно подключить ST-Link именно версии 1. Если у вас STM32L-Discovery, на которой ST-Link 2, то этот ключ указывать не нужно. Если всё пройдёт успешно, вывод программы будет выглядеть так:
2011-11-23T18:29:57 INFO src/stlink-common.c: Loading device parameters....
2011-11-23T18:29:57 INFO src/stlink-common.c: Device connected is: F1 Medium-density Value Line device
2011-11-23T18:29:57 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB),
Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2011-11-23T18:29:57 INFO src/stlink-sg.c: Successfully opened a stlink v1 debugger
Chip ID is 10016420, Core ID is  1ba01477.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
Сервер запущен, попробуем к нему подключиться. В другом окне с консолью запустите GDB для ARM:
arm-none-eabi-gdb
В появившемся приглашении наберите команду:
target extended-remote localhost:4242
# GDB понимает и сокращения:
# tar ext :4242
В GDB результат будет выглядеть так:
(gdb) target extended-remote localhost:4242
Remote debugging using localhost:4242
0x0800061c in ?? ()
(gdb)
В st-util:
GDB connected. -- ключевой момент!
recv: qSupported:multiprocess+;qRelocInsn+
query: Supported;multiprocess+;qRelocInsn+
send: PacketSize=3fff;qXfer:memory-map:read+
recv: !
send: OK
recv: Hg0
...
Чтобы в будущем не набирать каждый раз в консоли 'st-util -1' для запуска GDB-сервера, советую сделать ярлык с аргументом "-1" после пути к .exe'шнику (или shell script в Linux).

Eclipse + ARM plugin

Вы ещё живы? Ничего, осталось совсем немного.

Так как ARM Plugin поддерживает Eclipse версии не старше, чем Helios (3.6.x), то её и поставим с официального сайта, взяв самую свежую версию на данный момент — 3.6.2 (Helios SR2). Нам нужна Eclipse IDE for C/C++ Developers, которая также широко известна по более короткому названию — Eclipse CDT. Качайте версию под свою ОС и распаковывайте, куда захочется. Мне захотелось в /home/burjui/apps/eclipse, например.

Запускайте Eclipse и выбирайте пункт меню Help→Install New Software... Не слишком очевидно, не правда ли? Далее действуем в соответствии с инструкциями по установке плагина, а именно жмём кнопку Add и в появившемся окне Add Repository вписываем имя плагина — например, ARM Plugin. Качаем zip-архив с плагином (нам нужна именно версия 0.5.3, более свежая требует Eclipse 3.7.x, а там поломали отладку), жмём кнопку Archive и выбираем скачанный архив, после чего жмём ОК.



Eclipse скачает с сервера информацию о доступных пакетах и покажет нам доступный к установке плагин. Ставим напротив него галочку и жмём Next:



После этого мы увидим типичное малоинформативное окно в стиле «просто нажми Next», а следом — лицензионное соглашение, с которым мы, разумеется, уже согласны — просто жмём Finish:





После этого процесс установки, наконец, начнётся:



Но посреди него нас попросят подтвердить, что мы абсолютно безбашенные и действительно хотим установить софт без цифровой подписи:



Когда установка завершится, Eclipse предложит перезапуск:



Ну вот, теперь у нас есть полноценная среда разработки для ARM.

Создаём скелетный проект

Поди, уже расслабились? Самое интересное — впереди.



Опять же, для ленивых в конце статьи есть ссылка на архив с проектом, а самые смелые могут продолжить сеанс интеллектуального мазохизма за компанию.

В Eclipse на стартовой странице выбираем Workbench, в меню выбираем пункт File→New→C Project. В появившемся окне слева выбираем ARM Cross Target Application/Empty Project, справа — Sourcery G++ Lite:



Проект я назвал так для STM32VLDiscovery, а для STM32L-Discovery я бы назвал его stm32ld_template.

STM32VLDiscovery

Для работы с этой платой скачаем библиотеку STM32F10x Standard Peripheral Library с сайта ST (копия у нас). Последняя на данный момент версия для STM32F10x — 3.5.0, так что после распаковки у нас будет папка STM32F10x_StdPeriph_Lib_V3.5.0. Создайте в папке с проектом подпапки CMSIS и StdPeripheralDriver, скопируйте в них указанные файлы и папки из STM32F10x_StdPeriph_Lib_V3.5.0:

В CMSIS:
  • core_cm3.h и core_cm3.c
    из Libraries/CMSIS/CM3/CoreSupport
  • stm32f10x.h, system_stm32f10x.c и system_stm32f10x.h
    из Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
  • startup_stm32f10x_md_vl.s
    из Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7
    При этом расширение имени файла нужно сменить с ‘.s’ на ‘.S’ — это нужно, чтобы Eclipse понял, что это файл с кодом на ассемблере.
В StdPeripheralDriver:
  • Папки inc и src из Libraries/STM32F10x_StdPeriph_Driver
Также в CMSIS нужно создать файл stm32f10x_conf.h следующего содержания:
#ifndef STM32F10X_CONF_H_
#define STM32F10X_CONF_H_
/* ------------------- */

#ifndef USE_FULL_ASSERT
 #define assert_param(x)
#endif

/* ------------------- */
#endif
В папке с проектом создайте файл main.c с минимальным кодом бесконечного цикла:
#include <stm32f10x.h>

int main()
{
 do __NOP(); while (1);
}
Туда же закиньте файл stm32f100rb.ld. Щёлкните правой кнопкой по проекту в Eclipse, и в контекстном меню нажмите Refresh — тогда Eclipse увидит новые файлы и папки и добавит их в проект.

STM32L-Discovery

Для этой платы последовательность действий такая же, только будут меняться имена папок и файлов, а местами и содержимое.

Так как на этой плате установлен микроконтроллер STM32L152RBT6, то и качать мы будем STM32L1XX Standard Peripheral Library (копия). Распаковываем архив, получаем папку STM32L1xx_StdPeriph_Lib_V1.0.0 и копируем из неё:

В CMSIS:
  • core_cm3.h и core_cm3.c
    из Libraries/CMSIS/CM3/CoreSupport
  • stm32l1xx.h, system_stm32l1xx.h и system_stm32l1xx.с
    из Libraries/CMSIS/CM3/DeviceSupport/ST/STM32L1xx
  • startup_stm32l1xx_md.s
    из Libraries/CMSIS/CM3/DeviceSupport/ST/STM32L1xx/startup/gcc_ride7
    Не забываем сменить расширение имени файла с ‘.s’ на ‘.S’.
В StdPeripheralDriver:
  • Папки inc и src из Libraries/STM32L1xx_StdPeriph_Driver
В CMSIS нужно создать файл stm32l1xx_conf.h следующего содержания:
#ifndef STM32L1XX_CONF_H_
#define STM32L1XX_CONF_H_
/* ------------------- */

#ifndef USE_FULL_ASSERT
 #define assert_param(x)
#endif

/* ------------------- */
#endif
В папке с проектом создайте файл main.c с минимальным кодом бесконечного цикла:
#include <stm32l1xx.h>

int main()
{
  do __NOP(); while (1);
}
Туда же закиньте файл stm32l152rb.ld. Щёлкните правой кнопкой по проекту в Eclipse, и в контекстном меню нажмите Refresh — тогда Eclipse увидит новые файлы и папки и добавит их в проект.

Общая настройка

Настроим проект так, чтобы всё это компилировалось, заливалось на МК и отлаживалось. Выбираем в меню пункт Project→Properties, в окне в левой панели выбираем раздел C/C++ Build→Settings, справа вверху из списка Configuration выбираем пункт [ All configurations ] и начинаем шерстить по подразделам настроек.

Target Processor

Выбираем Processor — cortex-m3, ставим галочку Thumb (-mthumb).

C Compiler/Preprocessor

Добавим два определения для препроцессора языка C, которые необходимы для библиотек в StdPeripheralDriver: USE_STDPERIPH_DRIVER, а также STM32F10X_MD_VL или STM32L1XX_MD для STM32VLDiscovery и STM32L-Discovery, соответственно. Щёлкаем плюсик и вводим первое значение, второе — так же.



C Compiler/Directories

Здесь укажем, в каких папках проекта у нас лежат заголовочные файлы библиотек. Жмём плюсик и, чтобы пути к папкам считались относительно папки с проектом, жмём кнопку Workspace... и выбираем в проекте папку CMSIS:



Аналогично добавляем папку StdPeripheralDriver/inc.

C Compiler/Optimization

Здесь ставим галочки:
  • Function sections (-ffunction-sections)
  • Data sections (-fdata-sections)




C Linker/General

В поле Script file (-T) указываем путь к скрипту stm32f100rb.ld или stm32f152rb.ld для STM32VLDiscovery и STM32L-Discovery, соответственно — желательно, в таком же формате, как и папки в предыдущем случае, но без кавычек.

Ставим галочки:
  • Do not use standart start files (-nostartfiles)
  • Remove unused sections (-Xlinker --gc-sections)


Здесь всё, жмём ОК.
Протестируем сборку проекта. Выбираем в меню отладочную сборку — Project→Build Configurations→Debug, запускаем сборку — Project→Build Project.



Если после окончания сборки в нижней панели на вкладке Problems ничего не написано, значит, сборка прошла успешно.

Теперь осталось только настроить отладчик. Создаём в папке проекта файл gdb_commands_debug следующего содержания:
tar ext :4242
load Debug/stm32vld_template.elf
и ещё один похожий — gdb_commands_release:
tar ext :4242
load Release/stm32vld_template.elf
Идём в Run→Debug Configurations..., правым кликом на разделе C/C++ Application вызываем меню, в котором выбираем пункт New. Настроим созданную конфигурацию.

Раздел Main:
  • Name: Debug
  • C/C++ Application: Debug/stm32vld_template.elf
  • Build Configuration: Debug
  • Выбираем опцию Enable auto build
Раздел Debugger, вкладка Main:
  • GDB debugger: arm-none-eabi-gdb
  • GDB command file: gdb_commands_debug


Жмём Apply. Полученная конфигурация будет у нас отладочной: после сборки проекта в прошивке будет много «лишнего» кода, который необходим для отладки, но заметно раздувает размер прошивки.

Аналогично создаём релизную конфигурацию, при сборке которой прошивка будет содержать только необходимый код:
  • Name: Release
  • C/C++ Application: Release/stm32vld_template.elf
  • Build Configuration: Release
  • Выбираем опцию Enable auto build
  • GDB debugger: arm-none-eabi-gdb
  • GDB command file: gdb_commands_release
И в приведённых выше файлах, и в настройке конфигураций вместо stm32vld_template нужно написать имя проекта, если оно у вас отличается.

Ну, теперь-то с настройкой покончено! Напоследок проверим, как работает отладка. Для этого запускаем GDB-сервер (‘st-util -1’) и в меню жмём Run->Debug Configurations..., выбираем конфигурацию Debug и жмём кнопку Debug внизу окна. Сервер должен отреагировать кучей сообщений в консоли:



Eclipse же в это время попросит разрешения открыть «отладочную перспективу». Рекомендую не только согласиться, но и поставить галочку, чтобы IDE больше не спрашивала, а сразу открывала перспективу. «Перспективами» в Eclipse называются наборы настроек расположения окон: положение, стиль (отдельно или табом в родительском окне) и пр. Отладочная перспектива, возникшая перед нами, отличается наличием окон, специфичных для отладки — Breakpoints, Registers, Disassembly, Debug, Memory и пр. Перечисленные мной окна наиболее информативны и полезны для отладки. Расположение окон по умолчанию ужасно, поэтому я при первой же отладке привёл всё вот к такому виду:



Если вы дошли до этого момента, и всё заработало — честь вам и хвала. Теперь понимаете, за что просят деньги разработчики коммерческих IDE?

А вот я ещё нет. Пойму, когда:
  • Будут версии для Linux.
  • Когда не надо будет писать письмо, чтобы узнать цену IDE (цена будет написана большими буквами на сайте, и чтоб не более 50$).
  • Когда будут поддерживаться все популярные программаторы-отладчики. Для этого всего-то нужно дописать поддержку трёх-четырёх в проект OpenOCD.
Ибо настроил я всю эту бодягу за денёк, а остальные две недели патчил stlink, писал статью и тестировал сборки, так что мне не понятно, за что тут платить бабло, если работы от силы на день, и то — без руководства (;

Но если вдруг у вас ничего не заработает даже в приготовленной мной сборке IDE, тогда следующий раздел — для вас.

CoIDE: как два пальца об асфальт

Ну, тут полная халява. Если провести аналогию с автомобилями, то CoIDE нельзя превратить в бульдозер или велосипед по выбору, зато тачка очень удобная — сел и поехал.

Идём на страничку IDE, качаем по ссылке «Download directly» внизу страницы, устанавливаем, куда душе угодно, и запускаем. При первом запуске CoIDE покажет мастер создания проекта, в котором нужно выбрать производителя нашего микроконтроллера — ST:



Далее появится список МК, в котором нужно выбрать STM32F100RB, установленный на плате STM32VLDisvovery:



Появится окно так называемого «репозитория», в котором установкой галочек можно выбирать подключаемые к проекту библиотеки. При этом учитываются зависимости между библиотеками, что не может не радовать. В следующем уроке мы будем разбирать порты ввода-вывода (GPIO) так что отметим соответствующую библиотеку. Так как мы ещё не создали ни одного проекта, CoIDE предложит нам создать новый, на что мы согласимся:



По умолчанию папка для проектов располагается в установочной папке CoIDE и называется «workspace». Вообще, это не очень хороший вариант, я бы советовал создать отдельную папку где-нибудь в «Моих документах» или ещё где, но это личное дело каждого, а я решил ничего не трогать — в своей виртуальной машине в VirtualBox я могу мусорить сколько душе угодно (:
Скелетный проект по причине, изложенной в начале статьи (про плюсы и минусы), создавать бессмысленно, так что сразу сделаем проект для следующей статьи и назовём его stm32vld_quickstart:



Вот и всё, первый проект создан, можно даже приступать к кодингу. Но приступим мы к нему в следующей статье, а пока можете глянуть на файловую структуру проекта:
  • cmsis — тут лежит стандартная библиотека CMSIS, общая для всех Cortex-M3
  • cmsis_boot — название странноватое, ведь там лежит не только код первичной инициализации микроконтроллера, но и пара заголовочных файлов от стандартной библиотеки STM32F10x
  • stm_lib — STM32F10x Standart Peripheral Library, уже описанная при настройке Eclipse
  • build.xml — настройки сборки проекта, руками туда лучше не лазить, да и CoIDE сама этот файл не открывает, а показывает окно настроек проекта.
  • link.ld и memory.ld — скрипты линковщика, как stm32f100rb.ld, упоминавшийся выше, только зачем-то разделённый на два файла.
  • main.c — исходный код, пока ещё девственно чистый


Слева, кроме структуры проекта, так же показывается модель МК, для которой мы пишем, и список подключенных библиотек — идеально для склеротиков вроде меня (:

Теперь нужно зайти в Debug→Debug Configuration… и установить параметры отладки/прошивки:
  • Adapter: ST-Link
  • Port: SWD
  • Max Clock(Hz): 1M (1 МГц)


Теперь выбираем в меню Debug→Debug и CoIDE скомпилирует проект, зальёт прошивку на МК и запустит отладку:



Вот и вся настройка. Конечно, за простоту приходится платить, но в данном случае не деньгами, а минусами, перечисленными в начале статьи. Ну да ладно, зато оно работает сразу (:

Ссылки и прочее

Итак, на данный момент я сделал и протестировал три сборки IDE — для 32- и 64-битной Linux 32-битной Windows, а для 64-битной Windows будет чуть позже — нужно собрать GCC и компанию.
Среду разработки я назвал, не мудрствуя лукаво — RoboCraft ARM IDE (для краткости просто RC-ARM), версия 0.1
Впрочем, это не официальное название, оно пока просто для удобства — чтобы не писать «ну вон та первая сборка IDE, которую я слепил во второй статье» (:
  • Linux: 32-bit (i686), 64-bit (x86_64)
    Распаковываем, заходим в консоли в папку с IDE, в подпапку stlink и выполняем команды (все флешки и прочие mass-storage устройства должны быть размонтированы):
    sudo cp 49-stlinkv* /etc/udev/rules.d/
    sudo udevadm control --reload-rules
    
    sudo cp stlink_v1.modprobe.conf /etc/modprobe.d
    sudo modprobe -r usb-storage && sudo modprobe usb-storage
    Также нужно установить libusb-1.0, 32-битную версию libncurses-5 (для GDB) и make.
    Всё, отныне больше ничего для настройки делать не придётся. В папке с IDE лежат два скрипта — start-ide.sh и start-stlink.sh. Первый устанавливает переменные окружения, чтобы Eclipse увидел GCC для ARM, и запускает Eclipse, в котором уже установлен ARM Plugin. Второй запускает утилиту stlink, которая должна быть запущена всё время, пока вы пользуетесь отладкой и прошивкой. Самые хитрые могут добавить вызов второго скрипта в первый и не париться (:
  • Windows: 32-bit (i686)
    Распаковываем и устанавливаем драйвер WinUSB по инструкции в статье. По идее, больше ничего делать не надо. В папке лежат два bat-файла, аналогичные упомянутым выше скриптам: start-ide.bat запускает Eclipse, start-stlink.bat — утилиту stlink. Библиотеку libusb-1.0 я положил в дистрибутив, т.к. в Windows нет пакетного менеджера и готового пакета для её установки. Так же включена утилита make, используемая Eclipse для сборки проектов.
Во всех сборках присутствует Java Runtime Environment 6 update 29, необходимая для работы Eclipse, и IDE подхватывает JRE автоматически.

Об ошибках в работе IDE прошу писать в соответствующую тему на форуме.

Все необходимые файлы для скелетного проекта:Распакуйте нужный архив и настройте проект, как написано в статье, только без копирования файлов. После настройки проект соберётся и в Windows, и в Linux, при условии, что IDE настроена правильно. При смене IDE на другую версию (точнее, ARM Toolchain) могут перестать собираться уже настроенные проекты из-за того, что ARM Plugin хранит в настройках проекта пути к стандартным заголовочным файлам компилятора — в этом случае нужно удалить файлы настроек из папки с проектом (их имена начинаются с точки) и выполнить настройку заново.

Чтобы добавить проект в свой workspace, в Eclipse выберите в меню Project→Import, а в появившемся окне выбрать General→Filesystem и указать распакованную из архива папку или сам архив. Как я уже упоминал, для CoIDE скелетный проект создавать смысла нет, т.к. в CoIDE создать проект не сложнее, чем подумать об этом, ну, и с копированием проектов в ней проблемы.

Для тех, кто решил когда-нибудь потом приготовить IDE по этому рецепту, привожу список ингредиентов:
  • Eclipse 3.6.2 (Helios SR2)
    Это последняя стабильная версия Eclipse на данный момент.
  • Java Runtime Environment 6u29
    По ссылке доступна самая свежая версия JRE, на данный момент это 6u29. Oracle уверяет, что последующие версии JRE будут совместимы с текущей — ну что ж, поверим на слово (как будто выбор есть).
  • GNU ARM Eclipse Plugin 0.5.3
    Нужна именно эта версия, т.к. более поздние уже требуют Eclipse 3.7.x, а там поломали отладку. Ну или что-то я не так делал, хотя и то же самое, что для Eclipse 3.6. На всякий случай сохранил в укромном месте (:
  • Sourcery CodeBench Lite Edition 2011.03-42, arm-none-eabi
    Пойдёт, по-хорошему, любая другая правильная сборка GCC + GDB + binutils для ARM — например, Yagarto или вообще собранная из исходников собственноручно. Лишь бы работала правильно.
  • stlink на GitHub, ветка server-restart
    Забирать так:
    git clone git://github.com/burjui/stlink.git -b server-restart
    Сборки:На данный момент нужен именно мой репозиторий, а не оригинал, и именно ветка server-restart — в ней есть патчи, позволяющие утилите работать непрерывно, а не завершаться после каждого дисконнекта. В будущем, когда мои патчи попадут в основную ветку, я обновлю пост.
    Сейчас утилита работает довольно медленно — прошивает всего около 500 байт в секунду, но это пока не начали работу по оптимизации.
  • Zadig
    Там лежат все версии этой утилиты. Если кто забыл, она для установки драйвера WinUSB под Windows, чтобы библиотека libusb-1.0 имела прямой доступ к ST-Link.
  • MinGW + MSYS
    Unix-like среда для разработки под Windows с использованием GCC.
Уфф… Вроде, всё. Ошибки, неточности, советы, вопросы принимаются. За сим откланиваюсь и лечу писать quickstart. Уж это я успею меньше, чем за две недели :D
  • +5
  • 3 декабря 2011, 08:51
  • burjui

Комментарии (154)

RSS свернуть / развернуть
+
+1
А как настраивать Eclipse под плату STM32L-Discovery с STM32L152RBT?
(где найти соответствующий файл линкера?)
avatar

router32

  • 3 декабря 2011, 12:28
+
0
З.Ы. И где найти пример проекта Eclipse для этого МК?
avatar

router32

  • 3 декабря 2011, 12:31
+
0
Проект берите тот же, что и в статье а рабочий скрипт я залил к нам. Просто киньте скрипт в папку и измените имя скрипта в настройках проекта. Вообще, кстати, никто не мешает создать таким образом прошивки для разных кристаллов на основе одного проекта — достаточно создать дополнительные build-конфигурации с другими скриптами в настройках.
avatar

burjui

  • 3 декабря 2011, 13:02
+
+1
И спасибо, что упомянули про эту плату, чуть позже обновлю пост.
avatar

burjui

  • 3 декабря 2011, 13:03
+
+1
Ой, чуть не забыл — на вашей плате установлен отладчик ST-Link версии 2, так что запускать stlink нужно без аргументов, т.е. просто:
st-util

Когда у меня в распоряжении появится STM32L-Discovery, обязательно буду проверять все примеры кода на ней и в следующую сборку RC-ARM положу всё необходимое, если понадобится.
avatar

burjui

  • 3 декабря 2011, 13:14
+
+1
Ещё уточнение, вам нужна будет библиотека STM32L1XX Standard Peripheral Driver.
avatar

burjui

  • 3 декабря 2011, 13:49
+
+1
Спасибо за помощь!
avatar

router32

  • 3 декабря 2011, 15:21
+
+1
Добрый день.
У Вас получилась самая подробная статья по настройке эклипса из всех что я видел в нете. Я вот под stm32l настраивал, наверное, дня три потратил. Жаль, что Вы статью чуть раньше не написали :)
avatar

mcsa

  • 5 декабря 2011, 08:04
+
0
О да, первый раз с нуля настроить — это как мозаику из 1000 частей собрать: нужна куча времени и терпения. Кстати, а для прошивки вы какой утилитой пользуетесь, и под какой ОС?
avatar

burjui

  • 5 декабря 2011, 08:16
+
0
Для прошивки в винде STMicroelectronics ST-LINK Utility 2.2 там есть как гуевая так и консольная утилита. Для отладки ST-LINK_gdbserver, который взял из Atollic TrueSTUDIO.
avatar

mcsa

  • 5 декабря 2011, 08:38
+
0
Из статьи не совсем понятно, какие действия необходимо выполнить под виндами, чтоб работать в эклипсе. Саму эклипс и плагин установил, а вот с остальным как-то не все понятно.
avatar

Fisherman

  • 5 декабря 2011, 09:14
+
0
Если не понятно как настроить берите готовую сборку robocraft.ru/files/software/robocraft-arm-ide/0.1/robocraft-arm-ide-0.1-windows-i686.7z
avatar

mcsa

  • 5 декабря 2011, 09:32
+
0
Вот это мне всегда больше всего нравится. Спрашиваешь — что да как, растолкуйте, отвечают — берите готовую сборку. Я понять хочу, что и как, разобраться, откуда что берется и что для чего нужно, причинно-следственные взаимосвязи. Если статья в том числе и для начинающих — зачем к готовой ссылке отсылать.
Намного понятнее (для меня лично) было бы, если бы изложение шло в таком виде:
Для windows: качаем то-то и то-то. устанавливаем первое, второе, третье. подкручиваем/настраиваем первое, второе третье так-то и так-то. профит.

Для linux: качаем то-то и то-то, устанавливаем то-то и то-то, настраиваем то и это. профит.
А из всего вышенаписаного каменный цветок у меня как-то не получается. :(
avatar

Fisherman

  • 5 декабря 2011, 10:04
+
0
настройка самого проекта в эклипсе абсолютно идентична, что под виндой, что под линухом. С чем именно возникают затруднения?
avatar

mcsa

  • 5 декабря 2011, 11:44
+
+1
Да не то чтобы затруднения. MinGW надо ставить лишь затем, чтобы собрать Sourcery CodeBench Lite Edition и прикрутить ST-Link c GDB-сервером?
avatar

Fisherman

  • 5 декабря 2011, 11:54
+
+2
MinGW + MSYS и Git нужны для сборки stlink и libusb-1.0, а CodeBench просто ставится, и всё.
В будущем MinGW и компания очень пригодятся для решения аналогичных задач, коль в винде своей нормальной консоли нет.
Хотя про выкладывание stlink для винды в собранном виде отдельно от IDE я как-то не подумал — моя вина. Держите, библиотека libusb в комплекте.
avatar

burjui

  • 5 декабря 2011, 12:46
+
0
А в сборке, которую презентовал mcsa, такого нету?
avatar

Fisherman

  • 5 декабря 2011, 16:48
+
0
Я в сборку положил всё, что нужно для её работы под виндой, включая stlink и libusb. Я лишь забыл выложить их отдельно для пользователей Windows, у которых по умолчанию нет ни компилятора, ни утилиты make.
avatar

burjui

  • 5 декабря 2011, 18:53
+
0
Т.е. скачанную сборку можно просто распаковать в директорию с установленной Eclipse, и все?
avatar

Fisherman

  • 5 декабря 2011, 19:21
+
0
Сборка содержит вообще все необходимые программы: Eclipse с установленным GNU ARM Plugin, CodeBench, stlink.
Специально для пользователей Windows в сборке также присутствуют libusb, make и Zadig.
avatar

burjui

  • 5 декабря 2011, 19:26
+
0
ВНИМАНИЕ!

Кто уже прочитал статью — перечитайте, я её обновил:
— Исправил ошибки в описании настройки проекта, а именно в описании копирования файлов из Standard Peripheral Driver.
— Добавил установку правил udev в Linux.
— Пересобрал 32-битную версию RC-ARM IDE для Linux в связи с кривой версией stlink (залил нормальную). Заменил CodeBench на самосборную версию ARM toolchain с более свежим компилятором и остальными утилитами. Кто качал — скачайте заново.
— Добавил 64-битную сборку RC-ARM IDE для Linux.
— Перезалил скелетный проект. Теперь там лежат только файлы, необходимые для проекта, а настройку проекта нужно выполнить вам.
— Добавил в нужные части статьи описание настройки IDE и проекта для платы STM32L-Discovery с микроконтроллером STM32L152RBT6: настройку проекта (копирование файлов и настройку опций компилятора и компоновщика) и ремарку относительно запуска stlink.
avatar

burjui

  • 8 декабря 2011, 14:37
+
0
Присоединяюсь к коллегам! Статья супер!, жаль что только что нашёл её )) Пришлось через CoIDE учиться работать. Сейчас на Линукс буду переезжать )))
avatar

SinauRus

  • 8 декабря 2011, 17:17
+
0
Вообщем скопировал архив, импортировал проект, попробовал собрать и получил ошибку:

make all 
Building file: ../main.c
Invoking: ARM Sourcery Linux GCC C Compiler
/home/cool/Документы/prog/STM32/robocraft-arm-ide-0.1-linux-i686/arm-toolchain/bin/../libexec/gcc/arm-none-eabi/4.6.2/cc1: error while loading shared libraries: libppl_c.so.4: cannot open shared object file: No such file or directory
arm-none-eabi-gcc -O0 -Wall -Wa,-adhlns="main.o.lst" -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2 -o"main.o" "../main.c"
make: *** [main.o] Ошибка 1

У меня одного эта ошибка происходит??? Кто нибудь может подсказать ??
avatar

SinauRus

  • 8 декабря 2011, 18:44
+
0
Какой инструментарий нужно выбирать при создании проекта ?? Снимок окна
Я все выбирал, везде ошибки. В итоге решил остановиться на «Sourcery G++ Lite» (исходя из инструкции). Ошибка которая выпадает, описана выше.
Чего-то в проекте не хватает??
avatar

SinauRus

  • 8 декабря 2011, 19:13
+
0
Вы хоть намекните, какой у вас дистрибутив.
avatar

burjui

  • 8 декабря 2011, 19:15
+
0
AltLinux шестая платформа.
avatar

SinauRus

  • 8 декабря 2011, 20:03
+
0
Хм, установите gcc-multilib. На знаю точно, как в вашем дистре называется пакет, но обычно так.
avatar

burjui

  • 8 декабря 2011, 20:28
+
0
На каком дистрибутиве работаете вы??
avatar

SinauRus

  • 9 декабря 2011, 08:35
+
0
Arch Linux x86_64
avatar

burjui

  • 9 декабря 2011, 11:38
+
0
Жаль, но похоже в моём дистрибутиве официально нет утилит для разработки под ARM… Жаль…
avatar

SinauRus

  • 9 декабря 2011, 13:52
+
0
Я про обычный gcc-multilib, не для ARM. И я вам в личку написал, прочитайте.
avatar

burjui

  • 9 декабря 2011, 13:56
+
0
Специально зарегистрировался (:

Последняя КУбунта.
Мультилиб и либЮсб поставил.
Всё равно ошибка:


**** Build of configuration Debug for project New ****

make all 
Building file: ../main.c
Invoking: ARM Linux GCC C Compiler
arm-elf-gcc -O0 -Wall -Wa,-adhlns="main.o.lst" -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2 -o"main.o" "../main.c"
/bin/sh: arm-elf-gcc: команду не знайдено
make: *** [main.o] Помилка 127
avatar

knkd

  • 9 декабря 2011, 18:54
+
0
Памажите люби добрые! (:
А то держать виртуалку с виндой, ради одного КоКоса, несколько некомильфо…
avatar

knkd

  • 9 декабря 2011, 18:57
+
0
Хм… Первый этап пройден, неправильно выбрал тип проекта.
Но компилироваться от этого не начало:
**** Build of configuration Debug for project New ****

make all 
Building file: ../main.c
/bin/sh: /home/knkd/bin/arm-ide/arm-toolchain/bin/arm-none-eabi-gcc: No such file or directory
Invoking: ARM Sourcery Linux GCC C Compiler
arm-none-eabi-gcc -O0 -Wall -Wa,-adhlns="main.o.lst" -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2 -o"main.o" "../main.c"
make: *** [main.o] Помилка 127

Теперь делает вид, что не находит файл /home/knkd/bin/arm-ide/arm-toolchain/bin/arm-none-eabi-gcc, хоть он именно в этом месте и находится.
avatar

knkd

  • 9 декабря 2011, 20:09
+
0
Также при попытке запустить любой исполняемый файл из arm-toolchain:
knkd@knkd:/opt/arm-ide/arm-toolchain/bin$ ls -l

-rwxr-xr-x 1 knkd knkd  639592 2011-12-08 00:50 arm-none-eabi-addr2line
-rwxr-xr-x 1 knkd knkd  663888 2011-12-08 00:50 arm-none-eabi-ar
-rwxr-xr-x 1 knkd knkd 1207472 2011-12-08 00:50 arm-none-eabi-as
-rwxr-xr-x 1 knkd knkd  296472 2011-12-08 00:50 arm-none-eabi-c++
-rwxr-xr-x 1 knkd knkd  635048 2011-12-08 00:50 arm-none-eabi-c++filt
-rwxr-xr-x 1 knkd knkd  294104 2011-12-08 00:50 arm-none-eabi-cpp
-rwxr-xr-x 1 knkd knkd   27952 2011-12-08 00:50 arm-none-eabi-elfedit
-rwxr-xr-x 1 knkd knkd  296472 2011-12-08 00:50 arm-none-eabi-g++
-rwxr-xr-x 1 knkd knkd  292568 2011-12-08 00:50 arm-none-eabi-gcc
-rwxr-xr-x 1 knkd knkd  292568 2011-12-08 00:50 arm-none-eabi-gcc-4.6.2
-rwxr-xr-x 1 knkd knkd   31752 2011-12-08 00:50 arm-none-eabi-gcov
-rwxr-xr-x 1 knkd knkd 3820904 2011-12-08 00:50 arm-none-eabi-gdb
-rwxr-xr-x 1 knkd knkd 3820872 2011-12-08 00:50 arm-none-eabi-gdbtui
-rwxr-xr-x 1 knkd knkd  702920 2011-12-08 00:50 arm-none-eabi-gprof
-rwxr-xr-x 1 knkd knkd  955600 2011-12-08 00:50 arm-none-eabi-ld
-rwxr-xr-x 1 knkd knkd  955600 2011-12-08 00:50 arm-none-eabi-ld.bfd
-rwxr-xr-x 1 knkd knkd  647976 2011-12-08 00:50 arm-none-eabi-nm
-rwxr-xr-x 1 knkd knkd  827240 2011-12-08 00:50 arm-none-eabi-objcopy
-rwxr-xr-x 1 knkd knkd 1010792 2011-12-08 00:50 arm-none-eabi-objdump
-rwxr-xr-x 1 knkd knkd  663888 2011-12-08 00:50 arm-none-eabi-ranlib
-rwxr-xr-x 1 knkd knkd  327472 2011-12-08 00:50 arm-none-eabi-readelf
-rwxr-xr-x 1 knkd knkd  867688 2011-12-08 00:50 arm-none-eabi-run
-rwxr-xr-x 1 knkd knkd  639496 2011-12-08 00:50 arm-none-eabi-size
-rwxr-xr-x 1 knkd knkd  639496 2011-12-08 00:50 arm-none-eabi-strings
-rwxr-xr-x 1 knkd knkd  827240 2011-12-08 00:50 arm-none-eabi-strip
knkd@knkd:/opt/arm-ide/arm-toolchain/bin$ ./arm-none-eabi-gcc
bash: ./arm-none-eabi-gcc: No such file or directory
knkd@knkd:/opt/arm-ide/arm-toolchain/bin$ 
avatar

knkd

  • 9 декабря 2011, 23:05
+
0
Постараюсь исправить — как раз пересобираю toolchain. Собственно, поэтому и пишу в такое время (:
Только вот скажите, вы сборку уже свежую качали, после прочтения моего комментария об обновлении статьи? И какая у вас Kubuntu — i686 или x86_64?
avatar

burjui

  • 10 декабря 2011, 02:59
+
0
И да, последняя — это 11.10 или какая там? Ведь есть же LTS и обычный дистр. Мне нужно точно знать — мне ж качать и на виртуалку ставить (:
avatar

burjui

  • 10 декабря 2011, 03:33
+
0
Кубунта 11.10 х64.
Качал после обновления, часов в пять-шесть.
Грешил на настройки дистрибутива, но хеллоуворды из домашнего каталога вполне запускаются.
Да и в /опт ничего не изменилось.

Кстати. Тулчайн отдельно (поставленный инсталлятором) работает.
Может ему нужны какие-то еще переменные окружения?
avatar

knkd

  • 10 декабря 2011, 06:25
+
0
Не, это сборка кривая, я уже такой баг ловил с stlink. Сегодня надеюсь пересобрать окончательно, чтобы работало везде. Тут у кого-то на Alt Linux 6.0 запускается, но не хватает библиотеки ppl. Везде не слава богу, короче (:
Фигово, что вменяемых инструкций по сборке GCC под для arm-none-eabi нет, только устаревшие и с недосказанностями. Сижу вот, прокачиваю интуицию с интеллектом — авось, завершу квест за день ((:
avatar

burjui

  • 10 декабря 2011, 06:30
+
0
Мы верим в вас! :3
avatar

knkd

  • 10 декабря 2011, 06:44
+
+1
ВНЕЗАПНО
Т.к. RoboCraft ARM IDE 0.1 пока в стадии тестирования и правки (не у всех работает ARM toolchain), об ошибках в работе IDE (включая будущие версии) пишем на форум в соответствующую тему, туда же переносим отсюда обсуждение текущих косяков. Нафлудили тут мы все уже порядком (:
avatar

burjui

  • 10 декабря 2011, 11:05
+
0
Коллеги, подскажите, а как используя такую сборку IDE, компилировать проги на асме?
avatar

phantomlord

  • 20 февраля 2012, 06:41
+
+1
Нужно, чтобы у ассемблерного исходника было расширение .S (именно в верхнем регистре) — тогда IDE будет его воспринимать правильно. А дальше добавляешь файл в проект, как обычно.
avatar

burjui

  • 20 февраля 2012, 10:08
+
0
Всего-то )) Спасибо!
А отладка пошагово будет работать по каждой строчке асм-кода?
avatar

phantomlord

  • 20 февраля 2012, 12:00
+
0
Да, только не выключайте отладочную инфу в свойствах проекта и используйте F5 (Step into): почему-то F6 (Step over) работает некорректно для ассемблера — вместо перехода на следующую инструкцию выходит из функции, написанной на ассемблере, т.е. ведёт себя, как Step out.
avatar

burjui

  • 20 февраля 2012, 14:31
+
0
burjui, спасибо за ответы выше.

Сейчас встала гораздо бОльшая проблема. Настроил всё по инструкции, только для F4-discovery. Собираю этот пустой проект, получаю на выходе debug elf аж 8 мегабайт! Release elf около 300 кб, что тоже ни в какие ворота не лезет.

Периверал либу и CMSIS брал с сайт st.com. Скрипт линкера брал отсюда. Может, в этом скрипте проблема? Я если честно не разбираюсь в нем. Тупо скопировал.
avatar

phantomlord

  • 23 февраля 2012, 11:52
+
0
Сам спросил, сам ответил ))) Забыл галочку поставить на remove unused sections ))
avatar

phantomlord

  • 23 февраля 2012, 11:54
+
0
А вы так не переживайте насчёт размера ELF (:
Сейчас вот посмотрел на ELF для своей демки для HD44780 — 6.8 МБ, и это с порезанными секциями. А размер кода для камня всего-то 32 КБ. Но это и понятно: сишного кода довольно много, да ещё проект с libc линкуется — а она-то без -ffunction-sections скомпилена.
avatar

burjui

  • 23 февраля 2012, 13:02
+
0
Еще проблемы:

Через eclipse отладка не запускается. Открываю в консоли gdb, соединяюсь с 4242, всё ок.
Пишу load Debug/template.elf и получаю:
Loading section .interp, size 0x13 lma 0x0
Load failed

А если в консоли gdb написать «file Debug/template.elf», то получаю:
Reading symbols from Debug/template.elf...(no debugging symbols found)...done.

avatar

phantomlord

  • 23 февраля 2012, 13:10
+
0
Так наоборот же надо:

file Debug/template.elf
load

Команда file устанавливает текущий файл и читает из него отладочную информацию, а команда load (имя файла указывать не обязательно после выполнения file) уже загружает код в МК.
avatar

burjui

  • 23 февраля 2012, 14:22
+
0
Собственно, после load так же точно появляется load failed.

Кстати, в проекте stlink есть утилита st-flash. С помощью нее флеш читается и пишется нормально. Чтобы прошить МК, минуя gdb, это мн надо эльф загнать в МК?
avatar

phantomlord

  • 23 февраля 2012, 14:27
+
+1
Стоп, а вы какой gdb используете, обычный? Нужно arm-none-eabi-gdb! В МК можно только бинарники заливать — ни hex, ни elf, а именно бинарник, который можно получить так:

arm-none-eabi-objcopy -O binary xxx.elf xxx.bin
arm-none-eabi-objcopy -I ihex -O binary xxx.hex xxx.bin
avatar

burjui

  • 23 февраля 2012, 14:39
+
0
ну естественно использую arm-none-eabi-gdb. Кстати, если скомпилить пример blink, который идет с проектом stlink, то он нормально загоняется в МК через arm-none-eabi-gdb. Но только если он слинкован под sram. Если линковать под флеш, то он тоже загоняется в МК, но выполняться отказывается.

obj-copy попробую сейчас
avatar

phantomlord

  • 23 февраля 2012, 15:05
+
0
Полученный бинарник загоняется, но не работает ((( Наверное, с адресами где-то косяк. Но вот как понять, где…
avatar

phantomlord

  • 23 февраля 2012, 15:12
+
0
Советую взять свежую версию stlink из репозитория Карла, там много улучшений (особенно в плане скорости).
avatar

burjui

  • 23 февраля 2012, 15:39
+
0
Да я уже брал и свежую версию. Проблема явно где-то в линковке. Я с дискавери перед всеми экспериментами слил содержимое флеш памяти, которое по дефолту было. И вот если этот бинарник залить обратно, то он работает как и раньше. Следовательно — проблема в самих бинарниках (ну или в эльфах, из которых они получаются)
avatar

phantomlord

  • 23 февраля 2012, 16:14
+
+1
Тогда могу только посоветовать прошерстить директорию example в stlink, а заодно SPL для STM32F4 — в обоих есть как рабочие примеры, так и скрипты линкера.

P.S. Только что вспомнил: я же для STM32F4DISCOVERY писал простейшую зажигалку светодиодов. Держите архив с проектом.
avatar

burjui

  • 23 февраля 2012, 17:06
+
0
Ваш проект не собирается даже ((
tmp/ccyubkA9.s: Assembler messages:
/tmp/ccyubkA9.s:571: Error: registers may not be the same — `strexb r0,r0,[r1]'
/tmp/ccyubkA9.s:599: Error: registers may not be the same — `strexh r0,r0,[r1]'
make: *** [CMSIS/core_cm3.o] Ошибка 1
avatar

phantomlord

  • 23 февраля 2012, 17:29
+
0
И кстати, пример из stlink тоже перестал работать
avatar

phantomlord

  • 23 февраля 2012, 17:30
+
0
Ага, заметил неладное в выводе gdb-сервера:

2012-02-23T22:00:08 INFO src/stlink-common.c: Attempting to write 16384 (0x4000) bytes to stm32 address: 134217728 (0x8000000)
2012-02-23T22:00:08 INFO src/stlink-common.c: Erasing flash page at addr: 0x8000000
2012-02-23T22:00:08 INFO src/stlink-common.c: Successfully unlocked flash
EraseFlash — Sector:0x0 Size:0x4000
2012-02-23T22:00:08 INFO src/stlink-common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2012-02-23T22:00:08 INFO src/stlink-common.c: Successfully unlocked flash
flash_do: page 08004000
2012-02-23T22:00:10 INFO src/stlink-common.c: Attempting to write 16384 (0x4000) bytes to stm32 address: 134234112 (0x8004000)
2012-02-23T22:00:10 INFO src/stlink-common.c: Erasing flash page at addr: 0x8004000
2012-02-23T22:00:10 INFO src/stlink-common.c: Successfully unlocked flash
EraseFlash — Sector:0x1 Size:0x4000
2012-02-23T22:00:11 INFO src/stlink-common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2012-02-23T22:00:11 INFO src/stlink-common.c: Successfully unlocked flash
flash_do: page 08008000
2012-02-23T22:00:13 INFO src/stlink-common.c: Attempting to write 16384 (0x4000) bytes to stm32 address: 134250496 (0x8008000)
2012-02-23T22:00:13 INFO src/stlink-common.c: Erasing flash page at addr: 0x8008000
2012-02-23T22:00:13 INFO src/stlink-common.c: Successfully unlocked flash

Как видите, это отличается от вашего лога. Как же всё это вылечить, блин
avatar

phantomlord

  • 23 февраля 2012, 19:09
+
0
Не вижу тут ничего неладного — запись идёт по правильным адресам (начало флеша — 0x08000000), только размер страницы отлитчается — 16 КБ вместо 1 КБ, но это особенность флеша на High-density кристаллах.
avatar

burjui

  • 23 февраля 2012, 19:38
+
0
Ну ладно, в этом действительно нет проблемы скорее всего. Но и без этого куча проблем.
А вас не затруднит собрать эльф для F4? Выше я писал, что у меня ваш проект не собирается.
avatar

phantomlord

  • 24 февраля 2012, 05:23
+
+1
avatar

burjui

  • 24 февраля 2012, 11:22
+
0
Заказал себе STM32F4DISCOVERY, т.к. нашел по вкусной цене, хотя изначально хотел L или VL

Настройка IDE и отладчика сильно будет отличаться от описанной? Использую Ubuntu, до этого с STM дела не имел.
avatar

ploop

  • 26 февраля 2012, 17:09
+
0
качайте готовую сборку из по ссылке в статье. у меня тоже ubuntu, все по инструкции делал, но оно так и не взлетело, дня три промучился. Скачал готовое, и через 5 минут уже работал. Видимо, работает только в данном тонком сочетании конкретных версий по
avatar

phantomlord

  • 27 февраля 2012, 04:45
+
0
Отличаться будет настройка проекта:
1) Тип процессора «cortex-m4»
2) Другая библиотека периферии — STM32F4 DSP and standard peripherals library
3) Определение STM32F10X_MD_VL можно просто выкинуть нафиг
4) Ну и в настройках линкера и в проекте заменить stm32f100rb.ld на соответствующий скрипт, который можно аналогичным описанному в статье способу позаимствовать из папки с SPL. Выше я давал ссылку на проект — там скрипт есть, но немного неполный: я ещё не разобрался с CCM — Core Coupled Memory. Имейте ввиду, данные в CCM доступны только из кода, и недоступны периферии через DMA (так сказано в даташите).

Также немного будет отличаться работа с периферией. Я STM32F4xx пока не исследовал детально, но, к примеру, режим GPIO там разделён на два поля: одно для pull-up/open-drain, другое для выбора прямого управления или чяерез альтернативные функции.
avatar

burjui

  • 27 февраля 2012, 10:30
+
0
Ясно, спасибо.

По поводу периферии — не страшно, понятно, что другой чип, но документация у них нормальная, попробую разобраться. Главное IDE настроить, чтобы можно было спокойно ковырять.

Осталось только дождаться, когда посылочка приедет.
avatar

ploop

  • 27 февраля 2012, 10:37
+
0
Приехали вчера дискавери, как обычно ночь без сна :)

В итоге многое удалось — stlink цепляется к плате, сервер запускается, GDB работает. Тестовый проект для F4 собирается без ошибок (конечно были мелочи, типа не все библиотеки скопировал). Но проверить всё в куче из-под IDE не успел, уже тупил, засыпая :)

Собственно есть вопрос: я брал скрипт линкера сайта ST, по началу линкер ругался на какой-то не найденный файл, проанализировал его, закомментил последнюю строку — заработало. Потом посмотрел ваш скрипт — он сильно отличается от этого. Хотелось бы узнать, что делает этот скрипт, на что он влияет (просто я с GCC дела не имел, хотя на Си опыт программирования есть небольшой)? Или ссылки какие почитать про него?
avatar

ploop

  • 14 марта 2012, 07:03
+
0
Вот тут неплохо написано. Если хочется более подробной инфы — только гуглить. Вкратце: скрипт линкера описывает этому самому линкеру (компоновщику), как организовать секции кода и данных в ELF-файле, т.е. как собрать из кучи объектных файлов один — откуда брать какие секции, в каком они будут порядке, впо каким адресам памяти и т.п. Напоминаю, что ELF — это Executable and Linkable Format: предназначен для хранения и компоновки кода и данных, попутно это стандартный формат для исполняемых и объектных файлов в Linux.
avatar

burjui

  • 14 марта 2012, 07:20
+
0
Можно еще небольшой вопрос, я не надоел? :)

Настроил IDE, запускаю отладку. Светодиод на ST-LINKе начинает мигать, на дискавери идёт демо-программа. При том я могу ей управлять — остановить, посмотреть состояние регистров и т.д.
Всё отлично, но почему не залилась моя программа? Или там что-то хитрое надо сделать?

Исходник соответственно к отладке не привязан, брекпойнт ставится, определяется как валидный, но не работает. И не останавливается на main(), а просто ругается, что не может её определить, приходится отключать остановку на main() в конфигурации отладки…
avatar

ploop

  • 14 марта 2012, 18:59
+
0
Скажем так, иногда, всё же, нужно в чём-то разбираться самому. Одно из двух — либо вы один из тех, у кого просто волею судьбы всё из рук валится и ничего не работает (не везёт), либо вы невнимательно читаете статьи и ленитесь решать проблемы самостоятельно. Хотелось бы верить, что первое.

Что касательно описанной вами проблемы — уж извините, но я не телепат, и не могу знать, почему у вас не залилась программа. Причин может быть дофига и больше: не запустили stlink, не настроили или настроили неправильно отладочную конфигурацию, пытаетесь заливать не ту прошивку, прошивка заливается по неверным адресам, прошивка не заливается вообще (ошибка stlink, МК или бог знает, чего ещё), да барабашка код по дороге в МК украл. Могли бы намекнуть логами stlink, например (:
Только, ради бога, не надо постить все логи в комменты — можно написать в личку или дать ссылку на файл.

В конце концов, скоро невозможно будет читать эту ветку комментариев из-за её чудовищного размера.
avatar

burjui

  • 14 марта 2012, 20:11
+
0
Да нормально я читаю статьи, просто МК у меня другой, и повторять 1:1 не выйдет. Плюс это первое знакомство с ARM и аппаратной отладкой, и много непонятного, например — что он льёт в контроллер? hex? bin? elf? На что смотреть, если есть проблемы?
Допустим я и подумать не мог, что можно отлаживать уже прошитый код в МК независимо от исходника.

Конкретно в моём случае проблема была в коде. Ну понятно, пустышку он не скомпилит, поэтому взял ваш под F4 со светодиодами, но он и его не компилил — ошибок нет, а на выходе пусто. Пока не обратил внимание на варнинг. Пришлось добавить в код Reset_Handler — hex заполнился данными, и при запуске дебага демка благополучно затёрлась, т.е. МК прошился.

Ладно, не буду больше надоедать, спасибо вам за статью и за ответы!
avatar

ploop

  • 15 марта 2012, 05:51
+
0
Спасибо, вечером приду с работы, попробую.

Если опять не взлетит, скачаю вашу сбору IDE. Может быть, у меня другие версии компонентов конструктора, и в них не работает.
avatar

phantomlord

  • 24 февраля 2012, 12:00
+
0
Подскажите, а можно в процессе отладки лазить по регистрам периферии? В идеале и читать и изменять их.
avatar

phantomlord

  • 28 февраля 2012, 19:41
+
0
Можно. Для этого во время отладки вызовите окно «Registers».
avatar

burjui

  • 28 февраля 2012, 20:15
+
0
Уже открыто. Но там я вижу только регистры РОН, f0-f7, lr, pc, sp, и еще парочку.
avatar

phantomlord

  • 28 февраля 2012, 20:21
+
+1
А, точно, вы же про периферию. Ну тогда окно «Expressions», там добавляйте интересующую периферию и смотрите/изменяйте. Я так TIM3 добавлял, а потом менял счётчик таймера и разрешал/запрещал его работу. Только программу на паузу ставить нужно.
avatar

burjui

  • 28 февраля 2012, 21:00
+
0
burjui, большое спасибо за статью!
Однако у меня с github возникло взаимонедопонимание:

$ git clone git://github.com/burjui/stlink.git -b server-restart
Initialized empty Git repository in /home/user/devel/stlink/.git/

это означает, что проблемы у github или у меня?
avatar

nes

  • 1 марта 2012, 09:56
+
0
Делаю то же самое:

$ git clone git://github.com/burjui/stlink.git -b server-restart
Cloning into 'stlink'...
remote: Counting objects: 3924, done.
remote: Compressing objects: 100% (1371/1371), done.
Receiving objects:  17% (678/3924), 860.00 KiB | 78 KiB/s

Даже не знаю, почему у вас создаётся пустой репозиторий o_O
На всякий случай проверьте версию git — вдруг у вас слишком старая (хотя всё равно чуднó):

$ git --version
git version 1.7.9.2
avatar

burjui

  • 1 марта 2012, 12:00
+
0
а в вашей «готовой сборке IDE» не придется клонировать ветку из гита? может мне тогда стоит воспользоваться ей?
avatar

nes

  • 2 марта 2012, 11:53
+
0
Не придётся, но там старая версия stlink, так что я в скором времени сделаю новую сборку с более свежими версиями софта.

Кстати, необязательно именно через git получать свежие сорцы — на GitHub можно скачать выбранную ветку в виде zip-архива: нужно выбрать в списке «branch: server-restart» и нажать кнопку «ZIP». На всякий случай даю ссылку. При переходе по этой ссылке GitHub генерит zip-архив со свежими сорцами и отдаёт его.
avatar

burjui

  • 2 марта 2012, 13:32
+
0
Вообще у меня на работе все в Keil прогают под ARM :)
avatar

nes

  • 16 марта 2012, 12:17
+
0
у меня stm32l-discovery вроде сделал всё как надо под убунту, компилится всё норм, но когда нажимаю дебаг, то выдает
/bin/bash: /home/animashko/workspace/test/Debug/test.elf: не удалось запустить двоичный файл
/bin/bash: /home/animashko/workspace/test/Debug/test.elf: Победа

в файле gdb_commands_debug
tar ext :4242
load Debug/test.elf

з.ы. проект называется test
помогите залить на платку
avatar

BLoOd1k

  • 18 марта 2012, 21:27
+
+1
Победа
Русский перевод такой русский LOL

Не уверен в причине ошибки, но вы могли забыть заменить в gdb на arm-none-eabi-gdb в отладочной конфигурации.

Вообще, если у вас не работает, значит вы что-то сделали неправильно (если версии софта, конечно, те же). Проверьте, правильно ли вы настроили проект и отладочную конфигурацию. Опять же, какая у вас версия софта, как ставили — вручную или из репозитория? И т.п.
avatar

burjui

  • 18 марта 2012, 22:01
+
0
Не уверен в причине ошибки, но вы могли забыть заменить в gdb на arm-none-eabi-gdb в отладочной конфигурации.

спасибо, действительно забыл) всё прошилось)
avatar

BLoOd1k

  • 18 марта 2012, 22:29
+
0
Моё искусство телепатии растёт с каждым днём :D
avatar

burjui

  • 18 марта 2012, 22:33
+
0
может кто скинуть\сделать пример для stm32l152rbt6(stm32l-discovery) по работе с usart? хотябы чтоб просто плата и комп обменивались инфой в 1 байт
avatar

BLoOd1k

  • 18 марта 2012, 23:40
+
0
Подскажите, пожалуйста, как линковать под RAM?

Сам смотрю на свой комментарий где-то выше, вижу, что я там писал, что линковал под RAM, а сейчас хоть убей не могу вспомнить, как я это делал :D
avatar

phantomlord

  • 16 апреля 2012, 09:05
+
0
А я так вообще не пробовал (:
В принципе, можно в скрипте линкера всем секциям прописать место назначения ram вместо flash. Но я бы не стал этим маяться, т.к. SRAM обычно мало, а flash-память достаточно быстра и число перезаписей до отказа очень большое.
avatar

burjui

  • 16 апреля 2012, 12:02
+
0
Об этом я уже тоже подумал )) Сейчас на работе сижу, дома попробую.
В оперативку хочу линковать для отладочных целей, чтобы скорость увеличить и ресурс флешки поэкономить. Насчет ресурса не знаю, может мне его и на годы хватит, но вот скорость так себе. 1 кб/сек — это предел, обычно медленнее. Когда при отладке программы приходится перепрошивать МК по 100 раз на день, то даже 5-10 сек ожидания начинают напрягать.

А памяти у меня хватает. F4 же ))))
avatar

phantomlord

  • 16 апреля 2012, 12:48
+
0
burjui, спасибо за статью и сборки, все работает отлично. Попробовал новую версию st-util под линукс — самолет.
Пытаюсь собрать свежий st-util под винду, компилятор ругается на отсутствие libusb.h
При этом libusb встал в mingw правильно — в lib и include все есть. Пробовал в исходнике подправить на #include <libusb-1.0/libusb.h>, тоже без эффекта. mingw, libusb, и пр скачаны по вашим ссылкам.
Куда копать?
avatar

andrei19

  • 3 мая 2012, 08:13
+
+1
Копать в лучше вниз, метра на полтора — туда бросьте директорию stlink и закопайте. С недавних пор (версия 0.6.0) в OpenOCD появилась поддержка ST-Link обеих версий, работает на всех STM32, скорость прошивки под 17 КБайт/с. Офигенно, в общем. Т.к. версия девелоперская, даже не бета, для винды один чувак сборки делает. Сама прога просто конфетка — и GDB-сервером прикидывается, и telnet-сервером (можно команды вручную выполнять — reset, halt, прошивку, очистку).

Пожалуй, напишу на следующей неделе пост на тему склеивания OpenOCD с Eclipse (:
avatar

burjui

  • 3 мая 2012, 22:35
+
0
Понятно. Уже видел, что она есть, но не знал что можно под винду собрать. Огромное спасибо за ссылку.
avatar

andrei19

  • 5 мая 2012, 07:53
+
0
Попробовал OpenOCD по вашей ссылке в комплекте с ZylinCDT. Завелся с первого раза, загрузка — космический корабль :). Инструкции по этой ссылке//www.indigresso.com/wiki/doku.php?id=opentag:tools:gnu_arm_eclipse">по этой ссылке
Тот ld скрипт, который Вы давали для stm32lxx — глючный. Взял от TrueStudio, полет нормальный.
avatar

andrei19

  • 8 мая 2012, 18:33
+
0
А да, что касается непосредственно stlink, там проблема в include path. Вы именно в MSYS собирали (правильно) или просто в cmd.exe с прописанным PATH до MinGW (не очень)?
avatar

burjui

  • 3 мая 2012, 22:37
+
0
Я собирал из msys. Но это наверное уже не важно :).
avatar

andrei19

  • 5 мая 2012, 07:59
+
0
Большое спасибо за статью
Проблема возникла только одна (Ubuntu 12.04)
не определен тип
В Eclipse
Type 'uint8_t' could not be resolved misc.h /stm32vld_template/StdPeripheralDriver/inc
Насколько я понимаю uint8_t — часть стандартной библиотеки,
а вот тут electronix.ru/forum/lofiversion/index.php/t99096.html
идут активные споры что у производителя arm свое определение uint8_t
Я только начинаю с этим делом разбираться, наздеюсь что ктонибудь подскаже в какую сторону рыть
avatar

parfeon

  • 7 мая 2012, 10:45
+
0
Проблему решил но повилась другая…
Failed to execute MI command:
-gdb-set target-async off


avatar

parfeon

  • 7 мая 2012, 12:20
+
0
Подскажите пожалуйста, что я делаю не так.
Отладочную плату STM32f4Discovery включаю в компьютеры, но она определяется, как неизвестное устройство, при чём, как в Linux (Ubuntu 12.04 amd64), так и в Windows 7 (x64), и в Windows XP. Это всё разные компьютеры, так что системы — точно не виноваты.
Возможно как-то поправить ситуацию? Или плата бракованная/неправильно прошитая?
avatar

Shalmaran

  • 24 мая 2012, 20:03
+
0
Помогите пожалуйста сборку проекта делаю как вы описали для stm32l_discovery но когда начинаю тестировать сборку проекта как у вас написано пишет
arm-none-eabi-gcc -O0 -Wall -Wa,-adhlns=«main.o.lst» -c -fmessage-length=0 -MMD -MP -MF«main.d» -MT«main.d» -o«main.o» "../main.c"
../main.c:1:23: fatal error: stm32l1xx.h: No such file or directory
compilation terminated.
cs-make: *** [main.o] Error 1
директории с папками библиотек вроде указал нормально
заранее всем спасибо
avatar

link2387

  • 30 июня 2012, 12:56
+
0
Может, вы не те библиотеки к проекту добавляете? Для серии STM32L1xx нужно качать свои.
avatar

burjui

  • 30 июня 2012, 13:49
+
0
Я создавал и настраивал как писалось выше а
папки с библиотеками добавлял отсюда же из «Все необходимые файлы для скелетного проекта:» stm32l_discovery"
второй день бьюсь не знаю что делаю не так
avatar

link2387

  • 30 июня 2012, 14:14
+
0
Спасибо
avatar

lws

  • 9 июля 2012, 22:56
+
0
А кто-нибудь может подсказать какие файлы нужно взять, если использовать CMSIS V3?
У меня возникает ошибка Error: registers may not be the same — `strexb r0,r0,[r1]'
Исправлял как написано тут (http://we.easyelectronics.ru/PahanMenski/gcc-46-i-cmsis-ispravlyaem-oshibku-kompilyacii.html)
Но там говорят только про одно место, у меня еще вот такой кусок кода ошибается:
uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
__ASM(«strexh r0, r0, [r1]»);
__ASM(«bx lr»);
}
Говорят что в CMSIS v3 исправили эту ошибку, но там структура файлов совершенно другая, вот не знаю как эти файлы правильно подключить…
avatar

van_de_luxe

  • 22 августа 2012, 20:15
+
0
Начал осваивать ST32L152 на Дискавери, Eclipse и библиотеку STM. Есть проблема, получаю значение из АЦП, с канала измерения температуры, а пересчитать во lfoat не получается. запись вида:
float Temp, a=0.5,b=0.00166;
Temp = a/b;
компилируется, но отладчик загрузочный файл не может загрузить в память контроллера, выдаёт ошибку.Error in final launch sequence
Failed to execute MI command:
load D:\\stm32-discovery-projects\\workspace_STM32L\\stm32ld_quickstart\\Debug\\stm32ld_quickstart.elf

Error message from debugger back end:
Error writing data to flash
Error writing data to flash

Из-за чего такое может быть?
avatar

Sergey_4i

  • 29 августа 2012, 18:55
+
0
Для убунты-12.04:

sudo apt-get install binutils-arm-linux-gnueabi g++-arm-linux-gnueabi gcc-arm-linux-gnueabi gdb-multiarch


Запускается отладчик так:
gdb-multiarch
avatar

t1000

  • 2 октября 2012, 20:24
+
0
огромное спасибо за статью! раньше пробовал Eclipse под AVR, не понравился. теперь понял почему. сейчас начал осваивать ARM. Ваша статья как нельзя вОвремя. Eclipse настроил по статье, всё пошло с первого раза. еще раз спасибо!!!
avatar

kot-69

  • 21 октября 2012, 15:07
+
0
не пойму только, а как эклипсе указать, где у нее компилятор лежит (yagarto).
Без этого, конечно, ошибку проекта выдает.

Еще бы хотелось все тоже самое, но с внешним make файлом посмотреть как настраивать.
avatar

metcenger

  • 29 декабря 2012, 14:42
+
0
Project→Properties→C/C++ build: снимаешь галочку «Generate Makefiles automatically», в поле «Build directory» пишешь путь к папке с Makefile'ом. Не забывай, что эта настройка действует для выбранной конфигурации (Debug или Release), так что выбери перед этим нужную вверху окна (или All).
avatar

burjui

  • 29 декабря 2012, 21:43
+
0
А, да, про Yagarto подсказать не могу — не использовал. Предлагаю не выпендриваться (: и использовать Sourcery CodeBench Lite, т.к. всё равно там те же самые инструменты, что и в Yagarto: GCC, GDB, Binutils.
avatar

burjui

  • 29 декабря 2012, 22:07
+
0
Вот и я дошел до вопросов.

А, именно, стал устанавливать Eclipse и ARM Plugin:
Так как ARM Plugin поддерживает Eclipse версии не старше, чем Helios (3.6.x), то её и поставим с официального
сайта, взяв самую свежую версию на данный момент — 3.6.2 (Helios SR2). Нам нужна Eclipse IDE for C/C++
Developers, которая также широко известна по более короткому названию — Eclipse CDT. Качайте версию под
свою ОС и распаковывайте, куда захочется. Мне захотелось в /home/burjui/apps/eclipse, например.

Распаковал. Но при запуске этого Эклипса система потребовала установить:
sudo apt-get install eclipse-platform
Ну, установил, и запустил eclipse.
Eclipse SDK
Version: 3.5.2
Build id: M20100211-1343
Получается архив был не нужен? Или я не правильно распаковал?

Ладно, продолжим?
Запускайте Eclipse и выбирайте пункт меню Help→Install New Software… Не слишком очевидно, не правда ли?
Далее действуем в соответствии с инструкциями по установке плагина, а именно жмём кнопку Add и в появившемся
окне Add Repository вписываем имя плагина — например, ARM Plugin. Качаем zip-архив с плагином (нам нужна
именно версия 0.5.3, более свежая требует Eclipse 3.7.x, а там поломали отладку), жмём кнопку Archive и
выбираем скачанный архив, после чего жмём ОК.

Ошибка:
Cannot complete the install because one or more required items could not be found.
Software being installed: GNU ARM C/C++ Development Support 0.5.4.201202210114
(org.eclipse.cdt.cross.arm.gnu.feature.group 0.5.4.201202210114)
Missing requirement: GNU ARM C/C++ Development Support 0.5.4.201202210114
(org.eclipse.cdt.cross.arm.gnu 0.5.4.201202210114)
requires 'bundle org.eclipse.cdt.managedbuilder.core 8.0.0' but it could not be found
Cannot satisfy dependency:
From: GNU ARM C/C++ Development Support 0.5.4.201202210114
(org.eclipse.cdt.cross.arm.gnu.feature.group 0.5.4.201202210114)
To: org.eclipse.cdt.cross.arm.gnu [0.5.4.201202210114]
Что-то не хватает. Но что?

Спасибо! Александр.

p.s. Готовую сборку скачал. Но, во-первых, интересно почему так не получилось?
Во-вторых, подозреваю я и сборку неправильно разархивирую. Кажется, Double Commander не лучшее средство для разархивирования.
avatar

ajk

  • 12 марта 2013, 07:28
+
0
requires 'bundle org.eclipse.cdt.managedbuilder.core 8.0.0' but it could not be found

А CDT кто будет ставить — Пушкин? (:
sudo apt-get install eclipse-cdt
avatar

burjui

  • 12 марта 2013, 13:58
+
0
Eclipse CDT. Качайте версию под
свою ОС и распаковывайте, куда захочется. Мне захотелось в /home/burjui/apps/eclipse, например.

Ну, вот, же… Только при запуске эклипса из этой папки он не работает.
~/stm32CodeBench/eclipse$ eclipse
Программа 'eclipse' на данный момент не установлена.  Вы можете установить её, выполнив:
sudo apt-get install eclipse-platform
~/stm32CodeBench/eclipse$ l -l eclipse 
-rwxr-xr-x 1 ajk ajk 71162 2010-10-19 21:44 eclipse*
avatar

ajk

  • 12 марта 2013, 19:37
+
0
Я под Убунтой
avatar

ajk

  • 13 марта 2013, 06:32
+
0
Я под Убунтой
Штырит?
Шуткую. Вы не тот Eclipse запускаете, надо так:
~/stm32CodeBench/eclipse$ ./eclipse
Это не винда, здесь нужно явно указать путь к бинарнику, пусть даже и относительный.
avatar

burjui

  • 13 марта 2013, 12:26
+
0
Ну, я не совсем плохой, то:
jk@home-desktop:~/stm32CodeBench/eclipse$ l -l 
итого 580
drwxrwsr-x  2 ajk ajk   4096 2011-02-18 12:25 about_files/
-rw-rw-r--  1 ajk ajk  18909 2011-02-10 20:31 about.html
-rw-rw-r--  1 ajk ajk  62694 2011-02-18 12:25 artifacts.xml
drwxrwsr-x  4 ajk ajk   4096 2011-02-18 12:25 configuration/
drwxrwsr-x  2 ajk ajk   4096 2011-02-18 12:25 dropins/
-rwxr-xr-x  1 ajk ajk  71162 2010-10-19 21:44 eclipse*
-rw-rw-r--  1 ajk ajk    428 2011-02-18 12:25 eclipse.ini
-rw-rw-r--  1 ajk ajk  16536 2005-02-26 02:53 epl-v10.html
drwxrwsr-x 27 ajk ajk   4096 2011-02-18 12:25 features/
-rw-rw-r--  1 ajk ajk   9022 2006-12-11 19:04 icon.xpm
-rwxr-xr-x  1 ajk ajk 335360 2006-12-11 19:04 libcairo-swt.so*
-rw-rw-r--  1 ajk ajk   9051 2010-04-27 23:23 notice.html
drwxrwsr-x  5 ajk ajk   4096 2011-02-18 12:24 p2/
drwxrwsr-x  9 ajk ajk  24576 2011-02-18 12:25 plugins/
drwxrwsr-x  2 ajk ajk   4096 2011-02-18 12:25 readme/
ajk@home-desktop:~/stm32CodeBench/eclipse$ ./eclipse
bash: ./eclipse: не удалось выполнить бинарный файл
ajk@home-desktop:~/stm32CodeBench/eclipse$ 
avatar

ajk

  • 13 марта 2013, 19:35
+
0
А у вас Ubuntu какой версии?
avatar

burjui

  • 13 марта 2013, 21:46
+
0
У меня 10-я люцида:
Linux home-desktop 2.6.32-45-generic-pae #104-Ubuntu SMP Tue Feb 19 21:36:53 UTC 2013 i686 GNU/Linux

-rwxr-xr-x  1 ajk ajk    314 2011-12-08 05:30 start-ide.sh*
-rwxr-xr-x  1 ajk ajk    235 2011-12-08 05:30 start-stlink.sh*
drwxr-xr-x  2 ajk ajk   4096 2011-12-07 17:47 stlink/
ajk@home-desktop:~/stm32CodeBench/robocraft-arm-ide-0.1-linux-x86_64$ start-ide.sh
start-ide.sh: команда не найдена
ajk@home-desktop:~/stm32CodeBench/robocraft-arm-ide-0.1-linux-x86_64$ ./start-ide.sh
./eclipse: 5: Syntax error: "(" unexpected
ajk@home-desktop:~/stm32CodeBench/robocraft-arm-ide-0.1-linux-x86_64$ 

Мне не хватает какой-нибудь Явы… Но почему Эклипс установленный через apt-get работает?
Какая-то глупость…
avatar

ajk

  • 14 марта 2013, 07:22
+
0
Видимо в вашем старом дистрибутиве загрузчик ELF располагается по другому пути. Eclipse слинкован с /lib64/ld-linux-x86-64.so.2, а у меня Ubuntu 12.10:

burjui☯lair ❮~❯ ldd /home/burjui/Apps/robocraft-arm-ide-0.1-linux-x86_64/eclipse
	linux-vdso.so.1 =>  (0x00007fffccb5e000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f192d996000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f192d792000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f192d3d2000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f192dbd3000)
Так что придётся вам настраивать Eclipse из дистрибутива или с eclipse.org
avatar

burjui

  • 14 марта 2013, 12:23
+
0
Запустился robocraft-arm-ide-0.1-linux-i686.tar.xz Может быть, я чего не понимаю… Разберемся.
avatar

ajk

  • 16 марта 2013, 18:30
+
0
А можете это прокомментировать?
http://robocraft.ru/forum/viewtopic.php?f=19&t=122&p=1896#p1886
Спасибо!
avatar

ajk

  • 20 марта 2013, 19:26
+
0
Зачем нужен этот файл stm32f100rb.ld?
Как мне его сделать для f4?
avatar

ajk

  • 3 апреля 2013, 20:44
+
0
Это скрипт линкера (компоновщика) ld из набора утилит binutils, который входит в состав Sourcery CodeBench Lite. В скомпилированных объектных файлах код и данные раскиданы по соответствующим секциям, а в скрипте указаны адреса, по которым следует эти секции размещать в памяти МК (Flash и SRAM). Так как МК бывают с разными объёмами памяти, каждому нужен свой скрипт. Среды типа CoIDE и всякие коммерческие обычно автоматически добавляют в проект нужный скрипт линкера, основываясь на выбранной в свойствах проекта модели МК.

Можете скачать мой проект-заготовку для STM32F4DISCOVERY: там скрипт линкера присутствует — правда, не самый корректный, но-таки рабочий. Как вариант — скачать Standard Perpheral Library для STM32F4xx: там должны быть примеры проектов для разных IDE и компиляторов (наш случай — Eclipse и GCC). Ну и, если совсем туго, можно погуглить по we.easyelectronics.ru, ибо там тусуются STM'щики в заметных невооружённым глазом количествах.
avatar

burjui

  • 3 апреля 2013, 23:19
+
0
Ну, ладно еще вопрос… Как же мозги плохо восстанавливаются!

Запускаю st-link? светодиод справа от разъема перемигивается зелёным и так и остается. Видимо st-link запустился и плата ждет загрузки.

Run — Debug Configuration:
Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Don't know how to run.  Try "help target".
Don't know how to run.  Try "help target".

Ну, или картинка ошибки

Настройки запуска: Debug Main и Debug Configurations

Спасибо!
александр.
avatar

ajk

  • 5 апреля 2013, 14:17
+
0
А ты внимательно прочитай про настройку отладчика (поищи по фразе «Теперь осталось только настроить отладчик.»). GDB command file указать забыл.
avatar

burjui

  • 5 апреля 2013, 14:50
+
0
Скажите, что ещё внимательно почмитать?

Запустил отладку и вижу ошибку:
Error in final launch sequence
Failed to execute MI command:
source /home/ajk/workspace/stm32f4d_template/gdb_commands_release
Error message from debugger back end:
/home/ajk/workspace/stm32f4d_template/gdb_commands_release:2: Error in sourced command file:
Release/stm32f4d_template.elf: \320\235\320\265\321\202 \321\202\320\260\320\272\320\276\320\263\320\276 \321\204\320\260\320\271\320\273\320\260 \320\270\320\273\320\270 \320\272\320\260\321\202\320\260\320\273\320\276\320\263\320\260.
/home/ajk/workspace/stm32f4d_template/gdb_commands_release:2: Error in sourced command file:
Release/stm32f4d_template.elf: \320\235\320\265\321\202 \321\202\320\260\320\272\320\276\320\263\320\276 \321\204\320\260\320\271\320\273\320\260 \320\270\320\273\320\270 \320\272\320\260\321\202\320\260\320\273\320\276\320\263\320\260.
avatar

ajk

  • 8 апреля 2013, 16:36
+
0
Всем привет. Пытался повторить все операции с STM32LDiscovery на windows, всё получилось до момента установки stlink. Как и было описанно, после установки драйвера WinUSB(с пом. Zadig), ввод команды «st-util»(без ключа) не привёл к какому-либо выводу на терминал. В другом окне так же запустил GDB с пом. команды «arm-none-eabi-gdb» и далее «target extended-remote localhost:4242»(«tar ext :4242») результатом были иероглифы, а на другом терминале(st-util) ничего не произошло. Старался выполнять все ваши инструкции точно, но где-то видимо упустил что-то. Все остальные настройки до и после раздела stlink выставил. Тестовый проект в эклипсе компилится. Подскажите где ошибся…
avatar

insert103

  • 5 мая 2013, 12:14
+
0
Возможно, я ошибся при сборке утилиты stlink, не положив нужные библиотеки (*.dll). Так или иначе, на сегодняшний день статья несколько устарела, и вместо stlink лучше использовать OpenOCD, который работает быстро и надёжно. В дистрибутиве OpenOCD в папке scripts/board есть готовые конфиги для плат STM32xxxDiscovery, только нужно установить фирменный драйвер для отладчика ST-Link.
avatar

burjui

  • 5 мая 2013, 15:14
+
0
Добрый день!
У меня STM32F4 Discovery. Я скачал эклипс с CDT, gnuшный gcc для ARM и st-util, скачал некоторый набор библиотек для мой платы. По отдельности все работает — компилятор справляется со сборкой int main(){}, st-util и gdb позволяют связаться с платой. Но когда я пробую собрать хотя бы один проект с примером начинается полная фигня на этапе линковки.
Пробовал разные скрипты. С вот таким:
SECTIONS
{
PROVIDE(__executable_start = 0x0008000);
. = 0x00008000 + SIZEOF_HEADERS;
.interp: { *(.interp) }
.note.ABI-tag: { *(.note.ABI-tag) }
.hash: { *(.hash) }
.dynsym: { *(.dynsym) }
.dynstr: { *(.dynstr) }
.version: { *(.version) }
.version_d: { *(.version_d) }
.version_r: { *(.version_r) }
.rel.dyn: { *(.rel.dyn) }
.rela.dyn: { *(.rela.dyn) }
.rel.plt: { *(.rel.plt) }
.rela.plt: { *(.rela.plt) }
.init: { KEEP (*(.init)) }
.plt: { *(.plt) }
.text: { *(.text .text.*) }
.fini: { KEEP (*(.fini)) }
PROVIDE(__etext = .);
PROVIDE(_etext = .);
PROVIDE(etext = .);
.rodata: { *(.rodata .rodata.*) }
__exidx_start = .;
.ARM.exidx: { *(.ARM.exidx*) }
__exidx_end = .;
. = ALIGN (CONSTANT (MAXPAGESIZE)) — ((CONSTANT (MAXPAGESIZE) — .) & (CONSTANT (MAXPAGESIZE) — 1));
. = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
.tdata: { *(.tdata .tdata.*) }
.tbss: { *(.tbss .tbss.*) }
.preinit_array:
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
}
.init_array:
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
}
.fini_array:
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(.fini_array*))
PROVIDE_HIDDEN (__fini_array_end = .);
}
.dynamic: { *(.dynamic) }
.got: { *(.got.plt) *(.got) }
.data:
{
__data_start = .;
*(.data .data.*)
}
_edata = .;
PROVIDE(edata = .);
__bss_start = .;
__bss_start__ = .;
.bss:
{
*(.bss .bss.*)
. = ALIGN(. != 0? 32 / 8: 1);
}
__bss_end__ = .;
_bss_end__ = .;
. = ALIGN(4);
__end = .;
_end = .;
PROVIDE(end = .);
}

Программа собирается, но при попытке загрузить ее получаю сообщение load failed.

Со скриптом который шел в примере:
/* Entry Point */
ENTRY(Reset_Handler)

/* Highest address of the user mode stack */
_estack = 0x20020000; /* end of 128K RAM on AHB bus*/

/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */

/* Specify the memory areas */
MEMORY
{
FLASH (rx): ORIGIN = 0x08000000, LENGTH = 1024K
RAM (rwx): ORIGIN = 0x20000000, LENGTH = 128K
CCM (rwx): ORIGIN = 0x10000000, LENGTH = 64K
}

/* Define output sections */
SECTIONS
{
/* The startup code goes first into FLASH */
.isr_vector:
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH

/* The program code and other data goes into FLASH */
.text:
{
. = ALIGN(4);
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
*(.eh_frame)

KEEP (*(.init))
KEEP (*(.fini))

. = ALIGN(4);
_etext = .; /* define a global symbols at end of code */
_exit = .;
} >FLASH

.ARM.extab: { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
.ARM: {
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
} >FLASH

.preinit_array:
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array*))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH
.init_array:
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH
.fini_array:
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(.fini_array*))
KEEP (*(SORT(.fini_array.*)))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH

/* used by the startup to initialize data */
_sidata = .;

/* Initialized data sections goes into RAM, load LMA copy after code */
.data: AT ( _sidata )
{
. = ALIGN(4);
_sdata = .; /* create a global symbol at data start */
*(.data) /* .data sections */
*(.data*) /* .data* sections */

. = ALIGN(4);
_edata = .; /* define a global symbol at data end */
} >RAM

/* Uninitialized data section */
. = ALIGN(4);
.bss:
{
/* This is used by the startup in order to initialize the .bss secion */
_sbss = .; /* define a global symbol at bss start */
__bss_start__ = _sbss;
*(.bss)
*(.bss*)
*(COMMON)

. = ALIGN(4);
_ebss = .; /* define a global symbol at bss end */
__bss_end__ = _ebss;
} >RAM

/* User_heap_stack section, used to check that there is enough RAM left */
._user_heap_stack:
{
. = ALIGN(4);
PROVIDE ( end =. );
PROVIDE ( _end =. );
. =. + _Min_Heap_Size;
. =. + _Min_Stack_Size;
. = ALIGN(4);
} >RAM
}

линковщик ругается на отсутствие .rel.plt секции. После добавления этой секции, он ругается на неопределенную ссылку на __libc_init_array.

Прошу помощи со скриптом линковщика и если можно чуть подробнее описать процедуру загрузки и запуска программы в память и флеш stmки.

Прошу прощения за длинный коментарий :)
avatar

SilverSwift

  • 14 августа 2013, 07:21
+
0
«Скачать CodeBench можно на сайте компании-разработчика как в виде инсталлятора (рекомендую), так и простым архивом»

Скачал два варианта .bin — не устанавливаеться. получаю такое:
nemo@nemo-MS-1688 ~/Downloads $ ./arm-2013.05-24-arm-none-linux-gnueabi.bin
Checking for required programs: awk grep sed bzip2 gunzip
===============================================================
Error: DASH shell not supported as system shell
===============================================================
The installer has detected that your system uses the dash shell
as /bin/sh. This shell is not supported by the installer.
You can work around this problem by changing /bin/sh to be a
symbolic link to a supported shell such as bash.
For example, on Ubuntu systems, execute this shell command:
% sudo dpkg-reconfigure -plow dash
Install as /bin/sh? No
Please refer to the Getting Started guide for more information,
or contact CodeSourcery Support for assistance.
===============================================================
nemo@nemo-MS-1688 ~/Downloads $ sudo dpkg-reconfigure -plow dash
[sudo] password for nemo:
nemo@nemo-MS-1688 ~/Downloads $ sudo dpkg-reconfigure -plow dash arm-2013.05-24-arm-none-linux-gnueabi.bin
dpkg-query: package 'arm-2013.05-24-arm-none-linux-gnueabi.bin' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
/usr/sbin/dpkg-reconfigure: arm-2013.05-24-arm-none-linux-gnueabi.bin is not installed

, и в архиве(arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2). Linux Mint 15.

Если так, то подскажите куда надо распаковать архив ( в какую папку, или какие пути прописать), чтобы всё заработало.
Спасибо!
avatar

Nemo

  • 15 августа 2013, 22:27
+
0
В чем проблема в первом случае?

1. sudo dpkg-reconfigure -plow dash
На вопрос отвечаешь да.

2. Запускаешь установщик:
sudo ./arm-2013.05-24-arm-none-linux-gnueabi.bin

Должна пойти установка. НО! Судя по названию ты скачал инструментарий для сборки под встроенный в arm linux. Если не собираешься заливать линукс на стмку нужен дугой инструментарий. Мой назывался arm-2013.05-23-arm-none-eabi.bin
avatar

SilverSwift

  • 19 августа 2013, 08:21
+
0
Скачал инструментарий как у вас. Вторая попытка тоже без успеха:

nemo@nemo-MS-1688 ~/Tmp $ sudo dpkg-reconfigure -plow dash
[sudo] password for nemo: 
nemo@nemo-MS-1688 ~/Tmp $ sudo ./arm-2013.05-23-arm-none-eabi.bin
sudo: ./arm-2013.05-23-arm-none-eabi.bin: command not found
nemo@nemo-MS-1688 ~/Tmp $ 



avatar

Nemo

  • 19 августа 2013, 20:48
+
0
Могу угадать. Вероятнее всего не хватает прав на исполнение файла. chmod +x ./arm-2013.05-23-arm-none-eabi.bin поможет скорее всего. Если нет, то покажите листинг ls -l из каталога содержащего arm-2013.05-23-arm-none-eabi.bin
avatar

SilverSwift

  • 20 августа 2013, 07:28
+
0
Не работает

nemo@nemo-MS-1688 ~/Tmp $ sudo dpkg-reconfigure -plow dash
[sudo] password for nemo: 
nemo@nemo-MS-1688 ~/Tmp $ sudo ./arm-2013.05-24-arm-none-linux-gnueabi.bin
sudo: ./arm-2013.05-24-arm-none-linux-gnueabi.bin: command not found
nemo@nemo-MS-1688 ~/Tmp $ . chmod +x ./arm-2013.05-23-arm-none-eabi.bin 
bash: .: /bin/chmod: cannot execute binary file
nemo@nemo-MS-1688 ~/Tmp $ sudo . chmod +x ./arm-2013.05-23-arm-none-eabi.bin 
sudo: .: command not found
nemo@nemo-MS-1688 ~/Tmp $ 

листинг

nemo@nemo-MS-1688 ~/Tmp $ ls -l
total 222840
-rwxr-xr-x 1 nemo nemo 124565511 May 28 17:51 amd-driver-installer-catalyst-13-4-x86.x86_64.run
-rw-r--r-- 1 nemo nemo 103606667 Aug 19 21:37 arm-2013.05-23-arm-none-eabi.bin
drwxr-xr-x 4 nemo nemo      4096 Jul 23 23:37 LibreOffice_4.1.0.4_Linux_x86_deb
drwxrwxr-x 7 nemo nemo      4096 Jul 19 00:35 powertop-2.4
nemo@nemo-MS-1688 ~/Tmp $ 

avatar

Nemo

  • 20 августа 2013, 07:54
+
0
ОК. Из листинга видно что файл arm-2013.05-23-arm-none-eabi.bin имеет права -rw-r--r--. То есть прав на исполнение у вас нет. Значит их надо сперва получить, а затем пробовать исполнить скрипт. Для изменения прав доступа используется команда chmod, ее опция +x добавляет права на выполнение файла имя которого указывается после опции. Таким образом надо выполнить из каталога с файлом arm-2013.05-23-arm-none-eabi.bin команду: «chmod +x arm-2013.05-23-arm-none-eabi.bin»
Без точки и без кавычек, я точку поставил исключительно как знак препинания в конце предлоения :)))

После выполнения chmod смотрим появились ли права на исполнение (буква x) командой ls -l. Затем выполняем скрипт
sudo ./arm-2013.05-23-arm-none-eabi.bin

Если что не будет получаться присылай листинг.
avatar

SilverSwift

  • 20 августа 2013, 09:13
+
0
Достал я Вас уже… Права на исполнение есть, но дальше никак:

total 222840
-rwxr-xr-x 1 nemo nemo 124565511 May 28 17:51 amd-driver-installer-catalyst-13-4-x86.x86_64.run
-rwxr-xr-x 1 nemo nemo 103606667 Aug 19 21:37 arm-2013.05-23-arm-none-eabi.bin
drwxr-xr-x 4 nemo nemo      4096 Jul 23 23:37 LibreOffice_4.1.0.4_Linux_x86_deb
drwxrwxr-x 7 nemo nemo      4096 Jul 19 00:35 powertop-2.4
nemo@nemo-MS-1688 ~/Tmp $ sudo ./arm-2013.05-23-arm-none-eabi.bin
Checking for required programs: awk grep sed bzip2 gunzip
===============================================================
Error: DASH shell not supported as system shell
===============================================================
The installer has detected that your system uses the dash shell
as /bin/sh.  This shell is not supported by the installer.
You can work around this problem by changing /bin/sh to be a
symbolic link to a supported shell such as bash.
For example, on Ubuntu systems, execute this shell command:
   % sudo dpkg-reconfigure -plow dash
   Install as /bin/sh? No
Please refer to the Getting Started guide for more information,
or contact CodeSourcery Support for assistance.
===============================================================
nemo@nemo-MS-1688 ~/Tmp $ 

avatar

Nemo

  • 20 августа 2013, 18:38
+
0
Сделалал так sudo ln -sf bash /bin/sh, потом запуск установки — получилось! Спасибо огромногое!!!
avatar

Nemo

  • 20 августа 2013, 19:07
+
+1
Этим действием ты убрал из системы /bin/sh. Потом она может понадобиться для запуска какого-нибудь скрипта. Теоретически можно просто загрузиться с флешки или liveCD (естественно это должна быть та же версия дистрибутива что и устанволена на ПК) и скопировать /bin/sh с образа на винт в каталог /bin.

sudo mount /dev/sd[a..z][1..20] /mnt (как идентифицируются винты и работает mount советую разобраться самостоятельно, потом часто будет нужно)
sudo cp /bin/sh /mnt/bin
sudo umount /mnt
sudo reboot

Установщик сам же сказал выполни sudo dpkg-reconfigure -plow dash, а потом я запущусь, внимательнее надо ;)
avatar

SilverSwift

  • 21 августа 2013, 07:35
+
0
Туда же закиньте файл stm32l152rb.ld.
а где взять *.ld файл для другого микроконтроллера? у меня например SMT32F103RB
avatar

Nemo

  • 20 августа 2013, 20:18
+
0
Меня как-то смутило то, что по запросу SMT32F103RB гугл выдал всего 4 результата. Надо смотреть, что написано на корпусе чипа, а не на плате. Тогда скоре всего нужный скрипт очень быстро нагуглится.
Я бы сперва попробовал использовать приведенный в уроке скрипт, может быть все заработает.
stm32l152rb.ld — это скрипт линковщика в котором указано какие секции по каким адресам размещать в исполняемом файле, если у тебя тот же cortex-m3 то различия могут быть только в размере памяти и адресах. В этом случае поправить скрипт вполне реально. Инструкции есть, к примеру вот: fun-tech.se/stm32/linker/
avatar

SilverSwift

  • 21 августа 2013, 08:00
+
0
Спасибо!
avatar

Nemo

  • 21 августа 2013, 08:02
+
0
https://github.com/jeremyherbert/stm32vl-discovery-template-project/blob/master/stm32f100.ld

Я думаю этот скрипт пойдет идеально :)
avatar

SilverSwift

  • 21 августа 2013, 08:51
+
0
Какие новости по поводу win7(64)
avatar

Dmitriy_U

  • 28 августа 2013, 18:33
+
0
mingw/msys не ставил, какой make надо использовать с Eclipse. Тот что есть дает ошибку
makefile:12: *** missing separator.  Stop.

Может Eclipse но гдето подстроить.
avatar

Dmitriy_U

  • 29 августа 2013, 14:35
+
0
Вопрос решился, у меня в пути присутствовал символ #
C:\\#Project\STM\STM32\stm32vld_quickstart

именно он и мешал, с такой проблемой столкнулся впервые другие IDE пропускают.
avatar

Dmitriy_U

  • 1 сентября 2013, 19:28
+
0
Не могу заставить это штуку работать…
Если делать как в статье, то в этом месте "Сервер должен отреагировать кучей сообщений в консоли:" получаю не кучу сообщений, а ошибку:
GDB connected.
cannot recv: -2


Полный код запуска st-util:
vlad@linux-klyo:~/Program_Files/ST-LINK/stlink/gdbserver> ./st-util 
2013-10-11T15:51:47 INFO src/stlink-common.c: Loading device parameters....
2013-10-11T15:51:47 INFO src/stlink-common.c: Device connected is: F4 device, id 0x10016413
2013-10-11T15:51:47 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
Chip ID is 00000413, Core ID is  2ba01477.
Target voltage is 2880 mV.
Listening at *:4242...
KARL - should read back as 0x03, not 60 02 00 00
GDB connected.
cannot recv: -2
Listening at *:4242...
^C


Не выходит даже загрузить прошивку из терминала, без Eclipse. В туториале пишут использовать st-flash,
./st−flash writein.bin 0x8000000
но она принимает аргументом .bin-файл, а есть только .hex и .elf. С ними не грузит. Второй вопрос — как узнать в какой адрес памяти грузить прошивку? Или цифру 0x8000000 не надо трогать?

Буду очень благодарен за помошь.
avatar

vlad009

  • 11 октября 2013, 15:12
+
0
аналогичная беда.
avatar

kyb

  • 26 января 2014, 23:38
+
0
Решено.
1. установить плагин для аппаратной отладки Help->Install New Software C/C++ GDB Hardware Debugging;
2. идем Run->External Tools->External Tools Configurations... создаем новую конфигурацию. в поле location пишем /usr/local/bin/st-util или где у вас он;
3. идем Run->Debug Configurations->GDB Hardware Debugging Создать новую конфигурацию.
вкладка Main В поле C/C++ Application указываем расположение и название *.elf файла (Debug/test.elf), в поле Project название проекта (test).
вкладка Debug GDB command = arm-none-eabi-gdb или полный путь. Ставим галочку Use remote target. generic tcp/ip. localhost. 4242.
вкладка StartUp Ставим галочку Set breakpoint at = main. галочку Resume

благодарности we.easyelectronics.ru/STM32/otladka-stm32-v-srede-eclipsegcc.html
avatar

kyb

  • 29 января 2014, 07:31
+
0
Народ, а не подскажите как быть с Миландровским 1986ВЕ92У? Интересует как сделать скрипт MLD.ld и elf файл. И подойдет ли elf, выложенный тут we.easyelectronics.ru/cortex/sparivaem-coide-i-rossiyskiy-cortex-m3.html, собранный под CooCox.
avatar

Kvasshtain

  • 29 сентября 2014, 10:32
+
0
Здравствуйте. Очень интересная статья.
А чем изменится настройка среды для платы: NXP ARM Cortex-M3 lpc1768-mini-dk2 (http://www.ebay.com/itm/NXP-ARM-Cortex-M3-LPC1768-Mini-DK2-Development-board-/181045434143?hash=item2a2726171f). В качестве программатора/отладчика используется предыдущая версия: JetLink (http://starterkit.ru/html/index.php?name=shop&op=view&id=51), в продаже я ее не нашел уже. Я так понимаю, изменится Sourcery CodeBench Lite Edition на что-то другое и stlink на некую библиотеку jetlink, но где искать это все? Плата discovery у меня тоже имеется (stm32f3discovery ARM Cortex-M4 STM32F303VCT6), но у нее нет ethernet.
avatar

Vadim_nsk

  • 7 апреля 2015, 14:41
+
0
Здравствуйте. Возможно ли к вашей сборке под Винду прикрутить j-link?
avatar

almaz

  • 8 апреля 2015, 16:43
+
0
imageshack.com/a/img538/7901/yutDcN.png — не запускается, видимо потому что не видит мою плату, однако «Диспетчер устройств» и «STM32 ST-LINK Utility» видят подключенную плату. Windoiws 8.1
Кто нибудь знает, в чем может быть проблема?
avatar

dikh

  • 15 июля 2015, 19:45
+
0
Похоже на то, что Eclipse пытается запустить ваш .elf как обычный исполняемый файл. Вероятно, у вас ошибка в отладочной конфигурации, или вместо подключения к GDB server используется обычная. А вообще, данная статья устарела, лучше перепроверить по другим источникам.
avatar

burjui

  • 18 июля 2015, 14:24
+
0
После ознакомления с замечательной статьей
Попробовал настроить IDE для Fedora RFRemix release 22 (Twenty Two)
>uname -a
Linux sasha 4.0.8-300.fc22.x86_64 #1 SMP Fri Jul 10 21:04:56 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Опишу свои изыски.

1. Установил:
>sudo dnf install arm-none-eabi-gcc-cs-c++ eclipse-nls-ru eclipse-cdt-parsers qemu-system-arm eclipse-color-theme arm-none-eabi-gdb
2. Погуглив нашел ресурс:
3. Установил согласно инфы:
Installation of System Workbench for STM32 — Bare edition will be done through the standard Eclipse installer.

You should Start Eclipse then open menu «Help >> Install New Software»; this will open the «Available Software» dialog:

You must then create a new update site, to be able to install System Workbench for STM32 — Bare Metal Edition:

You should click on «Add:»
Then give a name to the update site (System Workbench for STM32 — Bare Machine edition) and set the location to www.openstm32.org/Eclipse-updates/org.openstm32.system-workbench.site
Then click «OK» to create the update site

Warning: During the beta phase the address to use is www.ac6-tools.com/Eclipse-updates/org.openstm32.system-workbench.site

Then you should select all of the OpenSTM32 tools and click «Next>»

You will then just have to accept the license and System Workbench for STM32 — Bare Metal edition will install itself in your Eclipse setup.

Note that you will probably have to restart Eclipse for the tools to be available; Eclipse will automatically suggest the restart.

4. Создал пустой проект для платы STM32L100C-DISCO.
5. Все запустилось с первого раза без бубна.

avatar

ink-servis

  • 20 июля 2015, 09:32

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.