Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Откуда берется начало

Вт мар 07, 2023 08:23:32

Всем доброго дня! Надеюсь пишу в ту тему. У меня следующая проблема: у меня нет представления (знания) программирования микрокотроллеров без библиотек. То есть я хочу понять, что является началом, ведь все библиотеки(например SPL, HAL) это библиотеки определенного уровня абстракции, но ведь они должны быть написаны из самого начала, из чего-то, то есть каких-то команд наверное. Даже библиотека CMSIS не является началом, как я понял.
уточню, я понимаю, что есть компилятор, который, так сказать, переводит написанную нами программу(текстовую, например на С) в машинный код. И я хочу понять, что именно компилятор понимает, он же не понимает именно функции целые, а понимает какие-то команды, или что? А может подскажите где и что можно почитать что бы это понять?
Я пробовал заходить в глубь библиотек и смотреть что да как, но я все равно не могу понять.
Надеюсь я свою мысль передал понятно

Re: Откуда берется начало

Вт мар 07, 2023 08:50:46

Чтобы не чувствовать, что программные библиотеки "волшебные"(прогр. код не писали люди, а код там просто есть), начните с самого нижнего уровня: напишите led blink, а затем: led blink в библиотеке, напр. с выбор "мигающего" выхода, время включения, время выключения ... Затем используйте встроенную библиотеку в некоторых других своих новых программах. ... После этого будет легко.

Re: Откуда берется начало

Вт мар 07, 2023 09:10:23

Что значит "с самого нижнего уровня"?
Что бы реализовать мигание светодиода, нужен как минимум CMSIS, а это уже библиотека

Re: Откуда берется начало

Вт мар 07, 2023 09:34:10

Не беспокойтесь об использовании библиотек в новой библиотеке. В данном случае: просто для понимания.
Все функции такие - из библиотек, которые кто-то написал для нас для использования

Re: Откуда берется начало

Вт мар 07, 2023 11:39:37

CMSIS, больше не библиотека, а словарь. Во всяком случае, те заголовочники, которыми обычно пользуюсь я в своих проектах.
Он содержит мнемонические названия регистров.
Ведь писать
Код:
volatile *(uint32_t *) 0x4001080C = 0x0001;

гораздо сложнее, чем
Код:
GPIOA->ODR = 0x0001;

* Взял первый попавшийся заголовочник - STM32F103x6

Плюс, самый минимум для того, чтобы заставить работать прошивку контроллера, потребуется ещё линкер и его скрипт (которые раскажут куда складывать какие участки кода), startup файл (с таблицей векторов прерываний). Остальное можно написать самому.

Самое начало - ассемблер. Да и то использует таблицу регистров.
Для AVR что-то типа такой. Формально, именно такие преобразования можно считать самым началом. Примерно так программировали первые компьютеры.
А потом пошло упрощение для облегчения и ускорения программирования. Затем (и примерно в то же время) пошли библиотеки с готовыми функциями, потом выше, выше, выше... И вот мы пришли к HAL - библиотека уровня абстракции от железа. Универсальная - код можно *теоретически* написать на F7* чипе и с минимальными изменениями заставить работать на F0* кристаллах. Но тут я взял слишком радикальный пример.
А на SPL придётся многое переписывать. Про CMSIS - вообще молчу. Есть у меня несколько заготовок кода, которые мигрируют между разными проектами и при переходе с ядра на ядро приходится их допиливать, потому что регистры отличаются. Каких-то нет, какие-то не имеют отдельных битов. И так далее.

Re: Откуда берется начало

Вт мар 07, 2023 13:35:47

maksimdag0, начинайте с заголовочного файла микроконтроллера. В нём "обозваны" и размещены в памяти регистры микроконтроллера, через которые программа и управляет контроллером. Когда поймёте как данные из программы попадают в регистры контроллера, то остальное дело техники. Читаете RM и делаете как там написано.

Re: Откуда берется начало

Вт мар 07, 2023 20:30:24

Добрый вечер! Спасибо всем за ответы, особенно вам "AlanDrakes", все подробно расписали.
Кажется я понял какой ответ на мой вопрос:
У каждого языка есть определенный синтаксис, который понимает компилятор(AlanDrakes назвал это мнемоническими названиями регистров как я понял). Но писать таким синтаксисом трудоемко и сложно, поэтому создали библиотек CMSIS, ну а дальше уже относительно библиотеки CMSIS создали следующую и так далее. То есть самое начало, именно в языке си, это тот самый синтаксис, который понимает компилятор для языка СИ (например типы int, float,char.... или операторы if else и тд).
Правильно ли я понял?

Re: Откуда берется начало

Вт мар 07, 2023 21:35:40

maksimdag0, да не важно, что Вы поняли, это пока ничего не стоит. Вы стали на путь познания! Для творческого пути Вам нужно освоить инструменты. Лучший путь с учителем, но можно и самому, гугл в помощь. Разные языки отличаются уровнем абстракции и Ваш мозг имеет разную к ним восприимчивость. Пробуйте, испытуйте свои способности и станете на свою стезю!

Re: Откуда берется начало

Вт мар 07, 2023 21:38:37

Дело в том, что я уже давно программирую(есть проекты), но детального представления того, что я спрашивал - не было.

Re: Откуда берется начало

Ср мар 08, 2023 17:39:24

Если вдруг захотите, можете полистать мои заметки по работе с контроллером (правда, risc-v, а не arm, но суть примерно одинаковая). Там и про то откуда берутся адреса периферии, и кто инициализирует Си-шные переменные. Разумеется, это не истина в последней инстанции, а так, общее представление сформировать. В arm немного по-другому устроен ассемблер, работа со стеком, старт контроллера, прерывания и многое другое, но зная что и для чего делается, гораздо проще понимать и особенности вашего камня.
Ответить