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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

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

Сообщение maksimdag0 »

Всем доброго дня! Надеюсь пишу в ту тему. У меня следующая проблема: у меня нет представления (знания) программирования микрокотроллеров без библиотек. То есть я хочу понять, что является началом, ведь все библиотеки(например SPL, HAL) это библиотеки определенного уровня абстракции, но ведь они должны быть написаны из самого начала, из чего-то, то есть каких-то команд наверное. Даже библиотека CMSIS не является началом, как я понял.
уточню, я понимаю, что есть компилятор, который, так сказать, переводит написанную нами программу(текстовую, например на С) в машинный код. И я хочу понять, что именно компилятор понимает, он же не понимает именно функции целые, а понимает какие-то команды, или что? А может подскажите где и что можно почитать что бы это понять?
Я пробовал заходить в глубь библиотек и смотреть что да как, но я все равно не могу понять.
Надеюсь я свою мысль передал понятно
Реклама
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

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

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

Сообщение maksimdag0 »

Что значит "с самого нижнего уровня"?
Что бы реализовать мигание светодиода, нужен как минимум CMSIS, а это уже библиотека
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Не беспокойтесь об использовании библиотек в новой библиотеке. В данном случае: просто для понимания.
Все функции такие - из библиотек, которые кто-то написал для нас для использования
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

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

Сообщение AlanDrakes »

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

Код: Выделить всё

volatile *(uint32_t *) 0x4001080C = 0x0001;
гораздо сложнее, чем

Код: Выделить всё

GPIOA->ODR = 0x0001; 
* Взял первый попавшийся заголовочник - STM32F103x6

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

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

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

Сообщение VladislavS »

maksimdag0, начинайте с заголовочного файла микроконтроллера. В нём "обозваны" и размещены в памяти регистры микроконтроллера, через которые программа и управляет контроллером. Когда поймёте как данные из программы попадают в регистры контроллера, то остальное дело техники. Читаете RM и делаете как там написано.
Реклама
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

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

Сообщение maksimdag0 »

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

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

Сообщение linkov1959 »

maksimdag0, да не важно, что Вы поняли, это пока ничего не стоит. Вы стали на путь познания! Для творческого пути Вам нужно освоить инструменты. Лучший путь с учителем, но можно и самому, гугл в помощь. Разные языки отличаются уровнем абстракции и Ваш мозг имеет разную к ним восприимчивость. Пробуйте, испытуйте свои способности и станете на свою стезю!
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

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

Сообщение maksimdag0 »

Дело в том, что я уже давно программирую(есть проекты), но детального представления того, что я спрашивал - не было.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

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

Вернуться в «ARM»