Доброго дня! Хочу понять как устроена библиотека CMSIS(если важен МК то это STM32). Пока что у меня каша в голове, все что я понимаю на данный момент, что: СMSIS – это библиотека, в виде заголовочных файлов, где прописаны дефайны(макроопределения), при помощи которых мы можем работать с уже удобными словами, который в этом дейане написано, и этим самым мы имеем некаю абстракцию, верно?
Но пока я все равно не до конца понимаю. К примеру есть структура RCC, и далее мы эти элементы структуру используем в программе(например RCC→CR). И Вопрос: как компилятор понимает что выражение «RCC→CR» это регистр?
Я знаю, что есть ключевые слова, которые компилятор распознает согласно стандарту, но разве «RCC→CR» в ходит в ключевые слова?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Лаконично и ясно пояснил, вроде бы все понял, но есть еще парочку вопросов. Как бы я не гуглил, никак не могу понять:
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?
1)GPIOA_BASE это обычная целочисленная константа 0x48000000. ((GPIO_TypeDef *) GPIOA_BASE) это указатель на структуру типа GPIO_TypeDef. Или адрес первого элемента структуры, если на пальцах. Зная адрес первого элемента и тип(размер) всех остальных элементов легко получить доступ к любому полю структуры смещением от указателя. Что компилятор автоматически и делает.
2) Трудно жить с баном в гугле? Первая же ссылка в поисковике по CMSIS.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения