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

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

Пн май 29, 2023 16:30:25

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

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

Я знаю, что есть ключевые слова, которые компилятор распознает согласно стандарту, но разве «RCC→CR» в ходит в ключевые слова?

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

Пн май 29, 2023 16:38:30

А никак! Ему, строго говоря, пофигу. В конце концов эта запить превращается в конкретный адрес, куда и происходит запись.

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

Пн май 29, 2023 17:05:20

Превращает ее в адрес компилятор, значит как-то же распознает)
Вот вопрос и возникает, что это выражение в стандарт входит походу.

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

Пн май 29, 2023 17:11:03

Lvalue и Rvalue. Распознаёт, конечно. Но дело таки не только в слове как таковом, а в его расположении, в структуре текста программы.

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

Пн май 29, 2023 17:22:25

Хорошо. CMSIS это набор заголовочных файлов. Как понимать какой из них мне нужно добавить в проект, что бы писать код?

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

Пн май 29, 2023 18:42:36

И Вопрос: как компилятор понимает что выражение «RCC→CR» это регистр?
Вот отсюда. Ссылка на Compiler Explorer.
Изображение
изображение_2023-05-29_183901533.png
(81.59 KiB) Скачиваний: 257


Добавлено after 2 minutes 9 seconds:
Как понимать какой из них мне нужно добавить в проект, что бы писать код?
Минимально надо заголовочный файл контроллера подключить. Что-то типа stm32f303xc.h. Остальное само из него подключится.

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

Вт май 30, 2023 17:26:46

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

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?

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

Вт май 30, 2023 18:20:07

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

2) Трудно жить с баном в гугле? Первая же ссылка в поисковике по CMSIS.

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

Ср май 31, 2023 17:53:29

Спасибо всем!
Если я спросил, значит уже гуглил, и все равно не понял.

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

Ср май 31, 2023 19:27:33

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