0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14

Программирование микроконтроллеров

28.11.2024, 12:53. Показов 4184. Ответов 44

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток,
Я начал изучать программирование микроконтроллеров (и первым стал китайский на ядре RISC-V)
Уже несколько дней я мучаюсь и пытаюсь настроить среду для работы с ним, но все безуспешно
У меня стоит операционная систем Linux Fedora, хочу настроить или VSCode или Neovim для написания кода на C и последующей заливки на плату
Вроде бы и тулчейн поставил, и необходимые библиотеки, и пути прописал, но ничего не работает и постоянно какие то ошибки
Понимаю что вся проблема может быть кроется в том, что я абсолютный новичок, так что пожалуйста укажите мне верны путь
Можете подсказать что именно нужно делать, а лучше скажите те кто уже знает как нужно настроить среду для работы
Заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2024, 12:53
Ответы с готовыми решениями:

Программирование микроконтроллеров
Работаю в ImageCraft IDE for AVR. Хочу написать программу, которая бы считала функцию, не понимаю в чем ошибка. Y=X1X3X4 V X1X2X3 V...

Программирование микроконтроллеров
Всем привет, возникла проблема с кодом. Препод злюка не хочет помогать с этим. Суть проблемы. Пишу код на микроконтроллер Atmega 32, в...

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

44
Windows must die
610 / 883 / 104
Регистрация: 23.11.2021
Сообщений: 5,174
Записей в блоге: 19
06.12.2024, 13:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Какой смысл вот это дублировать на Си мне неизвестно.
Не дублировать на С, а целиком на С записывать.
Под STM32 стартап ведь на С! Почему бы подо все на С не писать? Я терпеть не могу использовать то, что не понимаю. А асм я не понимаю и не собираюсь понимать, мне это не нужно вообще!
Поэтому вместо "магии" я предпочитаю осмысленный код. Правда, у RISC-V код должен не с таблицы прерываний начинаться, как в ARM, а с каких-то невменяемых четырех байт, куда нужно умудриться что-то впихнуть (уж не помню, что). Я с первой попытки не придумал, как для этого правильно ld-скрипт нарисовать.
0
1507 / 524 / 76
Регистрация: 22.09.2023
Сообщений: 1,659
06.12.2024, 14:11
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Я с первой попытки не придумал, как для этого правильно ld-скрипт нарисовать.
Code
1
2
3
4
5
6
7
8
9
10
11
12
SECTIONS
{
    .text :
    {
        LONG(magic_number);
        KEEP(*(.isr_vector))
 
                ................
 
    } > FLASH
      .......
}
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
06.12.2024, 14:52
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Я терпеть не могу использовать то, что не понимаю. А асм я не понимаю и не собираюсь понимать
Чего там понимать-то?! Несчастные полсотни инструкций, из которых половина - копирование массивов. Даже не зная асма risc-v, со справочником разобраться дело пары часов.
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Правда, у RISC-V код должен не с таблицы прерываний начинаться, как в ARM, а с каких-то невменяемых четырех байт
Как раз в risc-v сделано гораздо более логично. Код просто выполняется с первой же инструкции. Все. Но если хотите в начале разместить таблицу прерываний, сделайте первой инструкцией безусловный переход на начало программы (j handle_reset). Но вообще-то таблица прерываний настраивается в том же стартапе:
Assembler
1
2
3
la t0, _vector_base
ori t0, t0, 3  # Организация прерываний. 0-один обработчик на все, 2-таблица джампов, 3-таблица адресов
csrw mtvec, t0
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Я с первой попытки не придумал, как для этого правильно ld-скрипт нарисовать.
Кусок стартапа, написанный wch:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SECTIONS
{
 
    .init :
    {
        _sinit = .;
        . = ALIGN(4);
        KEEP(*(SORT_NONE(.init)))
        . = ALIGN(4);
        _einit = .;
    } >FLASH AT>FLASH
 
  .vector :
  {
      *(.vector);
      . = ALIGN(64);
  } >FLASH AT>FLASH
 
    .text :
    {
        . = ALIGN(4);
        *(.text)
        *(.text.*)
        *(.rodata)
        *(.rodata*)
        *(.glue_7)
        *(.glue_7t)
        *(.gnu.linkonce.t.*)
        . = ALIGN(4);
    } >FLASH AT>FLASH
Никто ведь не заставляет писать его с нуля. Как и стартап. Достаточно проглядеть то, что уже написано, убедиться, что нет откровенного бреда, и спокойно пользоваться. Например, в стартапе от wch в конце main вызывается с пониженными правами. Не ядра (M-mode), а юзера (U-mode). В некоторых случаях это неудобно.
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
11.12.2024, 13:47  [ТС]
Господа, я все таки смог подключить микроконтроллер
ошибка была до смешного глупой - подключался не через тот интерфейс
Но это уже не важно, так как у меня новая проблема)
Не компилируется программа
Ни в какую, просто на отрез отказывается

