aishiqi1992 发表于 2012-2-25 21:04:25

刚刚看了2440的一个简单的案件中断程序,有一个小地方不懂。。请教。。

就是服务程序挂载的地方在文档上找不到对应的资料。。



    pISR_EINT0 = (unsigned)Eint0_ISR;                //挂载中断
顺藤摸瓜:
#define pISR_EINT0                (*(unsigned *)(_IRQ_BASEADDRESS+0x20))
顺藤摸瓜:
#define _IRQ_BASEADDRESS         0x33ffff00

最后在手册中找不到关于_IRQ_BASEADDRESS0x33ffff00的信息了。。
谢谢

s200661524 发表于 2012-3-4 13:43:17

这有什么奇怪的,这个地址是在内存里面,发生中断后先跳到IRQ中断向量,那个地方有几句汇编语言,又会发生一次跳转,估计是在那个地方以_IRQ_BASEADDRESS为基地址,以发生的中断号为偏移(实际是中断号左移2位)就找到了对应的中断函数

aishiqi1992 发表于 2012-3-4 16:52:22

回复【1楼】s200661524
-----------------------------------------------------------------------

转来转去的,也不知道是怎么转过去的。再说_IRQ_BASEADDRESS 凭什么就是 0x33ffff00?手册也没说啊。莫非该地址是软件定义的?莫非是传说中的bootloader?

s200661524 发表于 2012-3-4 20:13:47

也可以定的内存的中间位置,不过这样一来就得小心程序别把它覆盖了,手册上给这个地址干嘛?想想别人为什么一定要定义在0x33ffff00?你看看这个地址是不是是的内存靠近最末尾的位置?这样就不用考虑向量被覆盖了,别人那么做是有道理的,不是随意定义一个地址就完了。

cunlingwang 发表于 2012-3-28 12:59:41

楼上正解
页: [1]
查看完整版本: 刚刚看了2440的一个简单的案件中断程序,有一个小地方不懂。。请教。。