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

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

28.11.2024, 12:53. Показов 4511. Ответов 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
Нарушитель
445 / 885 / 106
Регистрация: 23.11.2021
Сообщений: 5,200
Записей в блоге: 19
06.12.2024, 13:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Какой смысл вот это дублировать на Си мне неизвестно.
Не дублировать на С, а целиком на С записывать.
Под STM32 стартап ведь на С! Почему бы подо все на С не писать? Я терпеть не могу использовать то, что не понимаю. А асм я не понимаю и не собираюсь понимать, мне это не нужно вообще!
Поэтому вместо "магии" я предпочитаю осмысленный код. Правда, у RISC-V код должен не с таблицы прерываний начинаться, как в ARM, а с каких-то невменяемых четырех байт, куда нужно умудриться что-то впихнуть (уж не помню, что). Я с первой попытки не придумал, как для этого правильно ld-скрипт нарисовать.
0
1515 / 531 / 77
Регистрация: 22.09.2023
Сообщений: 1,691
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
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
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
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
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
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
11.12.2024, 17:15
А хотя бы простейшая программа, не завязанная на посторонние библиотеки, работает? Вон хоть из моих статей возьмите пример для v303 на асме. Насколько я помню, уж в блинке-то ничего специфичного не будет.
А вообще - как вы предлагаете вам помогать? Какую прошивку вы пытаетесь скомпилировать неизвестно. Какие флаги компилятору выставляете неизвестно. Что у вас куда подключено на плате неизвестно. Даже компилятор какой-то левый используется.
0
0 / 0 / 0
Регистрация: 28.12.2020
Сообщений: 14
11.12.2024, 20:38  [ТС]
По порядку
Простейшая программа, со стандартными библиотеками, работает
Код на асме не пробовал, но попробую согласно вашему совету
Собственно блинк я и пытался залить
На счет остального:
Прошивку взял из гита для этой платы (и как уже упоминал на федоре все работает и светодиоды мигали)
Из флагов только указывал место положение библиотек через -I (если я правильно понял что это)
К плате ничего не подключается, пользуюсь только тем что уже на ней есть
А компилятор я собрал из исходников, найденных на просторах гитхаба, только там нашел для 32 битного микроконтроллера тулчейн
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
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
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
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
Нарушитель
445 / 885 / 106
Регистрация: 23.11.2021
Сообщений: 5,200
Записей в блоге: 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
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
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
Нарушитель
445 / 885 / 106
Регистрация: 23.11.2021
Сообщений: 5,200
Записей в блоге: 19
12.12.2024, 14:14
Цитата Сообщение от Azathtot Посмотреть сообщение
Чуть-чуть поудобнее чем sed
У, какая я деревня: думал, что ed — редактор ☺
Оказывается, реально, хрен им тексты понабираешь…
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
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
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru