Skip to main content
HMüll.4
Senior
January 30, 2026
Solved

Linker offsets for bootloader -> IRQs do not work any more

  • January 30, 2026
  • 4 replies
  • 268 views

Hi,

I have some CubeMX-generated code which works properly. Originally it was created to run from default address 0x08000000.
Now I have a bootloader at address 0x08000000 which is responsible for handling updates and other stuff and then jumps into the target-code, so I moved that code via linker script to 0x08020000. This also works fine, the code works as desired.
In a next step I decided to have some additional information stored in flash prior to the CubeMX generated code to make it easier for the bootloader to manage firmware versions, so I shifted the code by additional 128 bytes and now have the following section in my linker script:

MEMORY
{
 FLASH_BOOT (rx) : ORIGIN = 0x08000000, LENGTH = 128K
 FLASH (rx) : ORIGIN = 0x08020080, LENGTH = 1024K - 128K - 128
 EEPROM_EMUL (xrw) : ORIGIN = 0x080E0000, LENGTH = 128K
 DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
 RAM_D1_DMA (xrw) : ORIGIN = 0x24000000, LENGTH = 64K
 RAM_D1 (xrw) : ORIGIN = 0x24010000, LENGTH = 320K - LENGTH(RAM_D1_DMA)
 RAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 32K
 RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 16K
 ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K
}

My problem: with the start offset of 0x08020080 my interrupts do not work any more. So what is the problem here? What do I have to do in order to work with an application offset different than 128K?

Thanks!

 

Best answer by TDK

The offset needs to be a multiple of 0x400 on the H7, as @waclawek.jan suggests.

https://community.st.com/t5/stm32-mcus-products/multiple-value-for-vect-tab-offset-on-stm32h7/td-p/613292

4 replies

waclawek.jan
Super User
January 30, 2026

Do you set SCB_VTOR to reflect this?

JW

HMüll.4
HMüll.4Author
Senior
January 30, 2026

This seems to be already covered by the changes in the linker script. On initialisation, in SystemInit(), within the statement

SCB->VTOR = (uint32_t) g_pfnVectors;

 

that g_pfnVectors points to the changed address 0x08020080

 

waclawek.jan
Super User
January 30, 2026

Which STM32?

If the vector table is longer than 0x80 - which probably in all 'H7 is - you can't have it at 0xXXXXXX80 address.

JW

Associate III
January 30, 2026

Can you maybe share more information about the MCU you use?

Do you really have a 1MB internal flash? I would think you have a H7, but share more info to be sure

TDK
TDKBest answer
Super User
January 30, 2026

The offset needs to be a multiple of 0x400 on the H7, as @waclawek.jan suggests.

https://community.st.com/t5/stm32-mcus-products/multiple-value-for-vect-tab-offset-on-stm32h7/td-p/613292

"If you feel a post has answered your question, please click ""Accept as Solution""."