cancel
Showing results for 
Search instead for 
Did you mean: 

What causes ''__STM32ReservedException9()'' ?

tbergmann9
Associate
Posted on February 04, 2011 at 09:52

What causes '__STM32ReservedException9()' ?

4 REPLIES 4
Posted on May 17, 2011 at 14:23

Well __STM32ReservedException9() is one of the System Handler class, not a NVIC class interrupt. So you want to look at the core documentation, over anything specific to the STM32.

It's also probable that it's dumping into __STM32DefaultExceptionHandler, unless you have explicit handlers for all the exceptions. So It could be coming from anywhere. Do you have any handlers on the Hard, Bus, Memory and Usage Exceptions, so you can track things down better?

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
picguy2
Associate II
Posted on May 17, 2011 at 14:23

My debug trick is to route ALL unused vectors to a jmp to itself.  Small sample

RtcHandler              b       RtcHandler

FlashHandler            b       FlashHandler

RccHandler              b       RccHandler

ExtiLine0               b       ExtiLine0

When I see where it stopped I have a better clue as to what happened.  All vectors - not just the 60 or so defined by ST.

tbergmann9
Associate
Posted on May 17, 2011 at 14:23

Hi,

looking for the documentation at arms website i found this:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337i/index.html

But searching for ''exception'' i didnt find an answer.

We are using ''lanchon'', so the exception is forwared to the default Excpetion handler:

    .weak    __STM32ReservedException9

    .globl    __STM32ReservedException9

    .set    __STM32ReservedException9, __STM32DefaultExceptionHandler

We have (dummy) handlers for:

void NMIException(void);

void HardFaultException(void);

void MemManageException(void);

void BusFaultException(void);

void UsageFaultException(void);

void DebugMonitor(void);

void SVCHandler(void);

void PendSVC(void);

void SysTickHandler(void);

void WWDG_IRQHandler(void);

void PVD_IRQHandler(void);

void TAMPER_IRQHandler(void);

void RTC_IRQHandler(void);

void FLASH_IRQHandler(void);

void RCC_IRQHandler(void);

void EXTI0_IRQHandler(void);

void EXTI1_IRQHandler(void);

void EXTI2_IRQHandler(void);

void EXTI3_IRQHandler(void);

void EXTI4_IRQHandler(void);

void DMA1_Channel1_IRQHandler(void);

void DMA1_Channel2_IRQHandler(void);

void DMA1_Channel3_IRQHandler(void);

void DMA1_Channel4_IRQHandler(void);

void DMA1_Channel5_IRQHandler(void);

void DMA1_Channel6_IRQHandler(void);

void DMA1_Channel7_IRQHandler(void);

void ADC1_2_IRQHandler(void);

void USB_HP_CAN_TX_IRQHandler(void);

void USB_LP_CAN_RX0_IRQHandler(void);

void CAN_RX1_IRQHandler(void);

void CAN_SCE_IRQHandler(void);

void EXTI9_5_IRQHandler(void);

void TIM1_BRK_IRQHandler(void);

void TIM1_UP_IRQHandler(void);

void TIM1_TRG_COM_IRQHandler(void);

void TIM1_CC_IRQHandler(void);

void TIM2_IRQHandler(void);

void TIM3_IRQHandler(void);

void TIM4_IRQHandler(void);

void I2C1_EV_IRQHandler(void);

void I2C1_ER_IRQHandler(void);

void I2C2_EV_IRQHandler(void);

void I2C2_ER_IRQHandler(void);

void SPI1_IRQHandler(void);

void SPI2_IRQHandler(void);

void USART1_IRQHandler(void);

void USART2_IRQHandler(void);

void USART3_IRQHandler(void);

void EXTI15_10_IRQHandler(void);

void RTCAlarm_IRQHandler(void);

void USBWakeUp_IRQHandler(void);

void TIM8_BRK_IRQHandler(void);

void TIM8_UP_IRQHandler(void);

void TIM8_TRG_COM_IRQHandler(void);

void TIM8_CC_IRQHandler(void);

void ADC3_IRQHandler(void);

void FSMC_IRQHandler(void);

void SDIO_IRQHandler(void);

void TIM5_IRQHandler(void);

void SPI3_IRQHandler(void);

void UART4_IRQHandler(void);

void UART5_IRQHandler(void);

void TIM6_IRQHandler(void);

void TIM7_IRQHandler(void);

void DMA2_Channel1_IRQHandler(void);

void DMA2_Channel2_IRQHandler(void);

void DMA2_Channel3_IRQHandler(void);

void DMA2_Channel4_5_IRQHandler(void);

where can i find the ''full'' List of interrupts?

Posted on May 17, 2011 at 14:23

Well the list seems to be fairly complete. I'm not sure ST breaks out a table, but such an enumeration exists in startup.s (or whatever) within the tool-chain/firmware library.

Chances are that you aren't in fact getting a reserved exception, as the core is unlikely to be generating them. In order to differentiate them you're going to have to create explicit handlers for each.

http://infocenter.arm.com/help/topic/com.arm.doc.dai0179b/AppsNote179.pdf

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..