Перейти к содержанию

CH32V

  • записей
    8
  • комментариев
    12
  • просмотра
    3 073

Среда разработки MounRiver Studio


zhevak

4 588 просмотров

Интегрированная среда разработки MountRiver Studio предназначена для работы с проектами на базе микроконтроллеров CH32V. Среда выпускается для трёх основных платформ — для Виндовс, для Линукса и для Макоси.

Причём, версии для Линукса выходят с небольшой задержкой и, как мне видится, выходят за авторством не фирмы, а некоторого сообщества. Это я так думаю, так как в версии для Винды среда называется MountRiver Studio, а в версии для Линукса — MountRiver Studio Community. Я не особо копался, но на первый взгляд эти версии не особо друг от друга отличаются. Я поигрался и с той, и с другой. Обе работают, по их работе вопросов не возникает.

Где брать эту среду? Опять там же, откуда забирали тулчейн — с сайта mounriver.com, вот, ссылка:

http://www.mounriver.com/download

Только на это раз нужно тыкать мышкой здесь (, а не там, где был курсор мышки на картинке в предыдущей статье). Вот, снимок экрана для ориентации:

2023-05-16-18-00-40.png.05a40ba6eb987be7041162534f9bfc20.png

Получив сжатый архив его нужно развернуть. Как это сделать, написано в предыдущей статье про тулчейн. Всё нужно делать примерно так же. Сложного ничего нет.

После раскрытия архива нужно зайти в директорий MounRiver_Studio_Community_Linux_x64_V130/beforeinstall и запустить на выполнение скрипт start.sh.

После этого можно запускать среду разработки. Исполняемый файл находится в директории MounRiver_Studio_Community_Linux_x64_V130/MRS_Community и называется MounRiver Studio_Community. Вот, его и нужно запустить.

Конечно, каждый раз ползать по директориям в поисках программы, которую нужно стартануть, это как-то не по-Виндовому. По-виндовому — это когда все операции выполняешь мышкой. Поэтому для любителей Винды и тех, кто ещё не освоился в приёмах работы в Линуксе, объясняю как сделать себе приятно.

Идём в директорий .local/share/applications и там создаём файл mrs.desktop:

2023-05-16-18-19-25.png.7f733cf93360c6850cc8bf18b9e3f874.png

, вот, с таким содержимым:

2023-05-16-18-39-00.png.c85ceaec142f175ff2df40ccaf3749fc.png

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

[Desktop Entry]
Type=Application
Name=MounRiver Studio Community
Version=1.50
Encoding=UTF-8
Comment=Среда разработки для CH32V
Exec=/home/alex/bin/MounRiver_Studio_Community_Linux_x64_V150/MRS_Community/MounRiver\ Studio_Community %u
Icon=/home/alex/bin/MounRiver_Studio_Community_Linux_x64_V150/MRS_Community/icon.xpm
MimeType=x-scheme-handler/eclipse+command;x-scheme-handler/eclipse+mpc;
Categories=Development;Application;
Terminal=false

Не ошибитесь при создании файла! Я развернул среду разработки в директории /home/alex/bin/, а у вас будет скорее всего что-то своё. Кроме того, обратите внимание на экранирующий символ обратной косой черты («\») и пробел за ним, которые находятся в средине названия программы:

MounRiver\ Studio_Community

В названии программы присутствует пробел, поэтому, что бы название воспринималось правильно (а не как два независимых названия) нужно этот пробел учесть. Существует два способа. Первый — это перед пробелом «воткнуть» экранирующий символ. Второй — всю строку после знака равенства взять в кавычки или в апострофы.

После того, как в директории появится этот файл, в главном меню должен отобразиться пункт «Программирование», а в нём подпункт «MounRiver Studio_Community»

img_20100101_050139.thumb.jpg.a3be0a6700d0c6ddaf47ac1d4627ebf5.jpg

Ну, вот, теперь можно топать по этому пункту меню и долго-долго ждать, пока среда разработки (созданная созданная, к стати, на базе Eclipse, если кто заметил это по значку в главном меню) загрузится.

Снимок экрана в 2023-09-05 01-53-12.png

Скажу честно, я не часто пользуюсь средами разработки.

Эту среду разработки я установил только для того чтобы «выудить» из неё файлы с исходными текстами, необходимые для создания проекта. Там есть одна заветная папочка, а в ней — вкусняшки!

2023-05-16-19-13-30.png.eaeca30b5d0b7e6a3f6becf6593592b6.png

Поскольку я в данный момент работаю с CH32V003F4P6, то мне нужен соответствующий файл.

В этом сжатом архиве содержатся исходные файлы, необходимые для создания проектов. Нужно их извлечь из архива с помощью команды

$ unzip CH32V003F4P6.zip

Но прежде чем это сделать, этот файл лучше перенести куда-нибудь в отдельный директорий, иначе извлечённые из него поддиректории будут помещены рядом с этим и другими файлами. Просто потом запутаетесь.

Честно говоря, код в этих исходниках не очень качественный. Эти файлы нужны нам как основа для проектов и как база для понимания некоторых вещей. На базе этих файлов мы будем создавать свои файлы и потом подключать их в свои проекты.

