天嵌 ARM开发社区

 找回密码
 注册
查看: 2209|回复: 2

[HELP]请教裸机程序

[复制链接]
cestlavie007 发表于 2010-7-31 12:12:09 | 显示全部楼层 |阅读模式
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就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-19 07:22 , Processed in 1.046875 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表