Помогите разобраться с CMSIS
Помогите разобраться с CMSIS
Доброго времени суток. Я нуб в ARM и STM32 в частности, только начал изучать.
При написании кода встречается такая конструкция "RCC->CR", покопавшись в "stm32f4xx.h" можно найти что, "RCC->CR" это обращение к некой структуре. По логике кода "RCC->CR" не что иное как регистр "RCC_CR" то есть адрес регистра. Но вот у меня возникла не задача, адрес "RCC" в библиотеке определён, но определения "Address offset" для "CR" в библиотеке я не где не смог найти, и не только для "CR" а так же для "RCC_PLLCFGR", и для"RCC_CFGR", и т.д., и т.п.
Подскажите в чём фокус, или мне не по глазам\мозгам. Заранее благодарю.
При написании кода встречается такая конструкция "RCC->CR", покопавшись в "stm32f4xx.h" можно найти что, "RCC->CR" это обращение к некой структуре. По логике кода "RCC->CR" не что иное как регистр "RCC_CR" то есть адрес регистра. Но вот у меня возникла не задача, адрес "RCC" в библиотеке определён, но определения "Address offset" для "CR" в библиотеке я не где не смог найти, и не только для "CR" а так же для "RCC_PLLCFGR", и для"RCC_CFGR", и т.д., и т.п.
Подскажите в чём фокус, или мне не по глазам\мозгам. Заранее благодарю.
- Реклама
Re: Помогите разобраться с CMSIS
О какой библиотеке речь? В *******.h файле всё есть. Вот кусок от stm32f0xx.h. Для примера.
Код: Выделить всё
typedef struct
{
__IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */
__IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x04 */
__IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x08 */
__IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x0C */
__IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x10 */
__IO uint32_t AHBENR; /*!< RCC AHB peripheral clock register, Address offset: 0x14 */
__IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x18 */
__IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x1C */
__IO uint32_t BDCR; /*!< RCC Backup domain control register, Address offset: 0x20 */
__IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x24 */
__IO uint32_t AHBRSTR; /*!< RCC AHB peripheral reset register, Address offset: 0x28 */
__IO uint32_t CFGR2; /*!< RCC clock configuration register 2, Address offset: 0x2C */
__IO uint32_t CFGR3; /*!< RCC clock configuration register 3, Address offset: 0x30 */
__IO uint32_t CR2; /*!< RCC clock control register 2, Address offset: 0x34 */
} RCC_TypeDef;
Re: Помогите разобраться с CMSIS
Библиотека указана, смотрите внимательней.
Строка, "__IO uint32_t CR;" и что мы тут видим, а видим мы тут некоторая "переменная" объявлена как volatile unsignet integer 32-x разрядный и не более, определении отсутствует. Вопрос открыт.
Строка, "__IO uint32_t CR;" и что мы тут видим, а видим мы тут некоторая "переменная" объявлена как volatile unsignet integer 32-x разрядный и не более, определении отсутствует. Вопрос открыт.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: Помогите разобраться с CMSIS
Проблема вовсе не в незнании "ARM и STM32 в частности", а в незнании языка. Приведенный выше пример все объясняет.White72ru писал(а):Я нуб в ARM и STM32 в частности, только начал изучать.
А слова offset, расставленные в изобилии, ни о чем не говорят?White72ru писал(а):и что мы тут видим, а видим мы тут некоторая "переменная" объявлена как volatile unsignet integer 32-x разрядный и не более, ... Вопрос открыт.
Re: Помогите разобраться с CMSIS
оффсет - по порядковому номеру элемента в структуре RCC_TypeDef , для uint32 через 4 байта.
Явно - не указан. Типа - компайлер всегда по порядку расставляет
Явно - не указан. Типа - компайлер всегда по порядку расставляет
- Реклама
Re: Помогите разобраться с CMSIS
Ну если заговорили о не знании языка, то ежили вы присмотритесь то offset, находится в строке комментария.Pnjom-Penb писал(а):Проблема вовсе не в незнании "ARM и STM32 в частности", а в незнании языка. Приведенный выше пример все объясняет.
З.Ы. Я сказал что "Я нуб в ARM и STM32 в частности, только начал изучать.", но я не говорил что я не знаю Си.
Re: Помогите разобраться с CMSIS
Ну я не знаю, если только так.pixar писал(а):оффсет - по порядковому номеру элемента в структуре RCC_TypeDef , для uint32 через 4 байта.
Явно - не указан. Типа - компайлер всегда по порядку расставляет
Re: Помогите разобраться с CMSIS
Если что-то не устраивает и хорошо знаете Си задайте оффсет сами. Что мешает?
Re: Помогите разобраться с CMSIS
Да на самом деле не чего не мешает. Просто столкнулся с не понятным, хотелось ясности.scorpi_0n писал(а):Если что-то не устраивает и хорошо знаете Си задайте оффсет сами. Что мешает?
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: Помогите разобраться с CMSIS
Комментарии, как известно, предназначены для программистов... Выходит, вы сами себя программистом не считаете?White72ru писал(а):... offset, находится в строке комментария
Говорил, говорил...White72ru писал(а):но я не говорил что я не знаю Си.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Помогите разобраться с CMSIS
Вы недостаточно подробно просмотрели этот заголовочный файл.
Т.к. у меня сейчас нет под рукой материалов под F4, то объясню на примемре F1.
Объявление похожей структуры:
Т.к. каждый член структуры имеет тип u32, то следующий элемент будет иметь адрес (предыдущий+4), что соотвествует расположению регистров по карте памяти. Это вроде ясно. Далее объявление адреса блока:
И наконец "создание" указателя на структуру
Теперь когда мы пишем
Препроцессор делает подстановку, видет указатель на структуру и перед нами разворачивается список регистров.
Т.к. у меня сейчас нет под рукой материалов под F4, то объясню на примемре F1.
Объявление похожей структуры:
Код: Выделить всё
typedef struct
{
__IO uint32_t CR;
__IO uint32_t CFGR;
__IO uint32_t CIR;
__IO uint32_t APB2RSTR;
__IO uint32_t APB1RSTR;
__IO uint32_t AHBENR;
__IO uint32_t APB2ENR;
__IO uint32_t APB1ENR;
__IO uint32_t BDCR;
__IO uint32_t CSR;
..
} RCC_TypeDef;Код: Выделить всё
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)Код: Выделить всё
#define RCC ((RCC_TypeDef *) RCC_BASE)Код: Выделить всё
RCC->-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: Помогите разобраться с CMSIS
Ангельское терпение!uk8amk писал(а):... ... ... и перед нами разворачивается список регистров.
Re: Помогите разобраться с CMSIS
Да pixar выше объяснил что к чему, был не осведомлён о особенности uint32. Спасибо!uk8amk писал(а):Т.к. каждый член структуры имеет тип u32, то следующий элемент будет иметь адрес (предыдущий+4)
Re: Помогите разобраться с CMSIS
Ты ежили не куя путнего изложить не можешь, спрашивается накуя пишешь? Убери руки от клавы.Pnjom-Penb писал(а):Комментарии, как известно, предназначены для программистов... Выходит, вы сами себя программистом не считаете?White72ru писал(а):... offset, находится в строке комментарияГоворил, говорил...White72ru писал(а):но я не говорил что я не знаю Си.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: Помогите разобраться с CMSIS
О, а вот и полное, непротиворечивое доказательство моей правоты.White72ru писал(а):Ты ...
Надо же, вот так - "прямо в яблочко, почти не целясь!" ©
Как жисть, ЧМО, младое, незнакомое?
Re: Помогите разобраться с CMSIS
это не особенность uint32, а часть стандарта С (члены структуры хранятся в памяти в порядке объявления, одним сплошным куском, внутри которого кроме членов структуры могут находиться только незначащие байты/биты) и конкретной реализации компилятора (выравнивание).White72ru писал(а):был не осведомлён о особенности uint32. Спасибо!


