Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14

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

28.11.2024, 12:53. Показов 4062. Ответов 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
605 / 878 / 104
Регистрация: 23.11.2021
Сообщений: 5,161
Записей в блоге: 19
06.12.2024, 13:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Какой смысл вот это дублировать на Си мне неизвестно.
Не дублировать на С, а целиком на С записывать.
Под STM32 стартап ведь на С! Почему бы подо все на С не писать? Я терпеть не могу использовать то, что не понимаю. А асм я не понимаю и не собираюсь понимать, мне это не нужно вообще!
Поэтому вместо "магии" я предпочитаю осмысленный код. Правда, у RISC-V код должен не с таблицы прерываний начинаться, как в ARM, а с каких-то невменяемых четырех байт, куда нужно умудриться что-то впихнуть (уж не помню, что). Я с первой попытки не придумал, как для этого правильно ld-скрипт нарисовать.
0
1502 / 520 / 75
Регистрация: 22.09.2023
Сообщений: 1,645
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
4130 / 2708 / 433
Регистрация: 09.09.2017
Сообщений: 12,040
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
4130 / 2708 / 433
Регистрация: 09.09.2017
Сообщений: 12,040
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
4130 / 2708 / 433
Регистрация: 09.09.2017
Сообщений: 12,040
11.12.2024, 17:15
А хотя бы простейшая программа, не завязанная на посторонние библиотеки, работает? Вон хоть из моих статей возьмите пример для v303 на асме. Насколько я помню, уж в блинке-то ничего специфичного не будет.
А вообще - как вы предлагаете вам помогать? Какую прошивку вы пытаетесь скомпилировать неизвестно. Какие флаги компилятору выставляете неизвестно. Что у вас куда подключено на плате неизвестно. Даже компилятор какой-то левый используется.
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
11.12.2024, 20:38  [ТС]
По порядку
Простейшая программа, со стандартными библиотеками, работает
Код на асме не пробовал, но попробую согласно вашему совету
Собственно блинк я и пытался залить
На счет остального:
Прошивку взял из гита для этой платы (и как уже упоминал на федоре все работает и светодиоды мигали)
Из флагов только указывал место положение библиотек через -I (если я правильно понял что это)
К плате ничего не подключается, пользуюсь только тем что уже на ней есть
А компилятор я собрал из исходников, найденных на просторах гитхаба, только там нашел для 32 битного микроконтроллера тулчейн
0
 Аватар для COKPOWEHEU
4130 / 2708 / 433
Регистрация: 09.09.2017
Сообщений: 12,040
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
4130 / 2708 / 433
Регистрация: 09.09.2017
Сообщений: 12,040
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
605 / 878 / 104
Регистрация: 23.11.2021
Сообщений: 5,161
Записей в блоге: 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
4130 / 2708 / 433
Регистрация: 09.09.2017
Сообщений: 12,040
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
605 / 878 / 104
Регистрация: 23.11.2021
Сообщений: 5,161
Записей в блоге: 19
12.12.2024, 14:14
Цитата Сообщение от Azathtot Посмотреть сообщение
Чуть-чуть поудобнее чем sed
У, какая я деревня: думал, что ed — редактор ☺
Оказывается, реально, хрен им тексты понабираешь…
0
 Аватар для COKPOWEHEU
4130 / 2708 / 433
Регистрация: 09.09.2017
Сообщений: 12,040
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
Ответ Создать тему
Новые блоги и статьи
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru