搜索
bottom↓
回复: 5

求助 关于ucos中断问题

[复制链接]

出0入0汤圆

发表于 2010-12-14 18:25:11 | 显示全部楼层 |阅读模式
static  void  BSP_IntHandler (CPU_DATA  int_id)
//void  BSP_IntHandlerEXTI9_5       (void)  { BSP_IntHandler(BSP_INT_ID_EXTI9_5);         }
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
    CPU_SR         cpu_sr;

#endif
    CPU_FNCT_VOID  isr;
       

    CPU_CRITICAL_ENTER();                                       /* Tell uC/OS-II that we are starting an ISR            */
    OSIntNesting++;
    CPU_CRITICAL_EXIT();

    if (int_id < BSP_INT_SRC_NBR) {
        isr = BSP_IntVectTbl[int_id];
        if (isr != (CPU_FNCT_VOID)0) {
            isr();
        }
    }
       
    OSIntExit();                                                /* Tell uC/OS-II that we are leaving the ISR            */
}

中断服务函数是在这加的  如果有多个中断  是不是都加在这个函数里面?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-12-14 22:59:29 | 显示全部楼层
额  补充下 是不是可以通过相互间的标志位来区别?这样子就可以放到同一个函数里了。。。。

出0入0汤圆

发表于 2010-12-15 02:36:43 | 显示全部楼层
没看过ucos在ARM上的移植,但仅仅看这一段还是比较好猜的。
BSP_IntHandler应该是一个所有中断的共同服务例程,中断依靠参数int_id来区别,关键是函数中的这三句:

isr = BSP_IntVectTbl[int_id];  // BSP_IntVectTbl应该是一个函数指针数组,里面的每一个指针都是与下标(int_id)对应的中断服务例程。
if (isr != 0)       // 如果指针不空。
   isr();            // 则调用指针指向的中断服务例程。

如果看明白了这三句的意思,那么中断服务例程在哪里加,就应该很清楚了:
1、定义一个中断服务例程(名字随便取):
void xxxx_isr()
{
...
}
2、找一下有没有已定义好的填写BSP_IntVectTbl数组的函数或宏,如果有,则把xxxx_isr和希望的中断号作为参数调用那个函数或宏;如果没有,就自己直接往BSP_IntVectTbl数组里对应的中断号填写即可。

出0入0汤圆

 楼主| 发表于 2010-12-17 18:50:53 | 显示全部楼层
回复【2楼】John_Lee
-----------------------------------------------------------------------

哦哦  谢谢哈

出0入0汤圆

发表于 2013-11-1 14:57:25 | 显示全部楼层
参考这个
BSP_IntVectSet(BSP_INT_ID_DMA1_CH5, UART1Rx_DMA1_CH5_Interrupt);
        BSP_IntPrioSet(BSP_INT_ID_DMA1_CH5, DMA1_CH5_UART1Rx_UIP);
        BSP_IntEn(BSP_INT_ID_DMA1_CH5);

出0入0汤圆

发表于 2014-6-4 00:00:30 | 显示全部楼层
John_Lee 发表于 2010-12-15 02:36
没看过ucos在ARM上的移植,但仅仅看这一段还是比较好猜的。
BSP_IntHandler应该是一个所有中断的共同服务例 ...

能不能给个例程啊。比如BSP_IntHandler (CPU_DATA  int_id)这个函数要改么,而自己写的例程需要寄存器值保护么?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 07:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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