Custom bootloader and application initialization
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2019-01-11 1:00 PM
I have a question on initialization in a custom booloader and application code.
Usually initialization of a bootloader is as follows:
- startup_x.s calls SystemInit(), where SCB->VTOR is set to 0x08008000
- Clocks are configured by calling SystemClock_Config()
- HAL_Init() is called
- Peripherals are initialized
- interrupts are configured and enabled
When jumping to application (after disabling interrupts) I usually employ all of the above, re-initializing clocks and peripherals again and enabling interrupts. I also modify SCB->VTOR in a SystemInit() to set it to 0x08008000.
The question is - since all registers are kept intact (are they?) after jump, would it be legal and advisable to do the following in application initialization:
- comment out SystemInit() call in a startup_x.s
- use SCB->VTOR = 0x08008000; in application code
- skip clock init calls since clocks are the same as in bootloader
- skip call to HAL_Init()
- configure peripherals used additionally in application
- enable interrupts
Of coarse, all skipped steps should be conditionally employed in debugging by USE_DEBUG option.
Is anything wrong with this approach?
Would it be safer just to use all the routines in both bootloader and application?
Thank you,
Gennady
- Labels:
-
Bootloader
