Comments 40
Можно сильно сократить размер бинарника, если отказаться от использования .unwrap()
. Он использует стандартные средства форматирования, которые не оптимизированы для генерации короткого кода.
Подробнее можно посмотреть здесь: https://jamesmunns.com/blog/fmt-unreasonably-expensive/
Как-то сложно вы прошиваете, можно же прописать runner = "arm-none-eabi-gdb -q -x openocd.gdb"
в .cargo/config и прошивать с помощью gdb командой cargo run --release
, без всякой конвертации в bin. Пример этого есть в https://github.com/rust-embedded/cortex-m-quickstart
И ещё: почему в features указан stm32f100
, а не stm32f103
?
Интересно.
А есть листинг, посмотреть что получилось в ассемблере?
[STM32]: Correcting pullup resistor on blue pill board
amitesh-singh.github.io/stm32/2017/10/09/correcting-usbpullup-resistor.html
Подозреваю, это просто китайские гении маркетинга придумали "дешёвую блэк пилл", впаяв на новую плату старый контроллер. О таком странном гибриде только сейчас узнал.
UPD. извините, соврал. Картинки "black pill STM32F411" и "black pill STM32F103" заметно различаются.
Я правильно понимаю что функционал xargo теперь доступен для ARM прямо из дефолтного cargo?
Да. Xargo теперь нужен в очень редких случаях.
Строго говоря, небольшое подмножество, но если для большинства случаев его за глаза. IIRC, Jorge Aparicio (автор xargo
и большого количества крейтов для embedded) хотел втащить ещё больше функций, связанных с пересборкой libcore, liballoc, libcollections etc, в cargo
.
Для себя вижу 3 проблемы в эмбеддед расте:
Отвратительная документация и оформление репозиториев пакетов. Для запуска проекта используется несколько пакетов, у которых есть зависимости. У всех этих пакетов абсолютно одинаковый ридми на гитхабе (под копирку) и совсем непонятно что и как использовать.
Нет поддержки CAN-шины. Было уже 3 попытки написать поддержку CAN в embedded hal, но пока безуспешно. Было большое обсуждение, почему rust embedded еще нельзя использовать в боевых системах и отсутствие CAN — это один из пунктов.
Группа разработчиков из embedded rust — это как закрытый тайный орден, который общается в matrix. Хочешь что-то обсудить — разбирайся с matrix и кривыми клиентами.
Нет приличной RTOS, tockOS и RTFM не в счет.
НО, все 4 недостатка говорят только о текущем состоянии. Зато уже изначально есть terminal workflow (привет CI, автоматизация релизов и прочие вещи, полезные в IoT), который прекрасно работает на windows, mac и linux. И работать с такой инфраструктурой гораздо приятнее, чем с родными инструментами STM.
Вообще, остается добавить дефолтных файлов конфигурации для дебага в VS Code в cortex-m-quickstart + документацию и будет вообще отлично!
Должно быть — написал код, нажал кнопочку, сбилдилось, залилось в кристалл, далее отлаживаешься через тот же ST Link
А тут только на подготовку надо потратить полдня…
Я пользуюсь средой разработки Mikroe Pascal for ARM (можно и MiroE C++ for ARM), там как раз всё так и есть, как я описал — пишешь код, F9, отладка.
ПыСы. Начинайте минусить
Что, и даже Mikroe Pascal for ARM отдельным шагом устанавливать не пришлось?
Но можно не устанавливать, а просто распаковать ZIP-дистрибутив в папку
Линуксоиды помешаны на миллионах зависимостях, и не знают, как это — работать с комфортом
в зависимостях нет ничего ужасного, есть есть надежный и удобный менеджер зависимостей. В расте он есть, в линусе/мак ос х он есть, а вот в винде — нет.
Что именно входит в дистрибутив? В дистрибутив чего?
Помимо libc и самого языка Си в проекте могут использоваться библиотеки. Например, RTOS, FS и пр. Каким образом они подключаются и компилируются в C? Да как придётся. Хорошо, если есть CMake или Make в репозитории. Иначе бери, копируй файлы, компилируй всё сам. Так что непонятно что вас смутило в системе, которая значительно упрощает управление зависимостями проекта.
Ну, нельзя же запихать все зависимость внутрь IDE. Что-то да останется снаружи. Плюс, если они "идут", это значит что внутри IDE сделан такой же, только неявный, package manager, который всё это скачивает и встраивает в структуру.
А что из перечисленного тут следует настраивать полдня?
И после всего оказывается что ещё и CAN не доступен
Что значит недоступен? То, что готового драйвера нет, и придётся самому с регистрами работать?
Ну так это статья "пишем хелловорлд". Для нормальных боевых проектов всё равно придётся писать свой код со своими азартными играми и продажными женщинами.
Маленький проект проще скопипастить с другого маленького проекта со всеми его настройками.
Ну и в кейлах-иарах в package'ах, мягко говоря, далеко не все возможные библиотеки представлены.
на самом деле, прочитал всё, но не понял — зачем? я знаю, что еще и форт есть и фортран для STM32. но зачем???
А можно добавить ссылки на aliexpress на конкретную плату и программатор? Было бы офигенно, а то я, как полный чайник в stm, боюсь чего-нить не то купить :)
www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText=stm32f103c8t6<ype=wholesale&SortType=total_tranpro_desc&page=1&groupsort=1&isPlus=n
Какой путь проходит *.rs файл от написания до попадания в Flash?
Rust Embedded. Разработка под процессоры Cortex-M3 на примере отладочной платы STM32F103C8T6 (Black Pill)