cestlavie007 发表于 2010-7-31 12:12:09

[HELP]请教裸机程序

TQ2440开发板的裸机程序里的2440lib.c中有这样一段程序
void Isr_Init(void)
{
    pISR_UNDEF= (unsigned)HaltUndef;
    pISR_SWI    = (unsigned)HaltSwi;
    pISR_PABORT = (unsigned)HaltPabort;
    pISR_DABORT = (unsigned)HaltDabort;
       
    rINTMOD   = 0x0;                                       //All=IRQ mode
    rINTMSK   = BIT_ALLMSK;                          //All interrupt is masked.
    rINTSUBMSK= BIT_SUB_ALLMSK;                  //All sub-interrupt is masked. <- April 01, 2002 SOP
}

其中
pISR_UNDEF的宏定义是
#define pISR_UNDEF                (*(unsigned *)(_ISR_STARTADDRESS+0x4))

HaltUndef是一个函数,它的原形是
void HaltUndef(void)
{
        Uart_Printf("Undefined instruction exception!!!\n");
        while(1);
}

我想请教的是,void Isr_Init(void)这个函数进行的是什么初始化,而且void HaltUndef(void)是没有返回值的,将它的void返回值强制转换成unsigned到底是unsigned int还是unsigned char,返回值赋给pISR_UNDEF,pISR_UNDEF 得到的是什么?是0吗?在线等回答,谢谢!!

hg5249345 发表于 2010-7-31 14:23:22

#define pISR_UNDEF                (*(unsigned *)(_ISR_STARTADDRESS+0x4))
这里并不是把函数HaltUndef的返回值强制转换成unsigned*

你的理解有误,再仔细看看吧,pISR_UNDEF保存的是HaltUndef函数的入口地址

至于函数Isr_Init的作用,看函数名就知道啦,初始化ISR

cestlavie007 发表于 2010-7-31 17:57:21

2# hg5249345

谢谢你,我想明白了,那句话只是把ISR的入口地址赋给pISR_UNDEF,下次想调用那个ISR的时候,直接调用pISR_UNDEF中的数据,把它作为地址,去调用ISR就可以了。
页: [1]
查看完整版本: [HELP]请教裸机程序