Вопрос по библиотеки CMSIS

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

Сообщение maksimdag0 »

Доброго дня! Хочу понять как устроена библиотека CMSIS(если важен МК то это STM32). Пока что у меня каша в голове, все что я понимаю на данный момент, что:
СMSIS – это библиотека, в виде заголовочных файлов, где прописаны дефайны(макроопределения), при помощи которых мы можем работать с уже удобными словами, который в этом дейане написано, и этим самым мы имеем некаю абстракцию, верно?

Но пока я все равно не до конца понимаю. К примеру есть структура RCC, и далее мы эти элементы структуру используем в программе(например RCC→CR).
И Вопрос: как компилятор понимает что выражение «RCC→CR» это регистр?

Я знаю, что есть ключевые слова, которые компилятор распознает согласно стандарту, но разве «RCC→CR» в ходит в ключевые слова?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 5749
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж

Сообщение >TEHb< »

А никак! Ему, строго говоря, пофигу. В конце концов эта запить превращается в конкретный адрес, куда и происходит запись.
"Привет!" - соврал он.
Контактная информация:
Реклама
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Сообщение maksimdag0 »

Превращает ее в адрес компилятор, значит как-то же распознает)
Вот вопрос и возникает, что это выражение в стандарт входит походу.
Друг Кота
Аватара пользователя
Сообщения: 5749
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж

Сообщение >TEHb< »

Lvalue и Rvalue. Распознаёт, конечно. Но дело таки не только в слове как таковом, а в его расположении, в структуре текста программы.
"Привет!" - соврал он.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Сообщение maksimdag0 »

Хорошо. CMSIS это набор заголовочных файлов. Как понимать какой из них мне нужно добавить в проект, что бы писать код?
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="maksimdag0",url="/forum/viewtopic.php?p=4422747#p4422747"]И Вопрос: как компилятор понимает что выражение «RCC→CR» это регистр?[/uquote]Вот отсюда. Ссылка на Compiler Explorer.
Изображение
изображение_2023-05-29_183901533.png
(81.59 КБ) 405 скачиваний
Добавлено after 2 minutes 9 seconds:
[uquote="maksimdag0",url="/forum/viewtopic.php?p=4422772#p4422772"]Как понимать какой из них мне нужно добавить в проект, что бы писать код?[/uquote]Минимально надо заголовочный файл контроллера подключить. Что-то типа stm32f303xc.h. Остальное само из него подключится.
Реклама
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Сообщение maksimdag0 »

Лаконично и ясно пояснил, вроде бы все понял, но есть еще парочку вопросов. Как бы я не гуглил, никак не могу понять:

1) как выражение ((GPIO_TypeDef *) GPIOA_BASE) превращается в указатель структуры GPIO_TypeDef?

Допустим есть две обычные переменные и один указатель:

int x = 300;
char y;

int *pV = &x;

y = *((char *)pV); //здесь мы говорим компилятору, что возьмем только один байт с 4х, и тогда переменной ”y” присвоится значение “x” первого байта, а то есть 44.
Здесь все понятно.

А вот как здесь «((GPIO_TypeDef *) GPIOA_BASE)» работает преобразование типов? GPIOA_BASE — я так понимаю, что это указатель, а то есть константа, определяющая адрес. А это «(GPIO_TypeDef *)» преобразования типа указателя, в итоге это преобразование делает указатель( GPIOA_BASE) струтурой?

Весь интернет обошел, так и не могу понял, тугодум я.





2) И Второй вопрос, Возможно глупый.
Получается, что у каждого Микроконтроллера всегда есть свой заголовочный файл, считающийся библиотекой CMSIS?
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

1)GPIOA_BASE это обычная целочисленная константа 0x48000000. ((GPIO_TypeDef *) GPIOA_BASE) это указатель на структуру типа GPIO_TypeDef. Или адрес первого элемента структуры, если на пальцах. Зная адрес первого элемента и тип(размер) всех остальных элементов легко получить доступ к любому полю структуры смещением от указателя. Что компилятор автоматически и делает.

2) Трудно жить с баном в гугле? Первая же ссылка в поисковике по CMSIS.
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Сообщение maksimdag0 »

Спасибо всем!
Если я спросил, значит уже гуглил, и все равно не понял.
Встал на лапы
Сообщения: 120
Зарегистрирован: Пт мар 19, 2021 08:58:45

Сообщение kote52 »

https://www.youtube.com/@Solderingironspb/featured
вот тебе ссылка на канал для начала въехать что к чему хватит по CMSIS.
Ответить

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