Ввожу программу через терминал riscv32-unknown-linux-gnu-gcc -I /usr/local/include -o main.elf main.c
и выдает вот такие сообщения:

/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: /tmp/ccoFjKmB.o: in function `GPIO_Toggle_INIT':
main.c:(.text+0xc): undefined reference to `RCC_APB2PeriphClockCmd'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0x3c): undefined reference to `GPIO_Init'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0x8a): undefined reference to `GPIO_Init'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: /tmp/ccoFjKmB.o: in function `main':
main.c:(.text+0xa6): undefined reference to `NVIC_PriorityGroupConfig'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0xb0): undefined reference to `Delay_Init'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0xbe): undefined reference to `USART_Printf_Init'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0xc6): undefined reference to `SystemCoreClock'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0xca): undefined reference to `SystemCoreClock'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0xf2): undefined reference to `GPIO_ReadInputDataBit'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0x140): undefined reference to `Delay_Ms'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0x15c): undefined reference to `Delay_Ms'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0x194): undefined reference to `Delay_Ms'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0x1b0): undefined reference to `Delay_Ms'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: main.c:(.text+0x1e8): undefined reference to `Delay_Ms'
/opt/riscv/lib/gcc/riscv32-unknown-linux-gnu/14.2.0/../../../../riscv32-unknown-linux-gnu/bin/ld: /tmp/ccoFjKmB.o:main.c:(.text+0x204): more undefined references to `Delay_Ms' follow
collect2: error: ld returned 1 exit status

Интересен тот факт, что на Федоре работает а вот на Арче нет
Хочется как то исправить это (так как планирую полностью на Арч перейти)
буду признателен вам снова
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
11.12.2024, 15:47
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
/opt/riscv/lib/gcc/
Нестандартный путь к компилятору (точнее стандартный, но для программ, установленных противоестественным образом). Возможно, библиотеки он пытается искать по стандартным путям. Что-то вроде /usr/riscv64-linux-gnu/lib. Вы можете указать нужный каталог ключом -L. Где эти Delay_Ms и прочие USART_Printf_Init хранятся у вас, я не знаю. У меня-то нигде.
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
11.12.2024, 16:18  [ТС]
Не помогло
Все равно та же самая ошибка
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
11.12.2024, 17:15
А хотя бы простейшая программа, не завязанная на посторонние библиотеки, работает? Вон хоть из моих статей возьмите пример для v303 на асме. Насколько я помню, уж в блинке-то ничего специфичного не будет.
А вообще - как вы предлагаете вам помогать? Какую прошивку вы пытаетесь скомпилировать неизвестно. Какие флаги компилятору выставляете неизвестно. Что у вас куда подключено на плате неизвестно. Даже компилятор какой-то левый используется.
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
11.12.2024, 20:38  [ТС]
По порядку
Простейшая программа, со стандартными библиотеками, работает
Код на асме не пробовал, но попробую согласно вашему совету
Собственно блинк я и пытался залить
На счет остального:
Прошивку взял из гита для этой платы (и как уже упоминал на федоре все работает и светодиоды мигали)
Из флагов только указывал место положение библиотек через -I (если я правильно понял что это)
К плате ничего не подключается, пользуюсь только тем что уже на ней есть
А компилятор я собрал из исходников, найденных на просторах гитхаба, только там нашел для 32 битного микроконтроллера тулчейн
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
11.12.2024, 21:00
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
К плате ничего не подключается, пользуюсь только тем что уже на ней есть
То есть на ней есть как минимум светодиоды. На каких ногах?
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
А компилятор я собрал из исходников, найденных на просторах гитхаба
Чем не устроил вариант из репозитория? Быть не может, чтобы в Федоре / Арче не было компилятора risc-v. В Debian и Alt точно есть.
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
Простейшая программа, со стандартными библиотеками, работает
Но что-то же не работает?
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
Из флагов только указывал место положение библиотек через -I (если я правильно понял что это)
-I это для заголовочников. Есть еще -L для самих библиотек.
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
12.12.2024, 11:13  [ТС]
Светодиод на ноге PC0
Из пакетного менеджера по дефолту стоит компилятор для 64 битной архитектуры, а у меня 32 битная

Добавлено через 26 минут
Кстати ваш код на асме работает и все загружает на плату проблем не возникает
Может тоже Makefile использовать нужно
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
12.12.2024, 11:25
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
Из пакетного менеджера по дефолту стоит компилятор для 64 битной архитектуры, а у меня 32 битная
Это неважно, он и 32-битную соберет. У меня ведь тоже в makefile прописано riscv64-unknown-elf-gcc. Главное флаги архитектуры правильно указать. У v307 это rv32imafc. Ну еще _zicsr можно добавить, если CSR-регистры нужны.
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
Кстати ваш код на асме работает и все загружает на плату проблем не возникает
Может тоже Makefile использовать нужно
Насколько я понял, Eclipse (в том числе Mounriver studio) тоже формирует makefile. И ему даже можно указать свой. Но я IDE-шками давно не пользовался, и тратить пару часов на поиски куда они эту настройку засунули, не хочу.
В принципе, если вы действительно хотите научиться работать с контроллерами, освоить и makefile, и ассемблер в любом случае лишним не будет. Да и вообще - интересно же, как работает та магия, которая превращает высокоуровневый код в мигающую диодом железку.
1
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
12.12.2024, 11:51  [ТС]
Ну вот я тоже хочу избавиться от IDE
В IDE то оно все работает, но это как-то не то
Не нравятся мне они

Попробую скомпилировать с 64 битной
0
Windows must die
610 / 883 / 104
Регистрация: 23.11.2021
Сообщений: 5,174
Записей в блоге: 19
12.12.2024, 11:59
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
Не нравятся мне они
Ну вот не надо совсем от IDE отказываться! Ведь там и подсветка синтаксиса, и статический анализатор, и помощь по рефакторингу, и автоматический переход между окнами на реализацию конкретной функции или в ее определение и т.д., и т.п.
Просто все должно быть прозрачно, как в qt-creator, а не спрятано неизвестно где, как в каком-нибудь "кубе". И Makefile надо самому писать, чтобы не ловить потом непонятные баги. И с большой осторожностью пользоваться чужим кодом (особенно от "копрораций").
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
12.12.2024, 12:05  [ТС]
Быть может
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
12.12.2024, 12:26
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
Ну вот я тоже хочу избавиться от IDE
Вы по ссылке на мои статьи ходили? Там же вроде все рассказано как работать с такими камнями без IDE
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Ну вот не надо совсем от IDE отказываться! Ведь там и подсветка синтаксиса, и статический анализатор
Ну, подсветка синтаксиса и простенькое автодополнение даже в kwrite есть. Да что там - кажется, даже в виндовом notepad+ есть (хотя не уверен). Переход к объявлению чаще нужен при анализе чужого кода, чем при написании своего. Но да, полезная фича. Как и вызов make или другой команды по хоткею. Этого немного не хватает. Но в принципе не критично.
---
В любом случае, отказ от IDE поможет разобраться с магией, которая там творится. Формирование makefile, вызов компилятора и прочего, настройки "проекта". Потом можно и вернуться, никто ж не придет пальцем тыкать "фу, IDE-шник, настоящие программисты только в vim ed работают!"
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
12.12.2024, 12:43  [ТС]
Я потихоньку перехожу на neovim/терминал и мне пока все нравится
А ed что такое?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
12.12.2024, 13:31
Цитата Сообщение от Patrik_Jane Посмотреть сообщение
А ed что такое?
Редактор такой. Чуть-чуть поудобнее чем sed
1
Windows must die
610 / 883 / 104
Регистрация: 23.11.2021
Сообщений: 5,174
Записей в блоге: 19
12.12.2024, 14:14
Цитата Сообщение от Azathtot Посмотреть сообщение
Чуть-чуть поудобнее чем sed
У, какая я деревня: думал, что ed — редактор ☺
Оказывается, реально, хрен им тексты понабираешь…
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
12.12.2024, 15:36
Если я правильно помню, ed - редактор еще времен использования принтера вместо экрана. Соответственно и редактирование выглядит как последовательность команд "исправь в 5 строке то на это", "добавь строку после 8" и т.д. На принтере-то курсор особо не подвигаешь.
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
12.12.2024, 16:03  [ТС]
И это удобно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2024, 16:03

Визуальное программирование микроконтроллеров
Создаю визуальную среду для построения алгоритмов работы будущих устройств. Данная среда использует язык программирования приближенный к...

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

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

С чего начать? программирование микроконтроллеров
Здрасьте. Хочу начать заниматься программированием микроконтроллеров. Хотел бы купить все необходимое для начала, но проблема в том что я...

Программирование микроконтроллеров на базе STM32F407VET
Имеется плата...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru