ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
1281234 Топик полностью
Связанные сообщения
Прописи
Логика очень простая. Прочитали два раза, если значения совпали - то они верные. Если не совпали - читаем дальше, пока не совпад...2023-02-12
Спасибо каждому ответившему. Решил тем, что в функции чтения времени предусмотрел ситуацию не только возникновения прерывания ...2023-01-26
SciFi (03.02.2023 20:18, просмотров: 358) ответил bnb62 на User-Bootloader STM32, ARM M4-M7. Процедура стандартная, копипастная во многих источниках. Но редко, где с таким важным каментом: __disable_irq(); // Note: remember to enable IRQ in application (три дня выщипывал щетину, пока не встретил это). Вставил __enable_irq(); при старте перемещенного в во флэши кода программы, и всё взлетело! Как это объяснить при полной переинициализации
Это патамушта вы неправильно делаете переход от загрузчика к приложению. Надо так: по известному адресу пишем волшебное число и делаем NVIC_SystemReset(). Первым делом при старте (до инициализации чего-либо) проверяем волшебное число по известному адресу и причину сброса в соответствующем регистре (причина == software reset). Далее прыгаем в приложение. Всё. Никаких плясок с запретом прерываний и прочей чепухи. 
bool
need_jump2app(void)
{
    // reset source is software reset and magic is in place
    bool ret = ((RCC->CSR & RCC_CSR_SFTRSTF) != 0 && reboot_marker == MAGIC);
    RCC->CSR |= RCC_CSR_RMVF; // clear reset source flag
    reboot_marker = 0;
    return ret;
}

void
Reset_Handler(void) { if (need_jump2app()) { static const uint16_t jump2app[] = { 0xc806, // ldmia r0!, {r1, r2} 0x468d, // mov sp, r1 0x4710 // bx r2 }; ((void (*)(int))(1 + (int)jump2app))(0x08010000); }
...
}
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้