История изменений
Исправление snake266, (текущая версия) :
Ну, просто de_init первая функция, которая попалась под руку, я хотел попробовать избавиться от блокировок. Изначально было так:
void rcc_deinit(void) {
/* Enable HSI */
RCC->CR |= RCC_CR_HSION;
/* Wait until HSI is ready */
while((RCC->CR & RCC_CR_HSIRDY) != ENABLE) {}
/* Clear CFG register */
RCC->CFGR = 0x00; /* Also this will set SW to HSI */
RCC->CFGR2 = 0x00;
RCC->CFGR3 = 0x00;
/* Wait until it's switched to HSI mode */
while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI) {}
/* Disable PLL */
RCC->CR &= ~RCC_CR_PLLON;
while((RCC->CR & RCC_CR_PLLRDY) != DISABLE) {}
/* Disable CSS and HSE */
RCC->CR &= ~(RCC_CR_CSSON | RCC_CR_HSEON);
while((RCC->CR & RCC_CR_HSERDY) != DISABLE) {}
RCC->CR &= ~(RCC_CR_HSEBYP);
}
Но я понял, на функциях которые настраивают что-то системное, можно и «потупить», так? А так, для меня уже есть польза от этого треда, узнал про __DBM()
, надо посмотреть как им пользоваться. Как раз поизучаю ваш код на гитхабе, думаю я там много полезного для себя смогу найти.
Кстати, я вот смотрю все используют разный inline
: кто-то __force_inline
, кто-то просто inline
, кто-то __attribute__((always_inline))
– есть какая-то прям значительная разница, это же все равно рекомендацию компилятору?
Исходная версия snake266, :
Ну, просто de_init первая функция, которая попалась под руку, я хотел попробовать избавиться от блокировок. Изначально было так:
void rcc_deinit(void) {
/* Enable HSI */
RCC->CR |= RCC_CR_HSION;
/* Wait until HSI is ready */
while((RCC->CR & RCC_CR_HSIRDY) != ENABLE) {}
/* Clear CFG register */
RCC->CFGR = 0x00; /* Also this will set SW to HSI */
RCC->CFGR2 = 0x00;
RCC->CFGR3 = 0x00;
/* Wait until it's switched to HSI mode */
while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI) {}
/* Disable PLL */
RCC->CR &= ~RCC_CR_PLLON;
while((RCC->CR & RCC_CR_PLLRDY) != DISABLE) {}
/* Disable CSS and HSE */
RCC->CR &= ~(RCC_CR_CSSON | RCC_CR_HSEON);
while((RCC->CR & RCC_CR_HSERDY) != DISABLE) {}
RCC->CR &= ~(RCC_CR_HSEBYP);
}
Но я понял, на функциях которые настраивают что-то системное, можно и потупить, так? А так, для меня уже есть польза от этого треда, узнал про __DBM()
, надо посмотреть как им пользоваться. Как раз поизучаю ваш код на гитхабе, думаю я там много полезного для себя смогу найти.
Кстати, я вот смотрю все используют разный inline
: кто-то __force_inline
, кто-то просто inline
, кто-то __attribute__((always_inline))
– есть какая-то прям значительная разница, это же все равно рекомендацию компилятору?