LINUX.ORG.RU

История изменений

Исправление 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)) – есть какая-то прям значительная разница, это же все равно рекомендацию компилятору?