这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » ARM中断的一个问题

共5条 1/1 1 跳转至

ARM中断的一个问题

工程师
2009-12-27 15:46:09     打赏
在周立功开发板的模版中中断异常的处理函数是这样的

void __irq IRQ_Exception(void)
{
    void    (*__Handler)(void); 
 int     irq_no;
 uint32  bak;  
 
 // 找出当前中断号
 bak = rINTPND;    // 读取INTPND的值
 
 for(irq_no=0; irq_no<32; irq_no++)
 { 
     bak = bak>>1;
  if(bak == 0) break;
 }
 
 // 取得中断服务程序地址并执行
 __Handler = (void (*)(void)) VICVectAddr[irq_no];
 __Handler();

}

 

 

有一点不明白为什么要使用void    (*__Handler)(void); 这个指针这种机制来实现跳到中断服务函数呢?中断号已经取得了,这个函数最后直接用VICVectAddr[irq_no];过去不行吗?

希望得到高手解惑!




关键词: 中断     一个     问题    

高工
2009-12-27 16:26:31     打赏
2楼
我个人觉得:

__Handler = (void (*)(void)) VICVectAddr[irq_no];
 __Handler();


VICVectAddr[irq_no]();

效果是一样的。没有仔细验证过,欢迎拍砖。

这种函数指针的用法实在是巧妙。

工程师
2009-12-27 21:00:00     打赏
3楼
我已经知道了,这是函数指针。
我还有一个问题需要请教Jason_Zhang,为什么我的程序大于4K的话烧到NAND FLASH 会起不来,小于4K就可以呢?

高工
2009-12-27 22:39:12     打赏
4楼

查看一下“分散加载文件”(好像是这个名字吧),看看你的地址映射是什么样的,4K的限制应该跟这个有关。


工程师
2009-12-29 08:56:03     打赏
5楼
4K的那个今天差不多能解决了,谢谢

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]