搜索
bottom↓
回复: 3

arm的ucos说是支持中断嵌套,不理解它的执行过程

[复制链接]

出0入0汤圆

发表于 2010-11-19 14:07:06 | 显示全部楼层 |阅读模式
请问各位:
   书上说ARM不直接支持中断嵌套,要实现中断嵌套只能发生中断时切换到系统模式后去执行中断服务程序并打开中断,然后就在中断服务程序执行中也可以响应更新优先及的中断,最新服务程序执行完后就返回到上层中断服务程序的断点处,这样就可以实现中断嵌套了。
但我看中断服务程序,怎么好像看到这样的实现步聚。
如下:
UCOS_IRQHandler


        stmfd sp!,{r0-r3,r12,lr} ;保存现场


        bl OSIntEnter          ;跳到下面程序,实际上是中断嵌套

        bl C_IRQHandler       ;计算出中断号

        bl OSIntExit          ;中断减1 ,切换最高优先级任务


        ldr r0,=OSIntCtxSwFlag ; 判断是否需要中断切换

        ldr r1,[r0]

        cmp r1,#1

        beq _IntCtxSw         ;调用中断任务切换函数,后面分析


        ldmfd sp!,{r0-r3,r12,lr} ;恢复现场

        subs pc,lr,#4

void OSIntEnter (void)

{

    if (OSRunning == OS_TRUE) {

        if (OSIntNesting < 255u) {

            OSIntNesting++;                      /* 中断记数+1                        */

        }

    }

}

如上面在中断入口处保护好了相关寄存器后,进入真正的中断服务程序C_IRQHandler前先执行OSIntEnter函数嵌套变量自加1,其它没有动作;
然后直接进入中断服务函数C_IRQHandler,再然后执行OSIntExit()函数退出中断,根据情况是否切换任务。
但这个过程中没有切换模式,在进入服务函数时也没有开中断。
是不是上面的中断程序没有实现中断嵌套功能??请侠客请教!在此谢过了!

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

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

出0入0汤圆

 楼主| 发表于 2010-11-22 17:17:09 | 显示全部楼层
等待已入,没人捧场。

出0入0汤圆

 楼主| 发表于 2010-12-7 11:09:24 | 显示全部楼层
高手们响应一下吧!

出0入0汤圆

发表于 2010-12-7 12:25:14 | 显示全部楼层
回复【2楼】jsjlj
高手们响应一下吧!
-----------------------------------------------------------------------

ucos支持中断嵌套,并没有说它帮你做中断嵌套!!
能不能嵌套跟你的CPU有关,不支持中断优先级嵌套的CPU,嵌套还是要你自己来实现!OS只是记录了你嵌套的次数。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 15:05

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

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