打印
[ZLG-ARM]

请各位指点:定时器中断会嵌套自身吗?

[复制链接]
1700|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fent|  楼主 | 2007-1-22 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在做uC/OS 第3章_基于uCOS-II的基础实验3.2_蜂鸣器控制实验 
在下面地方设断点:然后运行
发现: OSIntNesting 不断地增加,实际上整个程序只有定时器中断。
请问为什么会这样!?谢谢!是定时器中断嵌套自身吗?

    MACRO
$IRQ_Label HANDLER $IRQ_Exception_Function

        EXPORT  $IRQ_Label                      ; 输出的标号
        IMPORT  $IRQ_Exception_Function         ; 引用的外部标号

$IRQ_Label
        SUB     LR, LR, #4                      ; 计算返回地址
        STMFD   SP!, {R0-R3, R12, LR}           ; 保存任务环境
        MRS     R3, SPSR                        ; 保存状态
        STMFD   SP, {R3, SP, LR}^               ; 保存用户状态的R3,SP,LR,注意不能回写
                                                ; 如果回写的是用户的SP,所以后面要调整SP
        LDR     R2,  =OSIntNesting              ; OSIntNesting++
        LDRB    R1, [R2]
        ADD     R1, R1, #1
        STRB    R1, [R2]

        SUB     SP, SP, #4*3
        
        MSR     CPSR_c, #(NoInt | SYS32Mode)    ; 切换到系统模式
        CMP     R1, #1
        LDREQ   SP, =StackUsr
        
        BL      $IRQ_Exception_Function         ; 调用c语言的中断处理程序

        MSR     CPSR_c, #(NoInt | SYS32Mode)    ; 切换到系统模式  ---在这里设断点!!
        LDR     R2, =OsEnterSum                 ; OsEnterSum,使OSIntExit退出时中断关闭
        MOV     R1, #1
        STR     R1, [R2]

        BL      OSIntExit

相关帖子

沙发
myoiqq| | 2007-1-23 12:33 | 只看该作者

没有研究过

不过个人觉得你如果没有清楚中断位,ARM是不会再引起中断的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

16

帖子

0

粉丝