Откуда берется начало
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Откуда берется начало
Всем доброго дня! Надеюсь пишу в ту тему. У меня следующая проблема: у меня нет представления (знания) программирования микрокотроллеров без библиотек. То есть я хочу понять, что является началом, ведь все библиотеки(например SPL, HAL) это библиотеки определенного уровня абстракции, но ведь они должны быть написаны из самого начала, из чего-то, то есть каких-то команд наверное. Даже библиотека CMSIS не является началом, как я понял.
уточню, я понимаю, что есть компилятор, который, так сказать, переводит написанную нами программу(текстовую, например на С) в машинный код. И я хочу понять, что именно компилятор понимает, он же не понимает именно функции целые, а понимает какие-то команды, или что? А может подскажите где и что можно почитать что бы это понять?
Я пробовал заходить в глубь библиотек и смотреть что да как, но я все равно не могу понять.
Надеюсь я свою мысль передал понятно
уточню, я понимаю, что есть компилятор, который, так сказать, переводит написанную нами программу(текстовую, например на С) в машинный код. И я хочу понять, что именно компилятор понимает, он же не понимает именно функции целые, а понимает какие-то команды, или что? А может подскажите где и что можно почитать что бы это понять?
Я пробовал заходить в глубь библиотек и смотреть что да как, но я все равно не могу понять.
Надеюсь я свою мысль передал понятно
- Реклама
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1907
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Откуда берется начало
Чтобы не чувствовать, что программные библиотеки "волшебные"(прогр. код не писали люди, а код там просто есть), начните с самого нижнего уровня: напишите led blink, а затем: led blink в библиотеке, напр. с выбор "мигающего" выхода, время включения, время выключения ... Затем используйте встроенную библиотеку в некоторых других своих новых программах. ... После этого будет легко.
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Re: Откуда берется начало
Что значит "с самого нижнего уровня"?
Что бы реализовать мигание светодиода, нужен как минимум CMSIS, а это уже библиотека
Что бы реализовать мигание светодиода, нужен как минимум CMSIS, а это уже библиотека
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1907
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Откуда берется начало
Не беспокойтесь об использовании библиотек в новой библиотеке. В данном случае: просто для понимания.
Все функции такие - из библиотек, которые кто-то написал для нас для использования
Все функции такие - из библиотек, которые кто-то написал для нас для использования
- AlanDrakes
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Пн июл 04, 2016 16:51:22
- Откуда: Россия, Омск
Re: Откуда берется начало
CMSIS, больше не библиотека, а словарь. Во всяком случае, те заголовочники, которыми обычно пользуюсь я в своих проектах.
Он содержит мнемонические названия регистров.
Ведь писать
гораздо сложнее, чем
* Взял первый попавшийся заголовочник - STM32F103x6
Плюс, самый минимум для того, чтобы заставить работать прошивку контроллера, потребуется ещё линкер и его скрипт (которые раскажут куда складывать какие участки кода), startup файл (с таблицей векторов прерываний). Остальное можно написать самому.
Самое начало - ассемблер. Да и то использует таблицу регистров.
Для AVR что-то типа такой. Формально, именно такие преобразования можно считать самым началом. Примерно так программировали первые компьютеры.
А потом пошло упрощение для облегчения и ускорения программирования. Затем (и примерно в то же время) пошли библиотеки с готовыми функциями, потом выше, выше, выше... И вот мы пришли к HAL - библиотека уровня абстракции от железа. Универсальная - код можно *теоретически* написать на F7* чипе и с минимальными изменениями заставить работать на F0* кристаллах. Но тут я взял слишком радикальный пример.
А на SPL придётся многое переписывать. Про CMSIS - вообще молчу. Есть у меня несколько заготовок кода, которые мигрируют между разными проектами и при переходе с ядра на ядро приходится их допиливать, потому что регистры отличаются. Каких-то нет, какие-то не имеют отдельных битов. И так далее.
Он содержит мнемонические названия регистров.
Ведь писать
Код: Выделить всё
volatile *(uint32_t *) 0x4001080C = 0x0001;Код: Выделить всё
GPIOA->ODR = 0x0001; Плюс, самый минимум для того, чтобы заставить работать прошивку контроллера, потребуется ещё линкер и его скрипт (которые раскажут куда складывать какие участки кода), startup файл (с таблицей векторов прерываний). Остальное можно написать самому.
Самое начало - ассемблер. Да и то использует таблицу регистров.
Для AVR что-то типа такой. Формально, именно такие преобразования можно считать самым началом. Примерно так программировали первые компьютеры.
А потом пошло упрощение для облегчения и ускорения программирования. Затем (и примерно в то же время) пошли библиотеки с готовыми функциями, потом выше, выше, выше... И вот мы пришли к HAL - библиотека уровня абстракции от железа. Универсальная - код можно *теоретически* написать на F7* чипе и с минимальными изменениями заставить работать на F0* кристаллах. Но тут я взял слишком радикальный пример.
А на SPL придётся многое переписывать. Про CMSIS - вообще молчу. Есть у меня несколько заготовок кода, которые мигрируют между разными проектами и при переходе с ядра на ядро приходится их допиливать, потому что регистры отличаются. Каких-то нет, какие-то не имеют отдельных битов. И так далее.
- Реклама
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Откуда берется начало
maksimdag0, начинайте с заголовочного файла микроконтроллера. В нём "обозваны" и размещены в памяти регистры микроконтроллера, через которые программа и управляет контроллером. Когда поймёте как данные из программы попадают в регистры контроллера, то остальное дело техники. Читаете RM и делаете как там написано.
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Re: Откуда берется начало
Добрый вечер! Спасибо всем за ответы, особенно вам "AlanDrakes", все подробно расписали.
Кажется я понял какой ответ на мой вопрос:
У каждого языка есть определенный синтаксис, который понимает компилятор(AlanDrakes назвал это мнемоническими названиями регистров как я понял). Но писать таким синтаксисом трудоемко и сложно, поэтому создали библиотек CMSIS, ну а дальше уже относительно библиотеки CMSIS создали следующую и так далее. То есть самое начало, именно в языке си, это тот самый синтаксис, который понимает компилятор для языка СИ (например типы int, float,char.... или операторы if else и тд).
Правильно ли я понял?
Кажется я понял какой ответ на мой вопрос:
У каждого языка есть определенный синтаксис, который понимает компилятор(AlanDrakes назвал это мнемоническими названиями регистров как я понял). Но писать таким синтаксисом трудоемко и сложно, поэтому создали библиотек CMSIS, ну а дальше уже относительно библиотеки CMSIS создали следующую и так далее. То есть самое начало, именно в языке си, это тот самый синтаксис, который понимает компилятор для языка СИ (например типы int, float,char.... или операторы if else и тд).
Правильно ли я понял?
-
linkov1959
- Держит паяльник хвостом
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
Re: Откуда берется начало
maksimdag0, да не важно, что Вы поняли, это пока ничего не стоит. Вы стали на путь познания! Для творческого пути Вам нужно освоить инструменты. Лучший путь с учителем, но можно и самому, гугл в помощь. Разные языки отличаются уровнем абстракции и Ваш мозг имеет разную к ним восприимчивость. Пробуйте, испытуйте свои способности и станете на свою стезю!
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Re: Откуда берется начало
Дело в том, что я уже давно программирую(есть проекты), но детального представления того, что я спрашивал - не было.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Откуда берется начало
Если вдруг захотите, можете полистать мои заметки по работе с контроллером (правда, risc-v, а не arm, но суть примерно одинаковая). Там и про то откуда берутся адреса периферии, и кто инициализирует Си-шные переменные. Разумеется, это не истина в последней инстанции, а так, общее представление сформировать. В arm немного по-другому устроен ассемблер, работа со стеком, старт контроллера, прерывания и многое другое, но зная что и для чего делается, гораздо проще понимать и особенности вашего камня.