Мне также не нравится сама суть создания программного обеспечения с помощью этих файлов, точнее способ создания проектов, в которых участвуют эти файлы. Ну, я уже в каких-то статьях приводил цифры создания «голых» проектов. Я это делал с помощью Makefile, пролистайте немного назад блог, если это вам интересно.

Там были цифры примерно 400 и 600 байт за пустую программу, которая ничего не делает. Если делать такую же пустую программу в среде разработки, делать «по-правильному», то получается программа, объём которой примерно 6-7 килобайт. То есть примерно раз в 10 больше.

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

Конечно, менеджеры разных мастей вам объяснят, что это как бы «ядро» вашей программы, и дальнейший рост объёма кода будет значительно меньший. Ну, то есть, если вы дописали немного своего кода, то размер программы увеличится на пару килобайт. Не существенно. Тем более, что до исчерпания размера флеш-памяти ещё далеко.

Тот же функционал, реализованный, без этого «ядра» и без (советского) сервиса, навязанного в нагрузку, добавит к имеющимся 400-600 байтам примерно 1-1.5 килобайта. То есть даже меньше, чем в первом случае. Таким образом, общий объём кода составит примерно 2 килобайта вместо 10 килобайт.

На первый взгляд экономия странная, и мне сложно объяснить, чем этот подход лучше. Но есть единственный аргумент — если вы не плохо разбираетесь в программировании, то посмотрите на предоставленные исходники. Это ж ужас какой-то! Честно говоря, я не хочу их напрямую использовать в своих (даже не коммерческих) проектах. Ну его нахрен!

Тот код в исходниках, который я просмотрел, он вполне рабочий. Но, блин, это что-то!

Примеры?

Их есть у меня!

В количествах.

Возьмём для примера файл system_ch32v00x.c.

2023-05-16-19-48-18.png.2b7ca5fb16833427e5ab54543c17cc9d.png

Здесь на фрагменте осуществляется задание источника и и частоты тактирования.

Почему бы две конструкции — строки 26-40 и 48-60 — не объединить в одну?

А вот это что такое:

2023-05-16-19-51-19.png.0dda1dd27f91a51dac8abb3b6f5c59cd.png

 

А потом — вот ещё:

2023-05-16-19-52-49.png.03b56af71375dbeff52544eaa3db9921.png

и ещё примерно так же пять раз! Чё за винегрет такой из кода сотворили и тщательно перемешали? А самое главное — зачем? Можно же гораздо проще и самое главное — понятнее было написать.

Ладно идем дальше.

На этом же снимке экрана, обратите внимание на строку 175. А-а? Каково?

Хотите ещё «индусского кода?» — Да, пожалуйста!

2023-05-16-19-57-51.png.69f771a8d265b1a8bb174328ba860917.png

Строка 254 — что это? Откуда взялось число 15? Понятно, что это 15- бит. Но что это?

Разбираясь в этих исходниках я нашел, что это есть константное значение AFIO_PCFR1_PA12_REMAP, которое определено в файле ch32v00x.h.

Точно так же вместо числа 0x04 в строке 290 следует подставить имя RCC_SWS_HSE.

Авторы же используют в программе такие имена как RCC_SW, FLASH_ACTLR_LATENCY_0 и другие. Что мешало подставить вместо чисел имена? Не понятно.

Хорошо. Идём дальше. Строка 268 — что такое RESET?

Занимаюсь поиском этого имени и нахожу, что это есть, вот, что:

2023-05-16-20-09-37.png.1d733953f0511f834f9d18bdea1a52c8.png

Ага. Теперь понятно. Это есть флаг состояния. Но, блин, какое отношение этот флаг имеет к значению замаскированных битов регистра?

Ну, хорошо. Допустим, авторы считают, что имеет. Поэтому код именно такой.

А что делать со строками 268-275? Почему бы сразу не присваивать переменной HSEStatus значение этого флага и не изгаляться с числами 0x00 и 0x01, которые ещё и сдобрили преобразованием типов.

Ладно. Проехали! А что делать с блоком 268-293? На ккккой хрен это нужно было выделять в виде отдельного блока? Почему нельзя было сразу внести этот код в строки 269-271 ?

И как вишенка на торте — строки 296-299!

Типа внешний тактовый генератор навернулся, но мы не знаем что делать. Юзверь может, сам добавить сюда свой код обработки ошибки. Если, конечно, юзверь сюда залезет и увидит это говнокод.

Ну, молодцы. Чо!

И такого дерьма по всем файлам наложено.

Оно, конечно, как-то работает. Но ну его нафик. Нафик!

Поэтому, если вы не (прости-госпади!) ардуинщики, то однозначно нужно пилить свой код. Чем мы и займёмся далее. Точнее — я займусь. Но буду ли я выкладывать свои записи в общий доступ, это зависит от того — нужны ли они кому-то. Пока вижу, что не нужны. А, ну и ладно!


Статью можно обсудить в Телеграм-группе https://t.me/ch32v

Изменено пользователем zhevak

1 Комментарий


Рекомендуемые комментарии

Отличный гайд, спасибо. Ставил на Ubuntu 22.04, рядом стоит Cube IDE и ESP-IDF и компиляторы АРМ-овские глобально с OCD. Переживал, что поломается, что нибудь, но повезло все нормально соседничает.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Добавить комментарий...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...