IAR中STM8中斷向量中斷函數(shù)使用及STM8L的ucos時(shí)間調(diào)度
掃描二維碼
隨時(shí)隨地手機(jī)看文章
按IAR的規(guī)矩中斷向量要加2,如PA口的中斷向量為3,那么在IAR程序中應(yīng)寫成#pragma vector=0x05。而PD7和PD其他端口不一樣,PD7后面拖了個(gè)小尾巴TLI,TLI擁有芯片最高級(jí)別中斷,享有獨(dú)立專用的中斷向量號(hào)0,因此,按IAR的規(guī)矩,向量號(hào)加2,程序改成#pragma vector=0x02,而不是PD口的其他中斷號(hào)0x08.
另外在STM8L15X.H中 有以下宏定義
#ifdef _IAR_
#define STRINGVECTOR(x) #x
#define VECTOR_ID(x) STRINGVECTOR( vector = (x) )
#define INTERRUPT_HANDLER( a, b )
_Pragma( VECTOR_ID( (b)+2 ) )
__interrupt void (a)( void )
#define INTERRUPT_HANDLER_TRAP(a)
_Pragma( VECTOR_ID( 1 ) )
__interrupt void (a) (void)
#endif
所以我們?cè)贗AR下編寫程序時(shí),無需再關(guān)心向量表,可以如同STVD下自動(dòng)產(chǎn)生的中斷函數(shù)一樣去寫
INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler, 28)
{
}
所以上官移植的stm8l的OS_CPU.A的文件中,TIMER4的中斷接口為27,如下
//TIME4 interrupt25+2
//應(yīng)該是_interrupt_xx作為匯編定義中斷服務(wù)程序入口地址的關(guān)鍵字,對(duì)應(yīng)連接到中斷向量表中;這里的中斷號(hào)xx是中斷映射表的中斷向量號(hào)+2
PUBLIC _interrupt_27
SECTION `.far_func.text`:CODE:NOROOT(0)
_interrupt_27:
SIM
BRES0x52E5, #0
INT_SAVE_REGS
SAVE_OLD_STK_PTR
CALLFOSIntEnter
CALLFOSTimeTick
CALLFOSIntExit
INT_RESTORE_REGS
END
在這個(gè)中斷中,調(diào)用了OSTimeTick,實(shí)現(xiàn)任務(wù)的切換